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

  1. 下载有漏洞版本和修复版本:
    • 官方更新地址: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

安全限制

  1. 路径遍历防护:代码中已过滤/xxx/../形式的路径
  2. 多重URL编码防护:防止通过多重编码绕过

漏洞利用

绕过方法

使用分号(;)可以绕过原始正则检查:

示例攻击URL:

/s/xxx/_/;WEB-INF/web.xml

影响范围

  • 可读取WEB-INF/web.xml等配置文件
  • 但实际利用有限,主要能读取web.xml文件

修复建议

  1. 立即升级到Jira 8.5.14或更高版本
  2. 如果不能立即升级,可考虑以下缓解措施:
    • 在反向代理层添加规则,拦截包含;WEB-INF;META-INF的请求
    • 限制对/s/路径的访问权限

总结

CVE-2021-26086是一个Jira中的路径校验不严导致的文件读取漏洞,通过分析文件差异可以快速定位漏洞点。虽然利用有限,但仍可能泄露敏感配置信息,建议及时修复。

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 启动脚本中添加调试参数: 漏洞定位方法 文件差异分析 使用Python脚本比较有漏洞版本和修复版本的文件差异: 关键类分析 通过差异分析定位到关键类: CachingResourceDownloadRewriteRule 漏洞原理 正则表达式对比 有漏洞版本(8.5.13) : 仅检查路径是否以WEB-INF或META-INF开头 修复版本(8.5.14) : 检查路径中任何位置出现的WEB-INF或META-INF,且前后有特殊字符时返回null 安全限制 路径遍历防护:代码中已过滤 /xxx/../ 形式的路径 多重URL编码防护:防止通过多重编码绕过 漏洞利用 绕过方法 使用分号( ; )可以绕过原始正则检查: 示例攻击URL: 影响范围 可读取WEB-INF/web.xml等配置文件 但实际利用有限,主要能读取web.xml文件 修复建议 立即升级到Jira 8.5.14或更高版本 如果不能立即升级,可考虑以下缓解措施: 在反向代理层添加规则,拦截包含 ;WEB-INF 或 ;META-INF 的请求 限制对 /s/ 路径的访问权限 总结 CVE-2021-26086是一个Jira中的路径校验不严导致的文件读取漏洞,通过分析文件差异可以快速定位漏洞点。虽然利用有限,但仍可能泄露敏感配置信息,建议及时修复。