
rvia in Raynet ist anfällig für ein Problem mit einem unkontrollierten Suchpfadelement. Beim Laden von Shared Objects und beim Aufruf von Systembinaries (z. B. .so-Dateien und Hilfsbinaries) werden diese über relative Pfade aufgerufen, was es einem Benutzer ermöglicht, das letztendlich ausgeführte Binary oder .so-Objekt durch Manipulation der PATH-Umgebungsvariable zu beeinflussen.

Im folgenden Nachweis wird eine beliebige Binärdatei namens curl im Verzeichnis /tmp erstellt.
#include <stdio.h>
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}
gcc curl.c -o curl # Compiling the binary
Die PATH-Variable wird so geändert, dass das erste Verzeichnis, in dem nach dem Befehl curl gesucht wird, wenn er von rvia aufgerufen wird, /tmp ist.
export PATH=/tmp:$PATH
Danach verwendet ein Aufruf von /opt/rvia/rvia getconfig unser manipuliertes curl-Binary.

Gleiches gilt für die Option upload.

Das gleiche Problem tritt bei Verwendung der Option rvia inventory auf, die im Hintergrund das Binary ndtrack aufruft. Das Binary ndtrack ruft die Befehle cat und sh über einen relativen Pfad auf.


Schließlich wurde außerdem festgestellt, dass das Binary ndtrack Shared Objects (.so files) unter Verwendung relativer Pfade einbindet.

Im folgenden Nachweis sind die Schritte zu sehen, die unternommen wurden, um den relativen Aufruf von libnetselector.so zu ersetzen (dieselben Aktionen können auch mit libuploader.so durchgeführt werden). In diesem Fall wird ein benutzerdefiniertes Shared Object erstellt. Wenn dieses Shared Object ausgeführt wird, wird eine Kopie der bash im Verzeichnis /tmp als bash_so_hijack erstellt.
Im Folgenden ist der C-Code zum Erstellen des benutzerdefinierten Shared Objects namens libnetselector.so aufgeführt.
#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

Es ist wichtig zu beachten, dass dies nur funktioniert, wenn ndtrack direkt aufgerufen wird, da bei Verwendung der Option inventory ein Bash-Skript unter /opt/rvia namens ndtrack aufgerufen wird, das die PATH-Umgebungsvariable setzt, bevor das Binary ndtrack aufgerufen wird.
