Jira 文件读取分析(CVE-2021-26086)
字数 958 2025-08-05 00:15:37

Jira 文件读取漏洞分析(CVE-2021-26086)技术文档

1. 漏洞概述

CVE-2021-26086是Atlassian Jira软件中的一个文件读取漏洞,允许攻击者通过精心构造的URL读取服务器上的敏感文件,特别是WEB-INF和META-INF目录下的内容。

2. 环境准备

2.1 软件下载

  • 下载有漏洞版本和无漏洞版本进行对比分析:
    • 下载地址:https://www.atlassian.com/software/jira/update

2.2 远程调试设置

在Jira使用的Tomcat的catalina.bat启动文件中添加调试参数:

set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:9999

3. 漏洞定位方法

3.1 文件差异对比

使用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")

3.2 关键类定位

通过对比分析,定位到关键类:
CachingResourceDownloadRewriteRule

4. 漏洞分析

4.1 漏洞版本正则表达式(8.5.13)

Pattern PATHS_ALLOWED = Pattern.compile("^/s/(.*)/_/((?i)(?!WEB-INF)(?!META-INF).*)");
  • 仅检查路径是否以WEB-INF或META-INF开头
  • 允许路径中包含这些关键字,只要不是开头即可

4.2 修复版本正则表达式(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,阻止访问

4.3 防御机制

  1. 路径遍历防御:过滤/xxx/../等路径遍历尝试
  2. 多重URL编码防御:防止通过编码绕过

5. 漏洞利用

5.1 利用方法

使用分号(;)绕过路径检查:

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

5.2 限制

  • 主要能读取WEB-INF/web.xml等配置文件
  • 无法直接读取系统任意文件

6. 修复建议

  1. 升级到最新版本Jira软件
  2. 如果无法立即升级,可考虑以下临时措施:
    • 在反向代理层添加规则,拦截包含;WEB-INF;META-INF的请求
    • 限制对/s/路径的访问权限

7. 相关资源

  1. Atlassian官方安全公告
  2. CVE-2019-11581(同类历史漏洞)分析资料
  3. Jira官方下载和更新页面

8. 总结

CVE-2021-26086是一个典型的路径检查不严导致的文件读取漏洞,攻击者可以通过特殊字符绕过路径限制,读取WEB-INF等受保护目录下的文件。开发人员在设计路径检查逻辑时,应充分考虑各种边界情况和特殊字符的绕过可能性。

Jira 文件读取漏洞分析(CVE-2021-26086)技术文档 1. 漏洞概述 CVE-2021-26086是Atlassian Jira软件中的一个文件读取漏洞,允许攻击者通过精心构造的URL读取服务器上的敏感文件,特别是WEB-INF和META-INF目录下的内容。 2. 环境准备 2.1 软件下载 下载有漏洞版本和无漏洞版本进行对比分析: 下载地址:https://www.atlassian.com/software/jira/update 2.2 远程调试设置 在Jira使用的Tomcat的 catalina.bat 启动文件中添加调试参数: 3. 漏洞定位方法 3.1 文件差异对比 使用Python脚本比较有漏洞版本和修复版本的文件差异: 3.2 关键类定位 通过对比分析,定位到关键类: CachingResourceDownloadRewriteRule 4. 漏洞分析 4.1 漏洞版本正则表达式(8.5.13) 仅检查路径是否以WEB-INF或META-INF开头 允许路径中包含这些关键字,只要不是开头即可 4.2 修复版本正则表达式(8.5.14) 检查WEB-INF或META-INF前后是否有非字母数字字符 如果匹配则返回null,阻止访问 4.3 防御机制 路径遍历防御:过滤 /xxx/../ 等路径遍历尝试 多重URL编码防御:防止通过编码绕过 5. 漏洞利用 5.1 利用方法 使用分号( ; )绕过路径检查: 5.2 限制 主要能读取WEB-INF/web.xml等配置文件 无法直接读取系统任意文件 6. 修复建议 升级到最新版本Jira软件 如果无法立即升级,可考虑以下临时措施: 在反向代理层添加规则,拦截包含 ;WEB-INF 或 ;META-INF 的请求 限制对 /s/ 路径的访问权限 7. 相关资源 Atlassian官方安全公告 CVE-2019-11581(同类历史漏洞)分析资料 Jira官方下载和更新页面 8. 总结 CVE-2021-26086是一个典型的路径检查不严导致的文件读取漏洞,攻击者可以通过特殊字符绕过路径限制,读取WEB-INF等受保护目录下的文件。开发人员在设计路径检查逻辑时,应充分考虑各种边界情况和特殊字符的绕过可能性。