
CVE-2025-53652: Jenkins Git-Parameteranalyse
Diese Schwachstelle entsteht, weil benutzergesteuerte Eingaben aus Jenkins-Build-Parametern unsicher in den Git-Checkout-Befehl eingefügt werden.
Benutzereingaben werden als Build-Parameter bereitgestellt (z.B. gitParameters), die bösartige Shell-Befehle enthalten können.
Dieser Parameter wird in einen GitParameterValue (der StringParameterValue erweitert) eingebettet, dessen buildEnvironment()-Methode ihn ohne Bereinigung als Umgebungsvariable im Build-Kontext bereitstellt.
Während des SCM-Checkout-Prozesses lädt Jenkins die Build-Umgebungsvariablen über build.getEnvironment().
Der für den Checkout verwendete Branchname (localBranchName) wird aus diesen Umgebungsvariablen abgerufen.
Der Branchname wird dann direkt an die Methode CheckoutCommand.branch() übergeben.
Schließlich ruft CheckoutCommand.execute() den zugrunde liegenden Git-CLI-Befehl auf, der den Branchnamen ohne Validierung oder Escapezeichen verknüpft.
Dies ermöglicht eine Befehlseinschleusung, sodass ein Angreifer beliebige Shell-Befehle auf dem Jenkins-Build-Host ausführen kann.
Die Methode createValue, die Benutzereingaben verarbeitet (z.B. aus der HTTP-POST-JSON-Nutzlast), Hier akzeptiert Jenkins vom Benutzer bereitgestellte Parameterwerte über die Anfrage (zum Beispiel "selected": "master; rm -rf /").
Die Eingabe wird in einen e (der erweitert) eingebettet, ohne Eingabebereinigung oder -validierung.
Das bedeutet, dass rohe Benutzerdaten als Build-Parameter akzeptiert und als -Instanz gespeichert werden.
GitParameterValuStringParameterValueParameterValue
Die Klasse GitParameterValue, die StringParameterValue erweitert, GitParameterValue erbt von StringParameterValue, fügt aber keine Bereinigung hinzu.
Die Konstruktorkette bedeutet, dass die Benutzereingabe nun in einem Objekt gespeichert wird, das später von Jenkins zum Aufbau von Umgebungsvariablen verwendet wird.
Dadurch werden bösartige Eingaben in die Build-Umgebungsvariablen von Jenkins verbreitet.
"
Die Klasse StringParameterValue und ihre Methode buildEnvironment, Diese Methode ist entscheidend – sie stellt den Parameter als Umgebungsvariable im Build-Kontext bereit, indem sie
"
env.put(name, value);
env.put(name.toUpperCase(Locale.ENGLISH), value);
Da der Wert eine nicht bereinigte Benutzereingabe ist, ermöglicht er, dass bösartige Eingaben in die Umgebungsvariablen von Jenkins gelangen und späteren Prozessen wie Git-Befehlen zugänglich werden.
Die Methode _checkout im GitSCM-Plugin, Diese Methode ruft build.getEnvironment(listener) auf, das Umgebungsvariablen sammelt, einschließlich der zuvor gesetzten bösartigen.
Sie verwendet diese Variablen, um den Branchnamen (über localBranchName) zu erhalten, der dann an den CheckoutCommand übergeben wird.
Die Umgebungsvariable aus dem bösartigen Parameter fließt direkt in den Checkout-Prozess ein.

Die Erstellung des CheckoutCommand und das Setzen des Branch/Ref mit der Benutzereingabe, CheckoutCommand.branch(localBranchName) verwendet die nicht bereinigte Umgebungsvariable.
Da localBranchName von benutzergesteuerten Umgebungsvariablen stammt, injiziert es beliebige Befehle in den Checkout, Dies bereitet den Boden für eine Befehlseinschleusung, wenn execute() aufgerufen wird.

Die CheckoutCommand.execute()-Methode, die den Git-CLI-Befehl ausführt, Dies ist der letzte Schritt, bei dem der injizierte Branchstring direkt ohne Escapezeichen oder Bereinigung an die systemeigene Git-CLI übergeben wird, Infolgedessen wird die schädliche Nutzlast als Shell-Befehle ausgeführt, was eine Remote-Codeausführung auf dem Jenkins-Host ermöglicht.

Diese Analyse zeigt, wie das Jenkins Git Parameter Plugin in Kombination mit dem Git SCM Plugin zu einer kritischen Befehlseinschleusungsschwachstelle führen kann. Durch unsichere Bereitstellung benutzergesteuerter Parameterwerte als Umgebungsvariablen und deren anschließende direkte Übergabe an Git-CLI-Befehle ohne ordnungsgemäße Bereinigung können Angreifer beliebige Befehle auf dem Jenkins-Build-Server ausführen.
Diese Kette des Vertrauensbruchs – von der anfänglichen bösartigen JSON-Nutzlast bis zur endgültigen Shell-Ausführung – unterstreicht die Bedeutung einer strengen Eingabevalidierung und sicheren Handhabung von Build-Parametern in CI/CD-Systemen.
Benutzer und Administratoren sollten sicherstellen, dass sie aktualisierte Versionen von Jenkins und allen Plugins verwenden, und alle Parameter, die Shell-Befehle beeinflussen, sorgfältig prüfen. Maßnahmen wie Eingabebereinigung, Whitelisting erlaubter Branches oder die Isolierung von Build-Umgebungen können das Risiko verringern.
Das Verständnis dieses Ablaufs gibt Sicherheitsexperten und Entwicklern die notwendige Einsicht, um ähnliche Injektionsschwachstellen in Jenkins oder vergleichbaren CI/CD-Plattformen zu erkennen, zu verhindern und zu beheben.