公布一年前发现阿里旺旺的一个xss漏洞的细节。

时间:2022-10-30 14:17:00

概述

能显示表情图片成了现在的聊天软件必备基本功能,这就需要支持展示富文本的控件。

聊天软件主要用到两种富文本格式:RTF和HTML格式。

RTF可以采用RichEdit、HTML可以选择浏览器内核,比如Windows自带的IE内核。

淘宝旺旺用的就是IE内核作为聊天内容展示区,QQ使用的则是RichEdit。

用浏览器内核作为展示的聊天软件,可能就存在被注入JS的风险。

一年前的帖子:http://topic.csdn.net/u/20100908/23/41ac25c9-3b4c-4b55-b1b7-0903ba23ca7e.html

漏洞早已经修复,现在发出细节,好让大家注意防范。

软件一但在别人的机器了运行,状态就不在你的控制范围。


起因

当时一个朋友在询问我:如何用旺旺自动发送带彩色的文字。

经我分析:输入框是用的是richedit,正好之前做过跨进程访问richedit的探索:http://blog.csdn.net/zswang/article/details/2645555

研究了会发现:展示区是IE内核,字体名可以*控制,并且也没对字体名进行编码。

确定存在“浏览器内核聊天软件通过字体名注入脚本的漏洞”


经过

操作系统会提供当前已经安装的字体列表,比如:宋体、黑体、Verdana等等。

这些字体名一般不会出现特殊符号,但通过修改内存、跨进程控制控件的方式可以修改字体名,比如可以添加一个字体名为:“><b>test</b”。

如果展示的代码是:

append("<font name=" + fontname + ">" + htmlencode(context) + "</font>")
那么添加到展示区的就是:
“<font name=><b>test</b>context</font>”

如果看到粗体的test,恭喜第一步成功。

但字体名有长度是有限的,旺旺里限制24个字符。

24个字符要写比较复杂的攻击脚本还是挺难。

还好旺旺里一段聊天内容可以支持多个字体,这样就可以拼接在一起,注入理想长度的攻击脚本。

比如:

append("<font name=" + fontname1 + ">" + htmlencode(context1) + "</font>")
append("<font name=" + fontname2 + ">" + htmlencode(context2) + "</font>")
fontname1设置为:“><script>/*”

context1设置为:“*/alert('hello');/*”

fontname2设置为“*/</script”

那么添加到展示区的就是:
“<font name=><script>/**/alert('hello');/*</font><font name=*/</script>context2</font>”

结果

找几个小白鼠试了一下,证实攻击有效,向官方报告了漏洞并得到及时的修复。

参见第一个链接。

公布一年前发现阿里旺旺的一个xss漏洞的细节。


总结

1、“不要信赖客户端的提交的数据”包括通过系统api获取的数据;

2、展示时,动态拼接的内容都经过编码处理;

3、发现漏洞及时报告,因为你能发现了,别人也能发现,早点修复漏洞避免无辜的人受到损失。