CVE-2023-22518 在 Confluence 中
CVE-2023-22518:该漏洞被描述为“Confluence 数据库和服务器中授权不当的漏洞”。该错误影响 Atlassian 产品的本地部署(On-premises)版本。
设置环境 使用受影响版本 8.0.4 下载 URL: https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

选择 Trial Installation,然后点击链接获取免费试用密钥。然后设置集群:选择 non-cluster

然后进入数据库设置 -> 选择 MySQL

按照说明操作:
配置数据库,创建用户和密码表
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
然后编辑 /etc/mysql/my.cnf。添加以下行:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

然后重启 MySQL 和 Confluence。然后访问 localhost:8090 的设置页面,并使用已创建的数据库填写。

检查连接是否成功,点击 Next。然后注册。

调试
*Diff 在 IntelliJ 中对比两个版本的 jar 文件。具体来说,我对比了 8.0.4 和 7.19.16 两个版本。根据描述,对比两个版本的 confluence.jar 文件。

已修补版本和未修补版本之间的区别在于 @WebSudoRequired 和 @SystemAdminOnly。 websudorequired 是一项用于增强管理员会话安全性的功能。当尝试访问 admin 时,即使你已经登录系统,系统也会要求重新输入密码。增加一个额外的身份验证步骤,以确保管理访问权限。
SystemAdminOnly:该功能将管理功能限制为仅限管理员账户。这有助于确保只有经过授权的账户才能执行重要且影响系统的操作。
在 RestoreAction.class 的 validate() 处设置断点

通过 getRestoreFileFromUpload 保存上传的文件

getExportDescriptor 用于解压并读取 zip 文件的内容


然而,在调试之后,仍然没有找到该漏洞的根本原因。
CVE 中描述的原因是授权漏洞。这导致我们将注意力转向开发人员在权限分配过程中关于 Java 语言漏洞的研究。
将注意力转向 struts.xml 文件,该文件包含基于命名空间的操作和路由信息,以及拦截器(interceptors)。




我们可以看到 /json 命名空间增强了 /admin 命名空间的功能。因此,为 /admin 命名空间创建的路由也可以通过 /json 命名空间访问。
在 /json 命名空间的上下文中,请求路由过程需要经过一系列拦截器(interceptors)。其中一个拦截器名为 WebSudoInterceptor,它根据请求 URI 执行检查。
具体来说,WebSudoInterceptor 执行以下检查步骤:
如果请求发送到 '/json',那么对 '/json/action' 的请求将被转发到 '/setup/action' 和 'admin/action'。在此 CVE 中,易受攻击的路径是 '/json/setup-restore.action?synchronous=true'。
用 Burp Suite 抓取请求,GET /json/setup-restore.action。然而收到了“Method Not Allowed”响应。 尝试使用 POST /json/setup-restore.action?synchronous=true,并收到 200 响应。


上传文件 xmlexport-200123123001.zip

并收到响应

现在我们可以使用 admin:admin 账户登录

并得到如下结果
