前言
在上篇分析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 所有版本 < 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.17
USER root
COPY "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文件即可。
后续创建容器根据提示配置。
atlassian-jira-software-8.13.17-standalonelib
atlassian-jira-software-8.13.17-standaloneatlassian-jiraWEB-INFclasses
atlassian-jira-software-8.13.17-standaloneatlassian-jiraWEB-INFlib
前置知识
WebWork
Seraph
动态分析
在doFilter中调用父方法super.doFilter
持续跟进,发现会通过循环会出现三种Service
JiraPathService
WebworkService
WebworkService则是在actions.xml文件中获取角色所需要的webwork配置。
经过调试,会多次进入getRequiredRoles函数,其中获取URl的方式为getRequestURL。
继续跟进发现在通过getRequestURL方式提取请求URL后,会通过提取最后一个/后面的接口产生一个targetURL,这里传入的是/secure/InsightPluginShowGeneralConfiguration.jspa,而targetURL为/InsightPluginShowGeneralConfiguration.jspa
JiraSeraphSecurityService
继续往下就是第三个服务JiraSeraphSecurityService,作用是在所有插件的 atlassian-plugin.xml 文件中获取角色所需的 webwork 操作配置。
在跟进JiraSeraphSecurityService时,发现会调用WebworkPluginSecurityServiceHelper.getRequiredRoles,和WebworkService.getRequiredRoles代码是相同的。
接口权限必须是admin。
系列Action工厂。
如上分析,其实目前已经知道在Filter中提取URL的方法是getRequestURL,在Servlet中使用getServletPatch。
在URL加入上“;”,传入/secure/InsightPluginShowGeneralConfiguration.jspa;那么在Filter中无法找到InsightPluginShowGeneralConfiguration.jspa;对应的Action,后续进入Servlrt处理,而getServletPath会将;删除,这样也就绕过了Filter层的认证。
但实际效果上,这样还需要进行验证才能访问资源。
参考了其他大佬分析的文章,了解到在编写插件的时候可使用webwork1元素添加roles-required属性。这里直接使用受影响的插件insight8.9.10进行复现。
添加角色属性可参考https://developer.atlassian.com/server/jira/platform/webwork/
漏洞复现
上传成功后,在未登录的情况下,访问/secure/InsightPluginUpdateGeneralConfiguration.jspa;
修复建议
受影响用户可将产品更新至最新安全版本,具体参考官网公告:
参考材料
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。
原文始发于微信公众号(星阑PortalLab):【技术干货】CVE-2022-0540 Jira身份验证绕过漏洞分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论