漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2015-0162395
漏洞标题:某思路利用百度爬虫对小度机器人XSS
相关厂商:百度
漏洞作者: 帮主
提交时间:2015-12-18 13:25
修复时间:2016-02-01 10:51
公开时间:2016-02-01 10:51
漏洞类型:XSS 跨站脚本攻击
危害等级:中
自评Rank:7
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2015-12-18: 细节已通知厂商并且等待厂商处理中
2015-12-21: 厂商已经确认,细节仅向厂商公开
2015-12-31: 细节向核心白帽子及相关领域专家公开
2016-01-10: 细节向普通白帽子公开
2016-01-20: 细节向实习白帽子公开
2016-02-01: 细节向公众公开
简要描述:
小度机器人对用户提出的问题会检索百度知道里的问题,并将百度知道中匹配问题的答案返回。而百度知道回答时允许用户添加代码,小度机器人在接收包含代码的百度知道答案时存在过滤不严,导致答案中的script标签被直接输出到页面中,内部JS脚本被执行。
详细说明:
问题出在小度机器人这个智能QA系统
当我们问它一些问题时,它会假装很智能的从百度百科中找到结果:
当我们问它一些问题时,它也会假装很智能的从百度知道中找到结果:
当我用一些XSS语句测试它时,它真的很智能的从百度知道中找到了我想要的线索:
看起来乱乱的
F12看下network,提问后的Ajax请求响应里的结果:
看着像是部分符号转义,部分又没转义,再看看响应结果被插入在的页面元素:
发现script标签未被过滤,直接输出到页面,但input貌似被长度截断了,所以在小度机器人点击那个按钮没有效果,截断也导致a标签的解析被干扰,所以点击链接也没效果。但是小度机器人检索到的答案的链接地址还是可以看到的,我们访问这个链接:
这个就是小度机器人检索到的问题的知道页面,我们发现问题描述中的特殊符号被转义,但是问题答案中添加的代码中的script标签并未被过滤,而是直接显示在了小度机器人交互页面,导致脚本被执行
于是一个很自然的思路就产生了:我们在百度知道里提出一个问题,然后回答时嵌入恶意脚本,再将答案采纳,等待百度爬虫把问题爬入系统,再在小度机器人中询问该问题,使小度机器人调出该问题并执行答案中的恶意脚本。下面就是我的尝试:
(注:问题名称尽量古怪一些,使百度每次都能唯一检索到你提的问题。而且问题名称中最好有类似“开源框架”这种字眼,这样在回答时才允许添加代码,否则一般问题百度不让回答时添加代码,这算是强制智能么...)
如上图,实现的功能是弹出cookie,测试结果如下,提问问题,成功弹出:
漏洞证明:
修复方案:
严格过滤!
虽然百度知道有问题审核机制,类似这种无意义的代码提问可能会被封掉,但是简单的人工申诉又会使包含恶意代码的问题再次生效而长期存在于百度系统中。所以根本还是代码输出过滤!
版权声明:转载请注明来源 帮主@乌云
漏洞回应
厂商回应:
危害等级:低
漏洞Rank:5
确认时间:2015-12-21 13:17
厂商回复:
非常感谢您的报告,问题已着手处理,感谢您对百度安全的关注。如果您有任何疑问,欢迎反馈,我们会有专人跟进处理。
最新状态:
暂无