★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
JIRA 存在 Seraph 组件认证绕过漏洞,影响范围广泛:
根据官方描述,大批量的默认和第三方插件受到影响:
对于认证绕过,猜测问题可能出现在 Filter 过滤上,JIRA 内部封装了数量较为庞大的 Filter 列表:
由于漏洞出现在`Seraph`模块,挨个查看 Filter 类,发现`JiraSecurityFilter`引用了`com.atlassian.seraph`包:
在`doFilter`中调用`super.doFilter`,即`SecurityFilter.doFilter`:
`Security.doFilter`根据客户端请求用户权限进行检查,进一步判定是否需要认证,`needAuth`变量很容易引起注意:
通过动态调试可知有 3 种服务进行检查,即`JiraPathService`、`WebworkService`和`JiraSeraphSecurityService`:
`JiraPathService`用于处理`/secure/admin/`请求,需要管理员访问:
`WebworkService`从`actions.xml`文件`webwork`中读取权限定义:
其`getRequiredRoles`函数代码如下:
最后是`JiraSeraphSecurityService`,从插件`Atlassian-plugin.xml`文件中读取`webwork`接口权限定义:
动态调试可知经过多次`getRequiredRoles`函数执行,最后调用了`WebworkPluginSecurityServiceHelper.getRequiredRoles`函数,而且这个函数代码与`WebworkService.getRequiredRoles`相同:
该函数从`request`请求中提取 URI ,搜索最后一个`/`所在的位置,提取接口名称得到`targetURL`。如果 URL 输入为`/secure/PerformOAuth2Authorization.jspa`,那么`targetURL`为`PerformOAuth2Authorization.jspa`:
在`actionMapper`中搜索对应的`Action`名称,这里得到为`PerformOAuth2Authorization`:
根据`rolesMap`得到接口的权限为`admin`,接口需要管理员登录:
介绍完功能代码,最后还要重点 Mark 一下,`getRequiredRoles`中获取 URL 的方式为`getRequestURI`:
查看`atlassian-jira/WEB-INF/web.xml`文件`Servlet`定义,`*.jspa`由`com.atlassian.jira.web.dispatcher.JiraWebworkActionDispatcher`处理:
`JiraWebworkActionDispatcher.service`函数从请求中获取`Action`名称:
使用`/`和`.jspa`切割字符串获取`ActionName`,如果 URL 输入`/secure/PerformOAuth2Authorization.jspa`,那么 Action 为`PerformOAuth2Authorization`,注意到使用`getServletPath`函数:
在`executeAction`函数中进行`Action`检查:
`Action`工厂列表如下:
再一次 Mark ,`GetActionName`中使用了`getServletPath`函数。
通过前边的分析,我们能够得知`Seraph`组件在 Filter 中使用`getRequestURI`提取 URL ,而 Servlet 中使用`getServletPath`,有经验的小伙伴应该很快意识到存在一个典型的认证绕过场景。
简单的来说就是如果 URL 中包含`;`,`getServletURI`结果会将分号保留,但`getServletPath`会自动将分号删除。以发送`/secure/PerformOAuth2Authorization.jspa;`为例, `Seraph` 组件 Filter 中调用显然找不到`PerformOAuth2Authorization.jspa;`对应的 Action ,从而进入 Servlet 处理,相当于完成了 Filter 层面的认证绕过:
`getActionName`获取的结果示例如下:
绕过`Seraph`组件`Filter`后,可以看到回复报文存在差异,但是还是需要认证:
调试后发现在执行`LookupAliasActionFactoryProxy`时同样读取了`PerformOAuth2Authorization`权限并进行检查:
同时其他`Factory`可能检查`Xsrf`、`checkWebSudoStatus`等要素:
直接查找官方文档,在编写插件时可以使用`webwork1`元素添加`roles-required`属性:
Atlassian 插件通常为 jar 或者 ocr 格式,为了验证绕过,根据官方发布的插件影响列表下载 Insight 8.9.10 版本,找到一个`webwork1`元素:
成功绕过后台限制:
JIRA 默认组件中一些可能绕过的功能,(尚未调试分析每个接口功能):
还有很多其他 URL ,需要绕过 XSRF:
部分接口可通过请求直接返回错误栈:
有兴趣获取完整漏洞分析与复现过程的小伙伴,请加入我们的漏洞空间站-致力于打造优质漏洞资源和小伙伴聚集地!
典型的插件修补过程:
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
★且听安全★-点关注,不迷路!
★漏洞空间站★-优质漏洞资源和小伙伴聚集地!
原文始发于微信公众号(且听安全):漏洞空间站上线啦!CVE-2022-0540 Atlassian JIRA存在认证绕过漏洞影响范围广泛