Jenkins Server von internen Endlosschleifen bedroht


Tel Aviv / Frankfurt am Main 11. Februar 2020

Das Threat Research Team von Radware warnt Betreiber von Jenkins-Servern vor einer akuten Bedrohung im Zusammenhang mit dem vom Jenkins Project veröffentlichten Security Advisory 1641, auch als CVE-2020-2100 bekannt. Nach Erkenntnissen von Radware sind 12.000 solcher Server anfällig für Distributed Reflective Denial of Service (DrDOS) Attacken mit einem Verstärkungsfaktor von durchschnittlich 6,44. Knapp 1.700 oder 14 % dieser Server stehen in Deutschland. Akute Gefahr droht vor allem den Betreibern von Jenkins Servern selbst, da ein Hacker mit nur einem gespooften UDP-Paket eine Endlosschleife aus Anfragen und Antworten zwischen mehreren Jenkins Servern initiieren kann, die erst beendet wird, wenn auch die jeweiligen Services beendet werden.

"Viele DevOps-Teams verlassen sich auf Jenkins, um ihre Anwendungen zu entwickeln, zu testen und kontinuierlich in Cloud- und Shared Hosting-Umgebungen wie Amazon, OVH, Hetzner, Host Europe, DigitalOcean, Linode und vielen anderen zu implementieren" so Pascal Geenens, Cyber Security Evangelist bei Radware. "Ähnlich wie bei Memcrashed gehen die Leute, die im Rahmen des Open-Source-Projekts Jenkin entwickeln, davon aus, dass diese Server nur intern zur Verfügung stehen werden. In Wirklichkeit funktionieren diese Annahmen jedoch nicht gut, und viele Jenkins-Server sind tatsächlich öffentlich zugänglich."

Reflective DoS

Jenkins unterstützt standardmäßig zwei Netzwerkerkennungsdienste: UDP-Multicast/Broadcast und DNS-Multicast. Die Schwachstelle ermöglicht es Angreifern, Jenkins-Server zu missbrauchen, indem sie UDP-Anforderungen von Port UDP/33848 aus reflektieren, was zu einem verstärkten DDoS-Angriff mit Jenkins-Metadaten führt. Dies ist möglich, weil Jenkins/Hudson-Server den Netzwerkverkehr nicht ordnungsgemäß überwachen und offen gelassen werden, um andere Jenkins/Hudson-Instanzen zu entdecken. Jenkins/Hudson hört jeden Datenverkehr auf dem UDP-Port 33848 ab und reagiert darauf. Ein Angreifer kann entweder lokal ein UDP-Broadcast-Paket an 255.255.255.255.255:33848 senden oder er kann ein UDP-Multicast-Paket an JENKINS_REFLECTOR:33848 einsetzen. Wenn ein Paket empfangen wird, sendet Jenkins oder sein Vorgänger Hudson unabhängig von der Nutzlast eine XML-Antwort mit Metadaten in einem Datagramm an den anfordernden Client. Durch die Erstellung von UDP-Paketen mit der IP eines Opfers als Quelle und der IP eines exponierten Jenkins-Servers und Port udp/33848 als Ziel kann ein böswilliger Akteur eine reflektierende Flut von Paketen zwischen dem Jenkins-Server und dem Opfer erzeugen. Der Verstärkungsfaktor variiert zwischen den Jenkins-Servern, beträgt aber im Durchschnitt 6,44.

Endlosschleife zwischen Jenkins-Servern

Sorgfältig gestaltete UDP-Pakete können auch zwei Jenkins-Server in eine Endlosschleife von Antworten bringen, wodurch ein Denial-of-Service gegen beide Server verursacht wird. Dies ist möglich, weil der Jenkins-Discovery-Service auf jede Anfrage reagiert, unabhängig von deren Inhalt. Ein UDP-Paket, das als Quelle die IP eines exponierten Servers und als Ziel die IP eines anderen exponierten Jenkins-Servers verwendet, wobei sowohl Quelle als auch Ziel auf den Port udp/33848 des Jenkins-Discovery Service gesetzt sind, gehen beide Jenkins-Server in eine unendliche Antwortschleife. Ein böswilliger Akteur wäre laut Radware zudem in der Lage, mehrere unendliche Antwortschleifen zwischen beliebigen exponierten Jenkins-Servern im Internet zu erstellen, wodurch schließlich ein vollständig vermaschter, unendlicher Strom von Paketen zwischen den exponierten Internet-Hosts entsteht.

Wenn der Port udp/33848 im Internet offengelegt wird, wird er zu einer öffentlichen Bedrohung und kann für DrDoS mit Verstärkung missbraucht oder dazu genutzt werden, die Jenkins-Cluster mehrerer Organisationen auszuschalten. Die Schwachstelle wurde in Jenkins 2.219 und LTS 2.204.2 behoben, indem sowohl UDP-Multicast/Broadcast als auch DNS-Multicast standardmäßig deaktiviert wurden.