漏洞描述
漏洞详情
Confluence有一个正则
private static final Pattern CACHE_PATTERN = Pattern.compile("^/s/(.*)/_/((?i)(?!WEB-INF)(?!META-INF).*)");
用于避免WEB-INF和META-INF目录下文件被读取。
CVE-2020-29448的作者发现可以通过url编码绕过这个正则,实现WEB-INF和META-INF目录下的文件读取。
Atlassian修复它的方式是在进行正则判断前,对payload先url解码。
但是我发现可以通过两次url编码来绕过,于是提交给了Atlassian官方,不过看这个CVE-2021-26085的官方页面,好像CVE-2020-29448的作者也发现了?
这次Atlassian的修复方式是用一个for循环判断只要uri还可以被解码就继续解码。
private String decodeURL(String url) {
String decodedUri;
for(decodedUri = HtmlUtil.urlDecode(url); HtmlUtil.shouldUrlDecode(decodedUri); decodedUri = HtmlUtil.urlDecode(decodedUri)) {
}
return decodedUri;
}
影响版本
[ ,7.4.10)
[7.5.0, 7.12.3)
漏洞演示
参考
https://jira.atlassian.com/browse/CONFSERVER-67893
https://nvd.nist.gov/vuln/detail/CVE-2021-26085
https://nvd.nist.gov/vuln/detail/CVE-2020-29448
https://nvd.nist.gov/vuln/detail/CVE-2019-3394
相似的Jira的信息泄露参考 陈师傅的知识星球:
https://t.zsxq.com/bAaiUfa