
rvia в Raynet выполняет команду find с некорректно завершёнными критериями поиска для обнаружения установок Java, когда вызывается опция oracle. Атакующие могли создавать определённые структуры каталогов, которые удовлетворяли искажённым критериям поиска, заставляя агента выполнить вредоносный бинарный файл во время процесса обнаружения 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 \)"
Эта команда должна игнорировать Java-бинарные файлы в /tmp (а также в /dev, /etc, /mnt и /proc, но нас интересует пример с /tmp, поскольку он доступен для записи всем).
Обратите внимание, что исключение других потенциально опасных каталогов, таких как
/home, отсутствует.
Проблема заключается в том, что в первой части команды, предназначенной для игнорирования определённых каталогов, отсутствует символ * в конце этих каталогов, а символ * используется в начале других каталогов, которые должны быть найдены.
Это позволяет любому пользователю подменять Java-файл, выполняемый в процессе обнаружения Java, поскольку опция oracle обычно запускается как задание cron.
mkdir -p /tmp/jdk/bin
echo 'echo "rvia oracle was executed!" > /tmp/PoC' > /tmp/jdk/bin/java && chmod +rx /tmp/jdk/bin/java

Это происходит потому, что при использовании опции oracle «если путь к среде выполнения Java не настроен в файле /opt/rvia/rvia.cfg, RayVentory Scan Engine всё равно пытается найти его каждый раз, когда он ему нужен». И в какой-то момент он пытается получить версию установленной среды Java, выполняя java -version.