HTML元素全覆盖漏洞是一种基于用户点击实现的页面注入漏洞。通过利用某些软件潜在对HTML元素样式过滤不够透彻从而之作出一个透明的占用整个窗口的HTML元素,附加一个link即可诱导用户点击任何位置失效。一般来说HTML元素的样式漏洞要发挥作用需要配合一个XSRF或XSS的漏洞,不过不管是否有XRSF/XSS漏洞,允许制造有潜在安全隐患的HTML元素这种事情是应该被处理的。
以下文章比较一般化,并不针对OSChina这个样式漏洞。至少目前许多论坛和博客系统都潜在这个漏洞:
HTML元素样式漏洞是在允许用户进行自定义HTML元素的时候产生的,常见于各种WYSIWYG(所见即所得)文本编辑/格式化系统。这些系统通过把你的文本转化为格式的HTML实现格式所见即所得,不过也正因此产生了一些漏洞。
所见即所得编辑器返回的是一堆“生的”HTML,使得远程服务器端查找并解析漏洞异常的恶心。简单说,我们要获取某个HTML标签,合里面的属性,把没用的或不安全的扔掉,再筛选属性的值,把非法的扔掉。直白些说,WYIWYG接收端应该处理诸如
<a href="javascript:THIS_IS_SCRIPT" onclick="script();" style="some-style:val;" class="blah" title="bleh" alt="k" notavailable="yes">
,需要扔掉 onclick, notavailable…这些危险或是无用的属性,需要解析 href并过滤掉javascript:,需要检查style问题。(解析复杂度堪比KnProxy)所以有些WYSIWYG编辑器会允许用户自己插入带有style标签的div,服务器不过滤这就很要命了。
还好OSChina在前几个星期把这个问题更正了,DIV不能再带style标签了,是吧。但是这其实也并不透彻。
WYSIWYG编辑器一般会在颜色格式化文本时使用
<span style="color:#ff0000;">
类似的标签进行颜色化,许多时候,服务器端会认为SPAN里面的STYLE基本就是无害的了= =。其实不然,因为有个东西叫作
display:block;
会让 span变成div的!>_<糟糕极了
于是产生了如下的漏洞:
<a href="一些无聊网站"><span style="display:block;position:fixed;top:0;left:0;height:9999px;width:9999px;"> </span></a>
任何载入含有这段内容的页面会被一层透明纱布蒙住,不管点击什么都会导致如同点击了连接的效果。当然注意,OSC的href筛查 javascript(这点做得不错)所以这并不是一个联合XSS的机会,不过XSRF什么的貌似有一定的可行性(比如强制登出)。
或许你来到这里就是经过这种途径的,也说不好。也许你会去往一个Phishing(钓鱼)网站,也说不好。
在此提醒各种网络服务作者/运营者:使用一个好的WYSIWYG编辑器固然很美观,不过允许用户随意插入HTML代码的问题,也是大家不得不考虑的隐患。建议各种WYSIWYG编辑器采用BBCode或者Markdown类似的方式排版文字,避免给HTML格式注入留下可乘之机。
(顺便:本站的评论采取全面禁止HTML代码,原因见上)
学习了!
嘿嘿,我从来都是保留意见。c7
学以致用~