记一次QQ邮箱XSS乌龙分析

发布于 2021-08-06  90 次阅读


今天听说QQ邮箱的在线文档页面被插xss了,就上去康康。

然后我一看,我日,还真alert了个1出来,就想着去找找是哪里被插了。

先是与这个消息一起传出来的几张图:

file

指向了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 + ");"); }

执行后再进入在线文档页面,成功输出调用堆栈。

file

最顶层的是alert自己,没啥好看的,于是锁定到getWeDocToken上。

file

看着应该是测试这个函数会不会被执行,这个函数的所在文件来源https://rescdn.qqmail.com/zh_CN/htmledition/js/all57b434.js又是腾讯自己的域名,所以基本上没啥被插的可能性了,那么这次QQ邮箱XSS乌龙应该是QQ邮箱项目组的前端程序老哥在和腾讯文档对接新功能的时候(这个应该是新功能?我在腾讯企业邮里面看见标了个NEW)测试这个函数会不会被执行(套娃套的老哥心里也没谱),然后测完了忘记删了,直接commit到主支然后推送给线上环境了。

file


The End