5.3 HackerOne非预期HTML包含补丁绕过漏洞
难度:中
URL:https://hackerone.com/reports/<report_id>/
报告位置:https://hackerone.com/reports/112935/
报告日期:2016年1月26日
支付奖金:500美元
当一个组织创建了修复程序并解决了报告中的问题后,并不总代表就免于漏洞困扰了。在读完Ceukelaire的漏洞报告后,我决定测试一下HackerOne的漏洞修复程序,看一看Markdown编辑器是怎样呈现非预期输入的。为此,我提交了如下代码:
回想一下,为了用Markdown创建一个锚标签,你通常需要提供一个URL和一个由双引号括起来的title属性。为了解析title属性,Markdown需要先找到左双引号,然后是随后的内容,最后是右双引号。
我好奇的是,是否可以通过增加附加的随机双引号和属性来让Markdown在解析过程中发生错乱,Markdown会不会在额外增加的双引号处重新错误地开始解析属性内容。这就是我在上面的代码中加入ismap=(一个有效的HTML属性)、yyy=(一个无效的HTML属性)和额外的双引号的原因。当提交该输入后,Markdown编辑器解析该代码为如下的HTML:
可见,来自Ceukelaire报告的修复程序造成的结果是更为不可预测的漏洞,它会使Markdown解析器生成任意HTML。尽管我没有立即利用该漏洞,但是已经包含了未转义的HTML就足以作为漏洞验证程序(POC)了,从而让HackerOne不得不撤销之前的修复程序并使用不同的解决方案来纠正以上问题。可以注入任意HTML标签的事实可能会导致漏洞,因此,HackerOne向我支付了500美元的奖金。
要点
仅仅更新代码,并不能说明所有的漏洞都被修复了。要确保对变化后的代码进行渗透测试,而且要持续地进行测试。部署补丁程序,意味着这是新的代码,就有可能包含漏洞。