热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【技术分享】看我如何挖到Twitter的XSS漏洞并绕过了CSP(含演示视频)

翻译:童话投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿前言几个月前,我挖到了一个Twitter的XSS漏洞,同时绕过了站点的内容安全策略(CSP)成功执行了Javascript

http://p4.qhimg.com/t01210ac97451657f19.jpg

翻译:童话

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


前言

几个月前,我挖到了一个Twitter的XSS漏洞,同时绕过了站点的内容安全策略(CSP)成功执行了Javascript代码。在本篇文章中将主要向大家分享该XSS漏洞挖掘的思路及具体细节,同时在文章中附带了PoC演示视频。


漏洞分析

存在漏洞的站点为https://apps.twitter.com,当开发人员创建应用时可以设置服务网站(Website)信息,用于提供对应用程序更加详细的描述,及应用下载等功能。

http://p7.qhimg.com/t01a3798962a889435a.png

经过测试后发现,Twitter的开发人员对该处输入的内容在服务端的正则校验可能是这样:([https?:])w+

细心的同学可能会发现这个正则表达式的开头缺少^字符,当我们输入类似data:CONTENT#https://…这种url是可以通过验证的,所以此时我们已经获得了一个HTML注入。由于该站点CSP(内容安全策略)的限制,此处注入HTML代码并不会解析。

在对HTTP头检查后,我注意到script-src和object-src块中有多个CSP(内容安全策略)配置错误,利用这些配置缺陷可能绕过twitter.com的CSP(内容安全策略)。CSP的规则如下所示:

script-src https://connect.facebook.net https://cm.g.doubleclick.net https://ssl.google-analytics.com https://graph.facebook.com https://twitter.com 'unsafe-eval' 'unsafe-inline' https://*.twimg.com https://api.twitter.com https://analytics.twitter.com https://publish.twitter.com https://ton.twitter.com https://syndication.twitter.com https://www.google.com;frame-ancestors 'self';object-src https://twitter.com https://pbs.twimg.com; default-src 'self';...

看到这里,object-src和script-src块立即引起了我的注意。经过一番分析,我找到一个可信域(cdn.syndication.twimg.com 又名 syndication.twitter.com)主机的JSONP endpoints。

一开始我认为,通过利用object-src块的内容(https://pbs.twimg.com),这个网站可以将Flash文件(as picture/video extension with few bytes header)上传到Twitter的CDN服务器,将其作为嵌入式对象(embedded Object)以执行代码。然而由于对用户输入长度的限制,我试图执行的payload都因为过长而被截断,所以这种利用方式最后没有成功。我找到一个可信域下可以利用的点,写出了一个较短的payload,当注入到twitter.com的时候代码执行,成功弹窗。

http://syndication.twitter.com/widgets/timelines/246079887021051904?dnt=true&domain=site.com&lang=en&callback=alert

当我们向服务端请求,来自syndication.twitter.com主机的JSONP响应头有一个Content-Disposition字段强制将返回的内容作为文件下载。但是,Chrome浏览器即使将返回的内容作为附件下载但由于配置错误的“unsafe-inline”CSP(内容安全策略)块意味着我们仍然可以执行代码。

通过设置服务网站(Website)信息如下:

data:text/html,

客户端代码将会执行,弹窗。


PoC 演示视频


后记

在后续的分析过程中我发现ssl.google-analytics.com、www.google.com还有graph.facebook.com主机的JSONP endpoints也可以被利用,我已经将其写入到向Twitter报告漏洞的邮件中,但官方表示这些问题短期内可能不会被修复,以为这可能影响部分功能的正常使用,同时联系其他厂商也需要一定的时间。

在这篇文章发布后Twitter上的研究员@Ben Hayak提示,我们也可以在该点展开同源方法执行(SOME)攻击,像这样:

https://syndication.twitter.com/widgets/timelines/246079887021051904?callback=
document.body.firstElementChild.Reference.submit

具体方法可以参考这篇文章:Instagram XSS


推荐阅读
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • Jmeter对RabbitMQ压力测试
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Jmeter对RabbitMQ压力测试相关的知识,希望对你有一定的参考价值。Jm ... [详细]
  • Hello.js 是一个用于连接OAuth2服务的JavascriptRESTFULAPI库,如Go ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • Imdevelopinganappwhichneedstogetmusicfilebystreamingforplayinglive.我正在开发一个应用程序,需要通过流 ... [详细]
author-avatar
mobiledu2502889257
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有