Jira 文件读取分析(CVE-2021-26086)
字数 832 2025-08-05 00:15:37
Jira 文件读取漏洞分析(CVE-2021-26086)技术文档
漏洞概述
CVE-2021-26086是Atlassian Jira软件中的一个文件读取漏洞,允许攻击者通过精心构造的URL读取服务器上的敏感文件,包括WEB-INF/web.xml等配置文件。
环境准备
安装Jira
- 下载有漏洞版本和修复版本:
- 官方更新地址:https://www.atlassian.com/software/jira/update
- 漏洞存在于8.5.13及以下版本
- 修复版本为8.5.14及以上
远程调试配置
在catalina.bat启动脚本中添加调试参数:
set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9999
漏洞定位方法
文件差异分析
使用Python脚本比较有漏洞版本和修复版本的文件差异:
import os
import sys
import hashlib
files_md5 = {}
new_files_md5 = {}
def md5sum(path, files_md5_set):
for i in os.listdir(path):
md5 = hashlib.md5()
file = os.path.join(path, i)
if os.path.isfile(file):
with open(file, mode='rb') as fd:
while True:
data = fd.read(4096)
if data:
md5.update(data)
else:
file_modify = file[file.find("/"):]
files_md5_set[file_modify] = md5.hexdigest()
break
else:
md5sum(file, files_md5_set)
if __name__ == '__main__':
md5sum(sys.argv[1], files_md5)
md5sum(sys.argv[2], new_files_md5)
set1 = set(files_md5.items())
set2 = set(new_files_md5.items())
for item in (set1 ^ set2):
print(item, end='')
print("\n")
关键类分析
通过差异分析定位到关键类:CachingResourceDownloadRewriteRule
漏洞原理
正则表达式对比
-
有漏洞版本(8.5.13):
Pattern PATHS_ALLOWED = Pattern.compile("^/s/(.*)/_/((?i)(?!WEB-INF)(?!META-INF).*)");仅检查路径是否以WEB-INF或META-INF开头
-
修复版本(8.5.14):
Pattern PATHS_DENIED = Pattern.compile("[^a-zA-Z0-9]((?i)(WEB-INF)|(META-INF))[^a-zA-Z0-9]")检查路径中任何位置出现的WEB-INF或META-INF,且前后有特殊字符时返回null
安全限制
- 路径遍历防护:代码中已过滤
/xxx/../形式的路径 - 多重URL编码防护:防止通过多重编码绕过
漏洞利用
绕过方法
使用分号(;)可以绕过原始正则检查:
示例攻击URL:
/s/xxx/_/;WEB-INF/web.xml
影响范围
- 可读取WEB-INF/web.xml等配置文件
- 但实际利用有限,主要能读取web.xml文件
修复建议
- 立即升级到Jira 8.5.14或更高版本
- 如果不能立即升级,可考虑以下缓解措施:
- 在反向代理层添加规则,拦截包含
;WEB-INF或;META-INF的请求 - 限制对
/s/路径的访问权限
- 在反向代理层添加规则,拦截包含
总结
CVE-2021-26086是一个Jira中的路径校验不严导致的文件读取漏洞,通过分析文件差异可以快速定位漏洞点。虽然利用有限,但仍可能泄露敏感配置信息,建议及时修复。