
rvia de Raynet est vulnérable à un problème d'élément de chemin de recherche non contrôlé. Lors du chargement d'objets partagés et de l'appel de binaires système (tels que .so et binaires auxiliaires), ceux-ci sont appelés avec des chemins relatifs, ce qui permet à un utilisateur de modifier le binaire final ou l'objet .so exécuté par la manipulation de la variable d'environnement PATH.

Dans la preuve suivante, un binaire arbitraire nommé curl est créé dans le répertoire /tmp.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}
gcc curl.c -o curl # Compiling the binary
La variable PATH est modifiée afin que le premier répertoire recherché pour la commande curl lors de son appel par rvia soit /tmp.
export PATH=/tmp:$PATH
Ensuite, un appel à /opt/rvia/rvia getconfig utilisera notre binaire curl modifié.

Le même problème s'applique à l'option upload.

Le même problème se retrouve lors de l'utilisation de l'option rvia inventory, qui appelle en interne le binaire ndtrack. Le binaire ndtrack appelle les commandes cat et sh en utilisant un chemin relatif.


Enfin, il a également été détecté que le binaire ndtrack inclut des objets partagés (fichiers .so) en utilisant des chemins relatifs.

Dans la preuve suivante, il est possible de voir les étapes suivies pour remplacer l'appel relatif à libnetselector.so (il est également possible d'effectuer les mêmes actions avec libuploader.so). Dans ce cas, un objet partagé personnalisé est créé ; lorsque cet objet partagé est exécuté, une copie de bash dans le répertoire /tmp nommée bash_so_hijack va être créée.
Voici le code C pour créer l'objet partagé personnalisé nommé 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

Il est important de noter que cela ne fonctionne que lors de l'appel direct de ndtrack, car lorsque l'option inventory est invoquée, un appel à un script bash situé dans /opt/rvia et nommé ndtrack est effectué, ce qui définit la variable d'environnement PATH avant d'appeler le binaire ndtrack.
