本文Writeup讲述了作者通过简单Google Dork查询发现的PayPal信息泄露漏洞。每天,世界各地大量PayPal用户在发生转账交易时,都使用了安全的GET方式HTTP传输请求,这本身没有任何问题,但是,原因在于PayPal官方未配置严谨安全的robots或禁止爬虫索引规则,导致Google搜索引擎爬虫可以收录爬取到这些用户转账交易的GET请求信息,导致用户敏感信息泄露。漏洞最终获得Paypal官方$1,000的奖励。
通常,网站可通过在根目录下放置robots.txt文件,来告知网络搜索引擎爬虫,自身资源哪些是允许(allow)或不允许(disallow)爬取收录的,如下所示:
从上面的示例可以看出,robots.txt规则对于防止搜索引擎爬虫索引收录网站目录内容非常有效。但PayPal对此的做法却是存在问题的,如以下经过解码的PayPal交易请求示例:
在该转账交易请求中,并没有配置恰当的搜索引擎爬虫索引收录拦截规则,这样的话,攻击者就可以尝试通过搜索引擎来枚举相关的转账请求信息。
据我所知,通常来说,要防止搜索引擎爬虫对类似请求的索引收录,开发人员需要在页面中使用noindex标签来表明禁止收录该页,谷歌也在其官方文档中作了相应说明:
另外,HubSpot公司也分享了使用noindex和nofollow的两种防止爬虫索引收录方法:
当PayPal用户向其他账户发生转账交易时,正常来说,PayPal会向服务端发送一个GET方式的HTTP请求,这个请求中包含了recipient、onboardData、sendMoney、currencyCode、payment_type、sendMoneyText、intent等参数,如下:
(victim_email_address)&amount=1000.00¤cyCode=USD&payment_type=Gift&onboardData={“intent”:”sendMoney”,”recipient”:
(victim_email_address)”,”currency”:”$”,”amount”:”1000.00″,”redirect_url”:”https://www.paypal.com/myaccount/transfer/send/external?recipient
(victim_email_address)&amount=1000.00¤cyCode=USD&payment_type=Gift”,”flow”:”p2p”,”country”:”US”,”locale”:”en-US”,”sendMoneyText”:”Custom message, for example is sending a money to victim_email_address”}
如前所述,如果我们知道这些所有参数,就能尝试去枚举Paypal注册用户执行的转账交易请求。
Xoom是PayPal于2015年收购的跨境转账平台,用于提升PayPal快捷的国际汇款服务。刚开始,在研究这种信息泄露问题时,我只发现了一些用户邮箱信息,我认为Paypal可能不会把它当成漏洞处理。但之后我发现在Xoom的用户安全策略中,它采取了相应措施防止攻击者的枚举猜测,因此我还是把这个漏洞上报给了PayPal,当然最后他们也承认了该漏洞的有效性。
当我们第一次注册Xoom账户时,Xoom会正常完成注册程序并会向用户发送验证信息。但是,奇怪的是,当我们用注册过的Xoom账户信息再次注册时,Xoom仍然会正常完成注册流程,就像该Xoom账户此前从未注册过一样。这就神奇了。而另一方面,Xoom在后台却会向这个注册过的Xoom账户发送警告邮件,声称该账户可能正被攻击者尝试重新注册,以此提示用户要注意账户安全。
这种“表面”一套,“背后”一套的注册机制明显是不安全和互相矛盾的,只要我们能枚举出用户ID,就会是一个漏洞问题。
那如何来枚举Xoom用户的个人信息呢?最后,我从其Referer功能中找到了突破。Referer功能本身用于大型网站中的服务优化,通常情况下,Referer链接还被应用到一些对接收者的在线广告促销活动中。如Xoom的https://www.xoom.com/xoom-refer-a-friend-program功能下,新注册用户如果首单转账超过$400美金,就会获得一张$20美金的亚马逊电子购物卡。
最终我发现,除这个Referer功能外,在Xoom的各种功能之中,Paypal都实行了不当的robot.txt配置规则,导致搜索引擎爬虫索引收录了其上的一些用户请求,攻击者因此可以通过搜索引擎来枚举出一些用户敏感信息。
漏洞发现非常容易,只需执行一个简单的Google Dork查询,就能发现Xoom上的一些敏感用户信息。比如,去发现Xoom上注册账户的相关邮箱信息,可以用以下Google Dork语法:
· site:xoom.com inurl:’@gmail.com’
· site:xoom.com inurl:’@yahoo.com’
· site:xoom.com inurl:’@hotmail.com’
· site:xoom.com inurl:’@msn.com’
· site:xoom.com inurl:’e=’ ‘refer’
· site:xoom.com inurl:’tellapal.id’
当然,你也可以把后缀@yahoo.com更改为其它邮件服务商。如用Referer功能通过Google收集到的用户敏感信息:
此外,还可以通过Paypal的付款(Send-Money)等功能来收集用户敏感信息:
那既然Xoom可以这样,Paypal行不行呢?结合之前我们分析的Paypal转账请求参数,我们有了以下Google Dork查询语法:
· site:paypal.com inurl:’payment_type=’
· site:paypal.com inurl:intent
· site:paypal.com inurl:’sendMoneyText’
· site:paypal.com inurl:’recipient=’
· site:paypal.com inurl:currencyCode=
· site:paypal.com inurl:onboardData=
· site:paypal.com inurl:sendMoney
· site:paypal.com inurl:item_name
· site:paypal.com inurl:counterparty
利用谷歌搜索引擎,我们发现了sendMoneyText参数相关的用户敏感信息:
payerView参数相关的用户敏感信息:
以及em参数相关的用户敏感信息:
除此之外,通过搜索引擎,我们还发现了一些用户在网上的电子**:
这种被搜索引擎爬虫收录索引的问题,最适当的做法那就是需要配置合理的robot.txt规则了,当然也可以在开发过程中参考一些禁止索引的方法,如谷歌的Block search indexing with ‘noindex’”。作为安全研究来说,我们需要多阅读其他人的分析报告,多借鉴思考,尽可能地多分析目标应用的各种功能机制,从中发现问题。
*参考来源:medium,clouds编译整理,转载请注明来自FreeBuf.COM