
Java-Agent, der eine anfällige Klasse transformiert, um die Ausnutzung von CVE-2024-43044 in Jenkins-Controllern zu blockieren, mit optionalem erzwungenem Herunterfahren bei Fehlern.
Dies ist ein Java-Agent für Jenkins-Controller, die den Fix für SECURITY-3430 nicht haben (d.h. bis einschließlich 2.470 und LTS 2.452.3).
Es transformiert die Definition der Klasse, die die SECURITY-3430-Sicherheitslücke enthält, um deren Ausnutzung zu verhindern. Falls dies aus irgendeinem Grund fehlschlägt, wird Jenkins zwangsweise gestoppt.
Dieser Workaround blockiert ClassLoaderProxy#fetchJar vollständig und ist daher nicht kompatibel mit der betroffenen Funktionalität der im Sicherheitshinweis genannten Plugins, anders als der reguläre Fix.
Dieser Workaround wurde erfolgreich mit mehreren aktuellen Jenkins-Versionen der letzten Jahre getestet.
WARNUNG: Aufgrund der Funktionsweise dieses Workarounds empfehlen wir dringend, regelmäßig Sicherungskopien von Jenkins zu erstellen und den Workaround schrittweise bereitzustellen.
Schützen Sie den Jenkins-Controller-Prozess vor Ausnutzung:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
Wenden Sie die Transformation auf die angegebene Klassendatei RemoteClassLoader$ClassLoaderProxy.class an und schreiben Sie das Ergebnis in eine andere Datei:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
Dies könnte verwendet werden, um minimal modifizierte remoting.jar-Dateien zu erstellen.
Zwei Java-Systemeigenschaften können gesetzt werden, um das Verhalten dieses Java-Agents zu ändern:
io.jenkins.security.Security3430Workaround.DISABLE: Setzen Sie dies auf true, um die Klassentransformation zu deaktivieren.io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN: Setzen Sie dies auf true, um den Jenkins-Prozess bei fehlgeschlagener Klassentransformation nicht zu stoppen. Nur in bestimmten engen Situationen empfohlen, z.B. bei genauer Überwachung von Protokollmeldungen (siehe unten).Beide müssen gesetzt werden, bevor die Klasse geladen und ein Transformationsversuch unternommen wird, idealerweise als -D-Kommandozeilenoption.
Protokollmeldungen verwenden den Logger io.jenkins.security.Security3430Workaround. Auf SEVERE protokollierte Meldungen weisen auf einen Transformationsfehler hin.
Führen Sie den folgenden Code in der Skriptkonsole eines verbundenen Jenkins-Agents aus, um die Wirksamkeit dieses Workarounds zu bestätigen:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
Ohne Fix und ohne Workaround wird eine Meldung wie die folgende gedruckt, die auf eine erfolgreiche Ausnutzung hinweist: Result: [B@23edd8a0
Mit angewendetem Workaround wird dies einen AbstractMethodError auslösen und eine lange Stacktrace ausgeben.
Lizenziert unter den Bedingungen der MIT-Lizenz. Urheberrecht 2024 CloudBees, Inc.