今天听说QQ邮箱的在线文档页面被插xss了,就上去康康。
然后我一看,我日,还真alert
了个1
出来,就想着去找找是哪里被插了。
先是与这个消息一起传出来的几张图:
指向了getTop().setGlobalVarValue('CE_SEND', "1");
这句代码,但是这不就是window.setGlobalVarValue('CE_SEND', "1")
吗?设置个全局变量就被插了?难道是腾讯对CE_SEND
这个值有监听?
我自己运行了一遍这个代码,没有任何反应。
于是想着找一下alert
的调用堆栈。由于是进入页面就弹,本来是不好找的,但QQ是iframe去套娃的,正好又好找了,思路是把全局函数alert
重定义成warning
或者error
,这样子就会被自动输出调用堆栈,执行代码如下:
window.alert = function(e){ console.warn( "alert(" + e + ");"); }
执行后再进入在线文档页面,成功输出调用堆栈。
最顶层的是alert
自己,没啥好看的,于是锁定到getWeDocToken
上。
看着应该是测试这个函数会不会被执行,这个函数的所在文件来源https://rescdn.qqmail.com/zh_CN/htmledition/js/all57b434.js
又是腾讯自己的域名,所以基本上没啥被插的可能性了,那么这次QQ邮箱XSS乌龙应该是QQ邮箱项目组的前端程序老哥在和腾讯文档对接新功能的时候(这个应该是新功能?我在腾讯企业邮里面看见标了个NEW
)测试这个函数会不会被执行(套娃套的老哥心里也没谱),然后测完了忘记删了,直接commit
到主支然后推送给线上环境了。