* 本文中涉及到的相关漏洞已报送厂商并得到修复, 本文仅限技术研究与讨论, 严禁用于非法用途, 否则产生的一切后果自行承担.
本文中, 作者通过对 JIRA Servcie Desk 应用下普通用户和管理员账户的权限测试, 发现可以普通用户身份访问获取到管理员账户关键路径下的一些敏感信息, 这些信息会对协同团队项目造成严重安全影响(CVE-2019-14994), 最终漏洞获得了厂商 $11,000 的奖励. 以下是作者对该漏洞的简单复现和分享.
JIRA Servcie Desk 介绍
JIRA Servcie Desk 是 Atlassian 旗下 JIRA 类应用的核心产品, 它是一款服务台管理软件, 专门用于接受和处理来自于团队或用户的问题或请求它还有其他类似于服务中心的附属功能包括处理服务协议, 报告, 队列, 通过网站入口或者邮件等形式接收来自外部的问题及反馈. JIRA Servcie Desk 是专门为终端用户提交工单到客户支持团队而设计的, 它也可适用于开发团队, 可与 JIRA Software 等同类产品配合使用.
JIRA Servcie Desk 主要有两个管理门户:
用户门户(Customer portal): 主要通过 / servicedesk/ 目录来实现访问
管理员门户(Administrative portal): 主要通过 / secure / 目录来实现访问
漏洞情况
该漏洞原理在于, 如果攻击者是可以访问用户门户 (Customer portal) 的普通用户, 那么, 他就能遍历管理员门户 (Administrative portal) 中 JIRA 项目提交的所有实例问题清单, 这些项目包括 Jira Service Desk 自身, Jira Core projects 以及 Jira Software 等.
漏洞可利用的条件为:
,JIRA Servcie Desk 中 `anyone can email the service desk or raise a request in the portal` 设置选项开启(任何人都可以向服务台发送电子邮件或在门户网站上提出请求);
, 上述设置开启后, 攻击者通过身份验证并能向 JIRA Servcie Desk 正常提交工单(Support Ticket).
漏洞影响版本:
- All versions before 3.9.16
- 3.10.x
- 3.11.x
- 3.12.x
- 3.13.x
- 3.14.x
- 3.15.x
- 3.16.x before 3.16.8 (the fixed version for 3.16.x)
- 4.0.x
- 4.1.x before 4.1.3 (the fixed version for 4.1.x)
- 4.2.x before 4.2.5 (the fixed version for 4.2.x)
- 4.3.x before 4.3.4 (the fixed version for 4.3.x)
- 4.4.0 before 4.4.1 (the fixed version for 4.4.x)
漏洞复现
首先, 我们要检查的是目标 JIRA 项目实例是否运行有 JIRA Servcie Desk 服务, 可以通过以下链接来核实:
https://target.com/servicedesk/
如果目标 JIRA 项目确实运行有 JIRA Servcie Desk 服务, 那就会返回以下管理登录界面:
从以上登录界面中, 点击其中的注册 ( "Sign up" ) 按钮, 完成注册. 注意, 如果这里不显示注册 ( "Sign up" ) 按钮, 那么漏洞就不可利用, 除非你有可登录进入管理界面的项目内部员工账号. 注册完成后, 我们可以来到用户门户 (Customer portal) 页面:
接下来, 我们就以该普通用户 (Customer) 的身份, 来发起对管理员账户 (Administrator) 下安全目录 / secure / 的请求. 结合 Burp 等其它抓包代理,(如果仅只用浏览器, 由于 URL 的正常化将不会导致漏洞利用成功), 我们构造请求如下:
- GET /servicedesk/customer/../../secure/BrowseProjects.jspa HTTP/1.1
- Host: target.com
- Cookie: [authenticated as a customer]
注意, 这里根据不同的 JIRA Servcie Desk 版本, 这里需要用到以下 URL 符号构造来进行路径遍历:
GET /servicedesk/customer/..;/..;/secure/BrowseProjects.jspa HTTP/1.1
最后, 如果目标 JIRA Servcie Desk 存在漏洞, 则会返回显示一个貌似坏页的项目浏览 (Browse Projects) 页面:
这也就是说, 普通用户的 Customer, 可以去访问到一些管理员门户下的页面信息. 然而, 因为管理员门户中的大多功能都是通过 APIs 来实现的, 但是其 APIs 对 URL 字符处理比较奇怪, 存在问题, 使得正常的浏览存在貌似坏页的问题.
对该漏洞的进一步利用就是构造请求, 结合 jqlQuery 查询, 导出所有感兴趣的组织数据. 试试:
- GET /servicedesk/customer/../../sr/jira.issueviews:searchrequest-html-all-fields/temp/SearchRequest.HTML?jqlQuery=text+%7E+%22%22 HTTP/1.1
- Host: target.com
- Cookie: [authenticated as a customer]
如果目标 JIRA Servcie Desk 服务端返回 "not found", 那你也可尝试通过请求以下 URL 来获取相关数据. 请求会返回所有与查询相关的数据信息, 当然你可以把 jqlQuery 查询参数更改成其它.
GET /servicedesk/customer/../../sr/jira.issueviews:searchrequest-xml/temp/SearchRequest.xml?jqlQuery=text+%7E+%22%22 HTTP/1.1
如以下查询返回了 HTML 的相关组织页面数据信息:
补充说明
奇怪的是 JIRA 本身的身份验证机制, 在它的正常情况下, 如果普通用户或内部员工, 通过浏览器访问上述我们所提到的管理员目录 / secure / 或 / sr/, 将会被阻止并重定向跳转到普通用户门户页面. 这种简单的 URL 匹配重定向跳转, 看似是 JIRA 自己对管理员门户的一种安全保护机制. 之后, JIRA 方给出了以下简单修复方案:
- <rule>
- <from>^/[^?]*\.\..*$</from>
- <to type="temporary-redirect">/</to>
- </rule>
这个修补方案有点可笑, 它只声明了用户的有限访问规则, 即访问到什么什么就实行跳转, 要是修复方案实施之后, 攻击者一样可以通过一些 fuzz 或编码技巧访问到管理员门户的相关功能.
该漏洞是我在 Bugcrowd 平台中参与 Atlassian Bug Bash 众测项目发现的, 由于该漏洞最终可对 Atlassian 的核心服务造成影响, 有危及大量 Atlassian 客户的风险, 最终 Atlassian 官方奖励了我 $10,000, 外加 $1,000 的 "停止测试" 奖金. 由于我参考了 Orange Tsai 此前针对 Atlassin 另一产品的漏洞发现, 感谢 Orange Tsai, 感谢 Atlassian 安全团队的 Dan Ritter.
来源: http://www.tuicool.com/articles/BRZJvmQ