
Prova de conceito para CVE-2026-38945: path traversal na detecção Java do RayVentory Scan Engine permite que atacantes locais executem binários arbitrários por meio de estruturas de diretórios elaboradas.
O rvia na Raynet executa um comando find com critérios de pesquisa mal terminados para localizar instalações Java quando a opção oracle é invocada. Atacantes poderiam criar estruturas de diretório específicas que satisfizessem os critérios de pesquisa malformados, fazendo com que o agente execute um binário malicioso durante o processo de deteção de Java.

/bin/sh -c "find / -not \( -path '/dev' -o -path '/etc' -o -path '/mnt' -o -path '/tmp' -o -path '/proc' \) \( -path '*/jdk/bin/java' -o -path '*/jdk/jre/bin/java' -o -path '*/jdk-*/bin/java' -o -path '*/jdk*/bin/java' -o -path '*/jdk*/jre/bin/java' \) \( -type f -o -type l \)"
Este comando deveria ignorar binários Java em /tmp (também em /dev, /etc, /mnt e /proc, mas estamos interessados no exemplo com /tmp por ser gravável por qualquer utilizador).
Note que está em falta a exclusão de outros diretórios potencialmente perigosos como
/home.
O problema reside no facto de a primeira parte do comando, que deveria ignorar diretórios específicos, não ter o caráter * no final destes diretórios e o caráter * estar a ser usado no início dos outros diretórios que se pretendem pesquisar.
Isto permite que qualquer utilizador adultere o ficheiro Java executado durante o processo de deteção de Java, já que a opção oracle é normalmente executada como uma tarefa cron.
mkdir -p /tmp/jdk/bin
echo 'echo "rvia oracle was executed!" > /tmp/PoC' > /tmp/jdk/bin/java && chmod +rx /tmp/jdk/bin/java

Isto acontece porque ao usar a opção oracle, "se o caminho do runtime Java não estiver configurado no ficheiro /opt/rvia/rvia.cfg, o RayVentory Scan Engine tenta encontrá-lo sempre que precisa." E num determinado ponto tenta obter a versão do ambiente Java instalado executando java -version.