【技术分享】针对PayPal子域存储型XSS的研究(上)
作者:admin | 时间:2017-11-17 01:37:43 | 分类:黑客技术 隐藏侧边栏展开侧边栏
写在前面的话
在本系列文章中,我们将会给大家介绍如何利用PayPal品牌中心站点中的XSS(跨站脚本)漏洞。在这个过程中,我们需要利用该站点所使用的身份验证机制中存在的安全问题,并利用“文件名注入”技术将Self-XSS转换为non-Self型的存储型XSS。
如果你想了解更多相关内容,请访问作者的Twitter主页或通过电子邮箱与他联系。
Twitter:@YoKoAcc
电子邮箱:yk@firstsight.me
概述
为了更加方便地给PayPal的店主们或零售商提供技术支持信息,PayPal专门给他们的客户以及店主搭建了一个门户网站以方便他们直接跟PayPal进行沟通,他们可以通过这个站点直接与PayPal讨论产品完整性的问题,发送新功能的使用反馈信息,或者讨论PayPal当下面临的技术问题等等,这个页面就是PayPal技术支持站点【传送门】。
下图显示的就是PayPal的技术支持主页:
从另一方面来说,为了完善PayPal给其他实体所提供的日常网络服务,PayPal还专门设计了一个网站用来给他们的商业合作伙伴申请PayPal的Logo使用权限,这个网站就是PayPal的品牌中心【传送门】。
下图显示的就是PayPal产品中心的主页:
需要注意的是,这两个站点均支持文件上传功能,因此店主或者客户就能够尝试上传系统允许的文件来帮助PayPal更加清楚地了解他们当前所面临的情况或者问题。但不幸的是,这些文件上传功能的验证机制中存在安全问题,即该功能无法对客户上传文件的内容(技术支持站点存在该问题)以及文件名(品牌中心站点存在该问题)进行有效验证,因此攻击者能够利用这种安全问题来存储一个攻击脚本(客户端脚本)并在多种攻击场景下使用该脚本,例如将用户重定向到一个钓鱼页面,或者在客户主机中下载恶意软件等等。这也就是我们常说的跨站脚本攻击,本文稍后会对这部分内容进行详细描述。
补充内容:在此之前,PayPal产品中心网站是允许开放注册的,任何人都可以通过PayPal所提供的激活链接来在线激活自己的账号(没错,我们还可以绕过这种激活机制,我们之后会专门发布一篇相关文章来介绍这部分内容,你可以先使用账号yk@paypal.com以及PayPal的忘记密码功能来自己先试一试)。但是现在,该站点中的每一次注册申请都必须经过PayPal的人工审批。
下面这张截图显示的是我们成功绕过了PayPal产品中心的PayPal激活链接:
技术介绍
存储型跨站脚本(XSS)
简而言之,这种类型的漏洞将允许攻击者在目标网站的文本输入区域(input标签)中执行任意代码。之所以会产生这样的漏洞,主要是因为开发人员在实现这些文本输入区域时,没有过滤掉例如“> < : / ;”之类的特殊字符。与存储型XSS对应的是反射型XSS,攻击者在利用反射型跨站脚本漏洞时不需要存储任何的“脚本”,他们只需要让目标用户访问一个已经注入了“额外内容”的URL即可。与之不同的是,攻击者在利用存储型跨站脚本漏洞时需要存储脚本文件,并且在目标用户正常访问被入侵的页面时自动执行该脚本。
技术支持门户的信息提交过程分析
在Paypal的技术支持页面中,PayPal允许用户通过“联系支持”功能提交自己的问题,地址为https://www.paypal-techsupport.com/app/ask。一般来说,用户有两种方法(场景)来提交信息(任务单):
a:用户需要登录他们的技术支持站点账号,然后访问上述给出的“联系支持”功能地址。接下来,用户将会看到页面中需要填写的内容:
b:第二种就是用户在不登录任何账号的情况下直接访问“联系支持”功能。此时,用户将直接查看到“电子邮件地址”之类需要填写的内容:
这些页面的提交功能允许用户上传网站所支持的文档格式(用于更加清晰地描述用户无法解决的问题),例如.txt、.doc、.docx、.xls、.xlsx、.pdf、.jpg、.png、.bmp、.ppt和.pptx。
但是.svg文件格式是系统所不支持上传的:
但是,如果攻击者能够修改系统的文件提交机制,并对目标账号发动客户端攻击的话,那么问题就严重了。在这种场景中,攻击者可以利用刚才所介绍的方法b(不需要登录即可提交任务单)来绕过网站的过滤系统并上传.svg文件。而且需要注意的是,在这种场景下,PayPal技术支持门户并不会验证.svg文件的内容,因此攻击者就可以在其中嵌入任何需要注入的客户端脚本了。下面给出的是我们的PoC:
1
2
3
|
<? xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
< svg onload = "window.location='http://www.google.com'"
xmlns = "http://www.w3.org/2000/svg" ></ svg >
|
PayPal技术支持门户的任务单提交流程图
为了让大家更加清楚地了解任务单的提交流程,请大家看看下面这张流程图。图中显示了PayPal技术支持门户任务单提交的正常处理流程,在“登录后提交任务单-方法a”场景中,一切都看似正常。正如之前所说的,用户可以上传网站支持的文件格式:
下面这张图片显示的是另一种场景下的提交流程。此时的场景为方法b,即“在不登录的情况下提交任务单”。因此,用户只需要在提交时填写联系邮箱的地址即可:
信息提交完成之后,用户可以登录技术支持门户来查看自己提交的问题。
问题总结
正如我们之前所介绍的那样,本报告所描述的安全问题与跨站脚本漏洞有关,这个漏洞将允许攻击者在PayPal网站的服务器中存储注入了恶意代码的“客户端脚本”,而攻击者之后可以在不同的攻击场景中使用这种脚本,例如将用户重定向到钓鱼页面或在目标用户的主机中下载恶意软件。这种安全问题之所以会存在,主要是因为PayPal在实现其文件上传功能时没有部署有效的文件验证机制(包括文件类型和文件内容)。
缓解方案
为此,我们也提供了以下几条建议来防止类似的问题再次出现:
1. 禁用“无需登录即可提交任务单”功能;
2. 不仅要在客户端检测用户上传的文件类型,而且当文件到达服务器端时也要对文件后缀以及文件内容进行检测;
演示视频
为了让大家更好地理解本文所描述的漏洞,我们给大家提供了本文所介绍的两种场景下的攻击演示视频:
1. PayPal技术支持门户的存储型XSS:https://youtu.be/7Au-As7jrQs
2. PayPal品牌中心的存储型XSS:https://youtu.be/XwynfNOxIlI
积累经验
PayPal已经确认了我们所提交的漏洞报告,并且给我们提供了相应的漏洞奖励。PayPal目前已经修改了其品牌中心的注册流程,因此本文关于“PayPal品牌中心”的漏洞将不再有效。
我个人认为,对于大规模的网站而言,需要保护的东西实在是太多了,而安全团队也并不能百分之百地清楚网站中每一个应用程序的具体运行流程。与此同时,像Facebook和Twitter这样的门户网站一样,PayPal的安全团队每天都会接收到来自全世界各个地区的研究人员发过来的漏洞报告,因此这也给企业的安全团队带来了巨大的工作量。因此,当各位想要提交漏洞报告的时候,请一定要保证报告内容的完整性,并提供可行的PoC以及漏洞利用细节,最好还可以附带演示视频。
在本系列文章的下集中,我们将给大家介绍PayPal存储型XSS漏洞的利用过程,请感兴趣的同学及时关注安全客的最新报道。
本文由 安全客 翻译,作者:WisFree