声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |
背景介绍:
几个月前,白帽小哥Saajan Bhujel正在无聊的刷着 Twitter ,突然间,来自GitHub 的一条推文吸引了他的注意,Tweet 是关于 GitHub 的新功能,它提供了通过 MathJax 库在 Markdown 中显示数学表达式(TeX 和 LaTeX 样式语法)的功能。
什么是 MathJax?
MathJax 是适用于所有现代浏览器的 LaTeX、MathML 和 AsciiMath 表示法的开源 JavaScript 显示引擎,内置对屏幕阅读器等辅助技术的支持。
阅读完推文后,可以了解到“GitHub 现在正在使用 MathJax 库在 Markdown 文件中显示数学表达式”,于是,白帽小哥尝试的第一件事便是在 MathJax 库中查找以前或已知的漏洞,而他的专注点是寻找曾经爆出的 XSS 或 HTML 注入 CVE。
阅读推文后,我了解到,“GitHub 现在正在使用 MathJax 库在 Markdown 文件中显示数学表达式”。所以,我尝试的第一件事是在 MathJax 库中查找任何以前或已知的错误。主要是,我正在寻找任何以前的 XSS 或 HTML 注入 CVE。
很幸运,在 MathJax 库中发现了影响版本 < 2.7.4 的已知 XSS 漏洞,并且POC需要采用 Unicode 格式才能触发。
于是白帽小哥迅速地在测试存储库中创建了一个markdown文件,他在一个文件中输入了如下的payload:
Payload:- or , etc.$$\\u003cu\u003eHello\u003c/u\u003e{}$$$$\\u003cu\u003eWhy\u003c\uffofu\u003e{}$$
但是,这其实并没起任何作用,而且,该漏洞“仅在版本 <2.7.4 时易受攻击,而 GitHub 使用的是较新的版本”。
因此,白帽小哥认为“必须自己找到一个绕过方法才能成功利用该攻击,并且如果能够以某种方式呈现基本的 HTML 标签,例如:.”。也许你可能会想知道为什么只是基本的 HTML 标签?要知道大多数时候网站都会使用 WAF、过滤器和限制器来防止使用高级标签,但它们对基本的HTML标签和普通标签的作用却不同。
第一种利用方式:
白帽小哥做的第一件事是“找到任何对使用数学表达式渲染基本标签非常有用的有趣行为”,为此,他尝试了不同类型的方法(如 Unicode、URL 编码等)。
终于功夫不负有心人,某个时候的标签会被渲染而没有任何错误或过滤”,POC是下面这样:
\$$\ HELLO {}$$
于是白帽小哥很快使用其它高级标签(如
$${}$$
我们可以使用、
尽管如此,白猫小哥并没有向GitHub报告这一问题,因为“除了使用受限标签外,没有看到任何安全影响”,因此,他尝试找到与上面类似的第一种方法,也许可以修改页面的CSS,但GitHub修复问题后,我们便不能再使用
还没有评论,来说两句吧...