漏洞描述
未经认证的攻击者可访问Confluence的WEB-INF和META-INF目录下的任意文件(包括可能的凭据信息)。这个漏洞我理解是CVE-2020-29448补丁的绕过;跟CVE-2019-3394的危害程度一样,最大可能的危害是读取可能存在的atlassian-user.xml文件(泄露LDAP凭据但这种配置方式已被弃用),但是不需要认证。
漏洞详情
/s/路径是Atlassian产品通用的访问静态资源的方法。
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)
漏洞演示
参考
相似的Jira的信息泄露参考 陈师傅的知识星球:
https://t.zsxq.com/bAaiUfa
文由shadowsock7