Confluence任意文件读取漏洞(受限)(CVE-2021-26085)分析
字数 1417 2025-08-09 15:23:08
Confluence任意文件读取漏洞(CVE-2021-26085)深度分析与教学文档
1. 漏洞概述
CVE-2021-26085是Atlassian Confluence Server中的一个无需授权的任意文件读取漏洞,影响版本范围:
- version < 7.4.10
- 7.5.0 ≤ version < 7.12.3
漏洞位于/s/端点,攻击者可以利用该漏洞读取服务器上的敏感文件,包括但不限于WEB-INF和META-INF目录下的配置文件。
2. 环境搭建
2.1 下载受影响版本
从Atlassian官方下载受影响版本:
https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-X.X.X-x64.bin
将X.X.X替换为需要分析的版本号(如7.12.2)
2.2 安装与配置
-
赋予执行权限:
chmod +x atlassian-confluence-X.X.X-x64.bin -
运行安装程序:
./atlassian-confluence-X.X.X-x64.bin -
默认安装路径:
/opt/atlassian/confluence/
2.3 代码定位
主要代码位于:
/confluence/confluence/WEB-INF/lib/
3. 漏洞分析
3.1 漏洞核心点
漏洞位于com.atlassian.confluence.servlet.rewrite.ConfluenceResourceDownloadRewriteRule类中,涉及URL解码逻辑。
3.2 关键代码对比
修复前:
public static boolean shouldUrlDecode(String text) {
return text != null && (URL_ENCODED_STRING_PATTERN.matcher(text).find() || text.contains("+"));
}
修复后:
从单次URL解码改为多次解码(直到无法继续解码)
3.3 正则匹配规则
private static final Pattern NO_CACHE_PATTERN = Pattern.compile("^/s/(.*)/NOCACHE(i)(?!WEB-INF)(?!META-INF).*)");
private static final Pattern CACHE_PATTERN = Pattern.compile("^/s/i)(?!WEB-INF)(?!META-INF).*)");
3.4 重写逻辑
在matches方法中:
public RewriteMatch matches(HttpServletRequest request, HttpServletResponse response) {
String url = this.getNormalisedPathFrom(request);
// 匹配处理逻辑
// ...
}
4. 动态调试
4.1 配置调试环境
修改/opt/atlassian/confluence/bin/setenv.sh:
CATALINA_OPTS="${CATALINA_OPTS} -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
4.2 调试关键点
- 在
getNormalisedPathFrom方法设置断点 - 观察URL处理流程
- 验证URL解码次数
5. 漏洞利用
5.1 利用原理
通过双重URL编码绕过安全检查:
- 第一次解码:将双重编码的URL解码为单重编码
- 正则匹配:通过/s/端点的检查
- 第二次解码:将单重编码解码为原始路径
5.2 POC构造示例
/s/..%252fWEB-INF/web.xml
解码过程:
- 第一次解码:
..%2fWEB-INF/web.xml - 第二次解码:
../WEB-INF/web.xml
6. 修复方案
6.1 官方修复
升级到安全版本:
- 7.4.10
- 7.12.3或更高
6.2 修复原理
将单次URL解码改为多次循环解码,直到无法继续解码为止,确保所有编码字符都被正确处理。
7. 漏洞验证
7.1 验证步骤
- 构造双重编码的URL请求
- 尝试访问WEB-INF或META-INF目录下的文件
- 检查返回内容是否包含敏感信息
7.2 验证示例
curl "http://target/s/..%252fWEB-INF/web.xml"
8. 防御措施
- 及时升级到安全版本
- 限制对/s/端点的访问
- 实施严格的输入验证
- 使用WAF防护此类攻击
9. 参考链接
- Atlassian官方公告:https://confluence.atlassian.com/doc/confluence-security-advisory-2021-08-25-1077906215.html
- CVE详情:https://nvd.nist.gov/vuln/detail/CVE-2021-26085
- 技术分析参考:https://mp.weixin.qq.com/s/uZ6JIAMXFOV9Pr6l-M1iMg
10. 总结
CVE-2021-26085漏洞展示了URL处理不一致性可能导致的安全问题。通过分析补丁差异、理解URL处理流程、构造双重编码的POC,我们可以深入理解这类漏洞的成因和利用方式。对于企业用户,及时更新补丁是防范此类漏洞的最有效方法。