挖洞经验 | 美国交友软件OkCupid平台的个人信息泄露漏洞
作者:admin | 时间:2020-12-1 00:20:19 | 分类:黑客技术 隐藏侧边栏展开侧边栏
OkCupid,美国免费的在线征婚交友和社交网站,拥有超过5000万注册用户,其中大多数年龄在25岁至34岁之间,是全球最受欢迎的约会平台之一。OkCupid支持多种通信模式交流,包括即时聊天APP和电子邮件。2007年,OkCupid网站被时代杂志评为世界十大交友网站之一,2011年2月,OkCupid被Match.com运营商IAC/InterActiveCorp以5000万美元收购。
OkCupid可根据会员自身填写的相关信息,经后台算法匹配,推荐适合的约会对象,完成配对牵线。当然了,个人信息不仅方便了恋爱配对,也一直是黑客眼中的宝藏。近期,Checkpoint安全团队就针对OkCupid的移动应用和网站平台安全性开展了测试,发现了以下严重漏洞:
APP存在会员个人敏感信息泄露;
可用受害人身份执行恶意操作;
可窃取用户会员资料、以及爱好个性等隐私数据;
可窃取用户身份校验Token、用户ID、注册邮箱等信息;
可窃取用户数据并转发至攻击者控制端。
移动应用APP平台
Checkpoint对OkCupid的安卓APP(v40.3.1)进行了逆向分析,在此期间发现其APP会开启一个WebView组件(可用来在WebView窗口环境中执行JS代码),并会加载形如https://OkCupid.com, https://www.OkCupid.com, https://OkCupid.onelink.me等样式的远程链接。
危险的深度链接
Checkpoint发现OkCupid APP存在“https://OkCupid.com”和“OkCupid://”通用样式的“深度链接”功能:
基于上述通用链接(Custom link),由于其中包含了“section”参数,所以攻击者可以就此构造形如以下的通用链接形式发送给受害者,引诱受害者打开一个webview窗口程序,并在此期间执行任意JS代码:
反射型XSS漏洞
Checkpoint还发现了OkCupid 主站https://www.OkCupid.com存在一个XSS漏洞,XSS注入点位于用户资料设置处:
https://www.OkCupid.com/settings?section=<value>
其中的section参数存在可被注入JS代码的问题,在OkCupid APP请求交互时可触发XSS。由于上述我们提到WebView被开启后可执行JS代码,因此这里我们利用该XSS漏洞,在经身份验证的受害者APP中触发了一个空弹窗:
敏感信息泄露 & 可用受害人身份执行恶意操作
基于上述的XSS漏洞和OkCupid使用的深度链接,我们可用OkCupid://方式启动OkCupid APP,然后在section参数处构造加入恶意JS脚本代码进行深入测试。以下图例为最终构造的XSS Payload,其可以从攻击者控制端加载jQuery和JS代码,上半部份为原始XSS Payload,下半部份为URL编码后的XSS Payload:
利用该XSS Payload在前述XSS漏洞的section参数处发起HTTP GET请求:
请求发出后,会在OkCupid服务端的WebView窗口环境中注入以下JS代码:
由于XSS payload中会加载攻击者控制端中的js脚本文件script.js,该脚本文件包含以下三种功能模块,可以窃取渗漏受害者的用户信息:
steal_token – 窃取受害者用户的身份验证Token、oauthAccessToken、userid,包含注册邮箱在内的用户个人信息(PII)等;
steal_data – 窃取受害者用户个人资料、隐私数据、爱好个性等信息;
Send_data_to_attacker – 把上述窃取的数据信息发送到攻击者控制端。
steal_token 功能模块
该模块会创建一个调用OkCupid服务端的API接口,由于XSS Payload触发WebView窗口,当受害者点击执行后,其Cookie信息将会被窃取并发送至攻击者控制端:
OkCupid服务端对上述请求的响应为以下包含用户ID和身份验证Token的JSON格式信息:
Steal data模块
该模块创建了一个针对https://www.OkCupid.com:443/graphql的HTTP请求,结合steal_token窃取的受害者信息,该请求会在其中带入用户ID和身份验证Token为请求参数:
OkCupid服务端对该请求的响应,包含了受害者个人资料、注册邮箱、性别取向、身高和家庭状况等:
Send data to attacker模块
该模块会向攻击者控制端发送一个POST请求,其中会包含steal_token和steal_data模块所有窃取数据,以下为该POST请求截图:
由于攻击者可以窃取受害者的身份Token和用户ID,因此,可用受害人身份执行恶意操作,如向其他用户发送虚假信息、更改个人资料,因为steal_token模块中包含了以下受害者信息:
身份校验令牌Authentication token、oauthAccessToken;
User id、userId
Note:由于Cookie中设置了HTTPonly属性,因此攻击者不能完全劫持受害者账户。
网站系统漏洞
配置错误的CORS策略可导致敏感信息泄露
在测试中Chekcpoint团队发现,OkCupid的API接口服务器api.OkCupid.com存在不当的CORS策略配置,可以导致跨源请求。Chekcpoint构造了origin为https://OkCupidmeethehacker.com的虚假请求源,向OkCupid API接口服务器api.OkCupid.com发起了GET请求:
可见,OkCupid API接口服务器api.OkCupid.com未恰当校验OkCupidmeethehacker.com的origin有效性,就做出了成功的响应,并且还在响应中返回了有效的Access-Control-Allow-Origin头消息:
Access-Control-Allow-Origin: https://OkCupidmeethehacker.com
Access-Control-Allow-Credentials: true
为此,Chekcpoint可以从其控制的域名OkCupidmeethehacker.com,向OkCupid API接口服务器api.OkCupid.com发起不受CORS限制的请求。比如,如果受害者是已经登录OkCupid相当应用服务,且经身份认证的用户,一旦浏览到攻击者架设的网站(如这里的https://OkCupidmeethehacker.com),就可用受害者身份(authentication token和user_id)向api.OkCupid.com发起请求https://api.OkCupid.com/1/native/bootstrap:
从api.OkCupid.com中我们还能发现更多有意思的数据:
以下为用受害者身份(user_id和access_token:)请求/profile/路径获得的受害者个人信息:
以及用受害者身份(user_id和access_token)请求/1/messages/路径获得的受害者所发信息:
总结
最近几年,随着在线社交交友APP应用的兴起,线下生活逐渐向线上数据转型成熟,尤其是在全球疫情期间,保持社交距离的新常态更让在线社交APP风靡流行。然而,在这些受欢迎的APP应用中,却存在着各种个人信息、隐私数据泄露的安全隐患,对隐私和数据安全的迫切需求已经变得尤为重要。
参考来源: