
rvia 在 Raynet 中执行一个 find 命令,该命令的搜索条件未正确终止,以定位 Java 安装。攻击者可以构造满足错误搜索条件的特定目录结构,导致代理程序在 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 下的 Java 二进制文件(同时也应忽略 /dev、/etc、/mnt 和 /proc,但我们关注的是 /tmp 的示例,因为它是全局可写的)。
注意,缺少对其他潜在危险目录(如
/home)的排除。
问题在于,命令的第一部分旨在忽略特定目录,但这些目录末尾缺少字符 *,而 * 字符被用于其他要搜索的目录的开头。
这使得任何用户都可以篡改 Java 检测过程中执行的 Java 文件,因为 oracle 选项通常作为 cron 任务运行。
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 环境的版本。