[Security]RCE in NodeAgent due to a fixed-prefix weak authentication mechanism(o2oa <=v10.0) #194 漏洞概述 O2OA 暴露了一个未认证的 HTTP 端点,该端点返回 NodeAgent 控制通道使用的 RSA 公钥。NodeAgent 随后将任何能解密为以固定前缀 开头的字符串的凭据视为已认证,而无需验证签名、非ce、时间戳或任何服务器端秘密。 当 NodeAgent 在默认 TCP 端口 20019 上可达时,未认证的攻击者可以使用公钥伪造有效的凭据,调用 命令覆盖 或 等启动脚本,然后调用 。在重启期间,执行被篡改的启动脚本,导致未认证的远程代码执行。 根本原因: 认证和控制组件之间的信任边界失效。 1. 认证模块向未认证调用者返回当前 RSA 公钥。 2. NodeAgent 接受任何能解密为以 开头的字符串的凭据。 3. 操作将攻击者控制的字节直接写入服务器基础目录下的路径。 4. NodeAgent 接受 请求并排队执行。 5. 命令调度器包括 作为接受的命令,重启从磁盘执行启动脚本。 影响范围 未认证的攻击者如果可达 HTTP 服务和 NodeAgent 端口,可以以 O2OA 服务账户的权限执行任意操作系统命令。这可能导致应用程序服务器的完全妥协。实际后果包括持久后门安装、配置秘密和数据库凭据的窃取、应用程序二进制文件和启动脚本的篡改、数据破坏以及向可到达主机的相邻系统的横向移动。 修复方案 1. 用真实的请求认证替换当前的 NodeAgent 信任模型。有效的设计应将每个请求绑定到服务器端秘密或密码学签名(包括非ce和时间戳),而不是接受固定前缀的加密。 2. 限制 NodeAgent 的暴露,使其不可达于不受信任的网络。如果确实需要该功能,则将其绑定到 localhost 或受控的管理网络,并在 20019 端口周围放置额外的网络控制。 3. 将 限制为严格的安全路径白名单,并在路径规范化后明确防止写入启动脚本、配置文件、程序二进制文件和其他执行敏感位置。 4. 移除或严格限制远程执行操作命令(如 ),特别是当这些命令可能导致执行由同一远程通道先前写入的文件时。 POC 代码