漏洞是一种经典的Javascript注入攻击。假设您编写了一条推文,其中包含以下文本:
"http://www.guardian.co.uk/technology is the best!"
当您查看 Twitter 网页时,这将成为一个链接,如下所示:
<a href="http://www.guardian.co.uk/technology" class="tweet-url web"
rel="nofollow">http://www.guardian.co.uk/technology</a> is the best!
该漏洞攻击了链接创建函数。攻击推文的原始文本应该类似于这样:
http:
$('.status-update-form').submit();"class="modal-overlay"/
Twitter没有做好保护工作,可能是因为“@”字符组合破坏了他们的[HTML]解析器。该链接将生成以下页面源代码:
<a href="http://a.no/@";onmouseover=";$('textarea:first').val(this.innerHTML);
$('.status-update-form').submit();"class="modal-overlay"/ class="tweet-url web"
rel="nofollow">
这意味着可执行内容(onMouseOver="stuff"部分)已经包含在页面源代码中。由于浏览器并不知道这点,所以运行了这段代码。因为它是在用户的浏览器里运行的,所以它能够做任何用户可以做的事情;大多数变形都利用了这个功能重新发布内容,这就是为什么它像病毒一样传播开来。为了鼓励用户通过悬停来激活代码,它们还使用CSS [层叠样式表,用于确定页面布局]将该块格式化为黑底黑字。其他版本被用户入侵以产生各种其他效果,例如将成人网站重定向到其他地方,在推文中添加彩虹文本等等。其中一些弹出对话框旨在警告用户,称帐户被禁用或密码被盗(实际上都不是如此)。
Twitter解决此问题的方法不是阻止字符串onMouseOver(一些愚蠢的博客曾要求这样做),而是正确地净化输入。这些推文中的“引号”现在转换为HTML转义形式“"”。
从技术上讲,这是一个二次注入攻击;攻击字符串被插入数据库并得到正确处理,但随后攻击发生在将字符串读回时。这并不是一个非常复杂的攻击,对于Twitter来说相当令人尴尬他们被这个问题抓住了。
来源:
Twitter的黑客事件:它是如何开始和运作的