
Preuve de concept pour CVE-2026-38945 : le contournement de chemin dans la détection Java de RayVentory Scan Engine permet à des attaquants locaux d'exécuter des binaires arbitraires via des structures de répertoires conçues.
rvia dans Raynet exécute une commande find avec des critères de recherche mal terminés pour localiser les installations Java lorsque l'option oracle est invoquée. Les attaquants pourraient créer des structures de répertoires spécifiques qui satisfont les critères de recherche mal formés, amenant l'agent à exécuter un binaire malveillant lors du processus de détection 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 \)"
Cette commande devrait ignorer les binaires Java dans /tmp (ainsi que dans /dev, /etc, /mnt et /proc, mais nous nous intéressons à l'exemple avec /tmp car il est accessible en écriture à tous).
Notez que l'exclusion d'autres répertoires potentiellement dangereux comme
/homeest absente.
Le problème vient du fait que la première partie de la commande, destinée à ignorer certains répertoires, ne comporte pas le caractère * à la fin de ces répertoires, alors que le caractère * est utilisé au début des autres répertoires à rechercher.
Cela permet à tout utilisateur de modifier le fichier Java exécuté durant le processus de détection Java, car l'option oracle est souvent lancée via une tâche cron.
mkdir -p /tmp/jdk/bin
echo 'echo "rvia oracle was executed!" > /tmp/PoC' > /tmp/jdk/bin/java && chmod +rx /tmp/jdk/bin/java

Cela est dû au fait qu'avec l'option oracle, « si le chemin d'exécution Java n'est pas configuré dans le fichier /opt/rvia/rvia.cfg, RayVentory Scan Engine essaie de le trouver quand même chaque fois qu'il en a besoin ». Et à un moment donné, il tente d'obtenir la version de l'environnement Java installé en exécutant java -version.