
Prueba de concepto para CVE-2026-38945: path traversal en la detección de Java de RayVentory Scan Engine permite a atacantes locales ejecutar binarios arbitrarios mediante estructuras de directorio manipuladas.
rvia en Raynet ejecuta un comando find con criterios de búsqueda terminados incorrectamente para localizar instalaciones de Java cuando se invoca la opción oracle. Los atacantes podrían crear estructuras de directorio específicas que cumplieran con los criterios de búsqueda mal formados, haciendo que el agente ejecute un binario malicioso durante el proceso de detección 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 debería ignorar los binarios de Java en /tmp (también en /dev, /etc, /mnt y /proc, pero nos interesa el ejemplo con /tmp ya que es escribible por cualquier usuario).
Nótese que falta la exclusión de otros directorios potencialmente peligrosos como
/home.
El problema surge en que la primera parte del comando, destinada a ignorar directorios específicos, carece del carácter * al final de estos directorios, mientras que el carácter * se está usando al inicio de los otros directorios que se pretenden buscar.
Esto permite que cualquier usuario manipule el archivo Java ejecutado durante el proceso de detección de Java, ya que la opción oracle se ejecuta comúnmente como una tarea cron.
mkdir -p /tmp/jdk/bin
echo 'echo "rvia oracle was executed!" > /tmp/PoC' > /tmp/jdk/bin/java && chmod +rx /tmp/jdk/bin/java

Esto se debe a que, al usar la opción oracle, "si la ruta del runtime de Java no está configurada en el archivo /opt/rvia/rvia.cfg, RayVentory Scan Engine intenta buscarla de todas formas cada vez que la necesita". Y en algún punto intenta obtener la versión del entorno Java instalado ejecutando java -version.