CVE-2022-26134: Confluence OGNL 注入远程代码执行漏洞分析

CVE-2022-26134: Confluence OGNL 注入远程代码执行漏洞深度分析

0x01 漏洞背景与详情

CVE-2022-26134 是存在于 Atlassian Confluence Server 和 Data Center 中的一个未授权远程代码执行(RCE)漏洞。该漏洞允许未经身份验证的远程攻击者在受影响的实例上执行任意代码,是近年来针对 Confluence 影响最恶劣的漏洞之一。

  • CVE ID: CVE-2022-26134
  • 危险等级: 极危 (Critical, CVSS 9.8)
  • 受影响版本: Confluence Server & Data Center 7.4.0 及以上所有版本(至修复版本前)。
  • 漏洞类型: OGNL 注入 (OGNL Injection)
  • 核心风险: 未授权的远程代码执行、服务器接管。

0x02 漏洞原理分析

该漏洞的本质是 OGNL 表达式注入

  1. 解析机制缺陷:Confluence 使用了 WebWork 框架(Struts 的前身)。在处理请求时,WebWork 会将请求的命名空间(Namespace)或 Action 名称解析为 OGNL 表达式。
  2. 触发逻辑:当用户请求一个不存在的页面或特定的 Action 时,Confluence 的底层配置类 ConfluenceOgnlActionConfig 会尝试解析请求路径中的部分内容。如果路径中包含 ${...} 格式的字符串,底层的 OGNL 引擎会将其作为代码表达式直接执行。
  3. 沙箱绕过:尽管 Atlassian 实施了一些 OGNL 安全限制(如黑名单类和方法),但攻击者利用反射机制、特定的静态方法调用(如 @java.lang.Runtime@getRuntime().exec()),或利用 ServletActionContext 获取上下文对象,成功绕过了沙箱限制,实现任意 Java 代码执行。

0x03 漏洞 POC (Proof of Concept)

攻击者通常通过在 GET 请求的 URL 路径中嵌入编码后的 OGNL Payload 来触发漏洞。以下是一个将命令执行结果回显在 HTTP Response Header 中的典型 POC:

GET /%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22id%22%29.getInputStream%28%29%2C%22utf-8%22%29%29.%28%40com.opensymphony.webwork.ServletActionContext%40getResponse%28%29.setHeader%28%22X-Cmd-Response%22%2C%23a%29%29%7D/ HTTP/1.1
Host: target-confluence.com

Payload 解码分析:

${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec("id").getInputStream(),"utf-8")).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader("X-Cmd-Response",#a))}

该请求会执行 id 命令,获取输入流并转换为字符串,最后通过 ServletActionContext 获取 Response 对象,将结果设置到自定义的 X-Cmd-Response 响应头中。

0x04 高级实战利用姿势 (Weaponization)

  1. 无文件内存马注入 (Memory WebShell): 攻击者利用 OGNL 强大的执行能力,获取当前应用的 ServletContext,通过反射和动态代理等机制,直接在内存中动态注册恶意的 Filter 或 Servlet(如 Godzilla、Behinder 内存马)。这种方式不落盘,难以被常规杀毒软件和文件监控系统(EDR)发现。

  2. WAF 与流量检测绕过

    • 编码混淆:利用 Unicode 编码(如 \u0024\u007B 代替 ${)、多重 URL 编码绕过 WAF。
    • 字符串拼接:利用 OGNL 语法特性将关键字拆分(如 "java.la" + "ng.Runtime")。
    • 请求头/体注入:不仅可以通过 URI 路径,在某些变种中也可将恶意 Payload 隐藏在特定的 Header 或 POST Body 中以规避针对 URI 的严格正则过滤。
  3. 内网刺探与敏感信息窃取: 直接调用 Confluence 的内部 API 或反射读取 Spring 上下文中的 DataSource 配置,快速获取数据库账密。由于 Confluence 通常部署在核心办公网,攻击者常利用该机器作为跳板建立内网代理。

0x05 应急排查与日志痕迹分析

  1. Web 访问日志排查 (atlassian-confluence-access.log / Nginx Access Log):

    • 重点搜索 URI 中包含 ${%24%7B,以及 %40java.lang.Runtime 等 OGNL 反射关键字的请求。
    • 注意 HTTP 状态码为 302、200 甚至 404 的异常 URI 请求,即使是 404,底层可能已经执行了代码。
  2. 应用日志分析 (atlassian-confluence.log):

    • 检查是否有大量的 OgnlException 或类加载异常(如 ClassNotFoundException)。这是攻击者尝试各种沙箱绕过 Payload 时常见的副产物报错。
  3. 异常进程监控:

    • 监控 Confluence 运行用户(通常为 confluencetomcat)是否产生了非预期的系统子进程(如 sh, bash, cmd.exe, curl, wget)。

0x06 修复与加固建议

  1. 官方补丁升级:升级至 7.4.17、7.13.7、7.14.3、7.15.2、7.16.4、7.17.4、7.18.1 或更高安全版本。
  2. 临时缓解措施
    • 替换特定的 xwork-1.0.3-atlassian-*.jar 文件以修补 OGNL 解析缺陷。
    • 在 WAF/NGFW 层添加规则,拦截 URI 或参数中包含 ${%24%7B 特征的外部请求。

0x07 参考资料