【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

admin 2023年3月8日22:13:13评论51 views字数 3911阅读13分2秒阅读模式

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析


【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
xxhzz
@PortalLab实验室

前言

在上篇分析CVE-2022-26135Atlassian Jira Mobile Plugin SSRF漏洞之后,发现在此之前,jira也曾爆出过身份验证绕过漏洞,CVE编号为cve-2022-0540。趁着环境还热乎,对其产生的原理和代码进行一波分析和学习。

漏洞描述

Atlassian Jira是澳大利亚Atlassian公司的一套缺陷跟踪管理系统。该系统主要用于对工作中各类问题、缺陷进行跟踪管理。攻击者可利用此漏洞向目标系统发送特制的HTTP请求,以使用受影响的配置绕过 WebWork 操作中的身份验证和授权要求。

利用范围

Jira

  • Jira 所有版本 < 8.13.18

  • Jira 8.14.x、8.15.x、8.16.x、8.17.x、8.18.x、8.19.x

  • Jira 8.20.x < 8.20.6

  • Jira 8.21.x

Jira Service Management
  • Jira Service Management 所有版本 < 4.13.18

  • Jira Service Management 4.14.x、4.15.x、4.16.x、4.17.x、4.18.x、4.19.x

  • Jira Service Management 4.20.x < 4.20.6

  • Jira Service Management 4.21.x

漏洞分析

环境搭建

本次环境使用docker搭建

Dockerfile

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

5005为idea debug端口;atlassian-agent.jar项目地址:https://github.com/hgqapp/atlassian-agent,使用maven编译为jar文件即可。

后续创建容器根据提示配置。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
调试源码:将以下三个文件夹设置为Libraries。
atlassian-jira-software-8.13.17-standalonelibatlassian-jira-software-8.13.17-standaloneatlassian-jiraWEB-INFclassesatlassian-jira-software-8.13.17-standaloneatlassian-jiraWEB-INFlib

前置知识

在漏洞分析之前,先简单了解一下Jira相关的背景知识。

WebWork

Jira使用MVC框架WebWork来处理用户发起的WEB请求。每个请求都是使用WebWork action来处理,在其中又使用了其他的utility and Manager classes来完成一个任务。作为响应返回给客户端的HTML大部分都是View层的JSP生成的。URL中的”.jspa”后缀标识其后端对应的是一个JSP文件。

Seraph

Seraph是一个开源认证框架,主要由Atlassian开发和维护。Jira、Confluence的登录认证是都由Seraph来负责的。Seraph是通过Servlet的Filter实现的。Seraph的功能只是用来在给定一个Web请求的情况下,将该请求与特定用户相关联。

动态分析

通过前置知识可以了解到Seraph是一个开源认证框架,也是jira核心身份验证机制。Seraph是通过Servlet和Filter实现的。
查看Filter,发现com.atlassian.jira.security.JiraSecurityFilter.class

在doFilter中调用父方法super.doFilter

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
com.atlassian.seaph.filter.SecurityFilter#doFilter
这里处于atlassian-seaph-4.0.4.jar中filter也就是seraph过滤器,它会根据请求用户权限进行判断,进一步确定所需要的角色,确定是否需要认证。
【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

持续跟进,发现会通过循环会出现三种Service

JiraPathService

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
JiraPathService是处理:如果请求的 servlet 路径以 /secure/admin/ 开头,那其角色权限必须是admin(管理员权限)。
【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

WebworkService

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

WebworkService则是在actions.xml文件中获取角色所需要的webwork配置。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

经过调试,会多次进入getRequiredRoles函数,其中获取URl的方式为getRequestURL。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

继续跟进发现在通过getRequestURL方式提取请求URL后,会通过提取最后一个/后面的接口产生一个targetURL,这里传入的是/secure/InsightPluginShowGeneralConfiguration.jspa,而targetURL为/InsightPluginShowGeneralConfiguration.jspa

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

JiraSeraphSecurityService

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

继续往下就是第三个服务JiraSeraphSecurityService,作用是在所有插件的 atlassian-plugin.xml 文件中获取角色所需的 webwork 操作配置。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

在跟进JiraSeraphSecurityService时,发现会调用WebworkPluginSecurityServiceHelper.getRequiredRoles,和WebworkService.getRequiredRoles代码是相同的。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

接口权限必须是admin。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
在com.atlassian.jira.web.dispatcher.JiraWebworkActionDispatche中会对jspa进行处理。
service函数会从请求中获取Action名称,后续使用/和。jspa切割字符来获取ActionName。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
在webwork.dispatcher.GenericDispatcher#executeAction函数,会对Action进行检查。
【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

系列Action工厂。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

如上分析,其实目前已经知道在Filter中提取URL的方法是getRequestURL,在Servlet中使用getServletPatch。

在URL加入上“;”,传入/secure/InsightPluginShowGeneralConfiguration.jspa;那么在Filter中无法找到InsightPluginShowGeneralConfiguration.jspa;对应的Action,后续进入Servlrt处理,而getServletPath会将;删除,这样也就绕过了Filter层的认证。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

但实际效果上,这样还需要进行验证才能访问资源。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
继续动态调试发现。
在LookupAliasActionFactoryProxy同样进行了权限检查。
【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

参考了其他大佬分析的文章,了解到在编写插件的时候可使用webwork1元素添加roles-required属性。这里直接使用受影响的插件insight8.9.10进行复现。

添加角色属性可参考https://developer.atlassian.com/server/jira/platform/webwork/

漏洞复现

在官网上下载插件Insight8.9.10版本。

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

上传成功后,在未登录的情况下,访问/secure/InsightPluginUpdateGeneralConfiguration.jspa;

【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

成功绕过登录认证限制。

修复建议

受影响用户可将产品更新至最新安全版本,具体参考官网公告:

https://jira.atlassian.com/browse/JRASERVER-73650

参考材料

1.https://jira.atlassian.com/browse/JRASERVER-73650
2.https://developer.atlassian.com/server/jira/platform/webwork/
3.https://marketplace.atlassian.com/apps/1212137/insight-asset-management/version-history
4.https://blog.viettelcybersecurity.com/cve-2022-0540-authentication-bypass-in-seraph/

关于Portal Lab

星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。



【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

原文始发于微信公众号(星阑PortalLab):【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月8日22:13:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析http://cn-sec.com/archives/1242618.html

发表评论

匿名网友 填写信息