*本文中涉及到的相關漏洞已報送廠商並得到修復,本文僅限技術研究與討論,嚴禁用於非法用途,否則產生的一切後果自行承擔。
Uber前不久終於開放了它的漏洞獎勵計劃,並鼓勵白帽子門展開對Uber在線服務的漏洞挖掘。請隨着FreeBuf小編一起,來看看這幾個邏輯漏洞形成的“組合拳”。
信息收集
首先我們先查看了Uber公司授權檢測的目標。可以發現要檢測的範圍還是很廣的,基本包含了Uber公司全部的在線服務。
https://*.uber.com/
http://*.uberinternal.com/
http://petition.uber.org
http://ubermovement.com
iPhone Rider Application
iPhone Partner Application
Android Rider Application
Android Partner Application
首先我先對uber的主域名做了一個暴力枚舉。這一步主要是收集Uber公司域名下的全部二級域名信息。掃描到了幾個開放的二級域名後,我又使用Nmap對全部的二級域名列表做掃描,主要是查看這些二級域名的網頁標題,頁面內容等。
先對Uber的APP進行反編譯,然後又用MobSF來對Uber的APP做一個安全監測。
以上收集的這些信息已經足夠我們做一個常規的安全監測。
漏洞挖掘
枚舉優惠價代碼
凡是使用Uber的人都知道Uber運行用戶輸入優惠券來抵押一部分車費,我查看了riders.uber.com後發現,這個頁面上有一個付款界面。在付款界面裏面又有一個優惠券代碼的API接口。在實際測試過程當中我發現Uber公司並沒有對這個API接口採取一些防枚舉措施,這樣導致黑客可以無限枚舉優惠券代碼。
在實際枚舉的過程當中我們發現以下三個返回數據包的長度代表不同的含義
如果數據長度是1951,那麼說明優惠券是有效的
如果數據長度是1931 ,那麼說明優惠券並不存在
如果數據長度是1921 ,那麼說明優惠券已經過期
並且Uber公司允許用戶自定義自己的優惠碼,凡是自定義的優惠碼開頭都會有一個uber字樣,這樣導致黑客可以枚舉出超過1000個優惠券代碼。
除了優惠券代碼的枚舉以外,我們還發現Uber公司之前推出的ERH優惠券代碼可以重複添加。這個優惠券代碼有100美元,原本已經被其他人使用過了,但是在枚舉的過程當中我們發現不管這個代碼有沒有被使用過,只要你枚舉到都可以使用。
然後我們聯繫了Uber公司,把這個漏洞提交給他們。
2016年3月23日 – 漏洞上報給Uber公司
2016年3月23日 – Uber開始審閱漏洞
2016年3月24日 – 我們更新了漏洞詳情
2016年3月24日 – Uber公司繼續審閱漏洞
2016年4月19日 – Uber公司已經修復漏洞
2016年5月2日 – Uber公司支付賞金
使用UUID查看用戶註冊郵箱
在下方的圖片我們可以看到這是Uber APP上的一個幫助功能。不過說實話,我們大部分人從來都不會用這個東西,就算知道它一直存在也不會去點。但是我們不用不代表一些少部分的人不會去用。
如果你用這個東西向Uber公司發送一些幫助請求,它就會回覆你“我們已經收到您的請求,我們將會盡快的聯繫你通過<你的註冊郵箱>這個郵箱。”
通過分析這個請求的數據包後我們發現有兩個參數決定了我們是否可以查看他人的郵箱,這兩個參數分別爲x-uber-uuid和uuid。通過對Token參數的fuzz,然後改變UUID爲其他人的,之後你就可以收到別人的郵箱號了。
你也許有疑問我們是怎麼獲得這個UUID的?UUID那麼長,很難枚舉到。這個我們後面再解釋。
2016年3月31日 – 漏洞上報給Uber
2016年3月31日 – Uber開始審閱漏洞
2016年4月11日 – Uber開始修復漏洞
2016年4月13日 – Uber公司支付賞金
枚舉用戶ID和電話號碼
我們一直在嘗試尋找Uber公司的漏洞,但是這些漏洞往往很難發現和利用。所以我們決定用APP和WEB分別叫一次Uber。在使用的過程當中,我們截獲了全部的請求,並且發現了一些有意思的東西。
當一個Uber用戶嘗試平攤自己打車的費用的時候,Uber的APP會讀取該用戶的通訊錄,並且區分出誰註冊過Uber,而返回的數據包中包含了太多的信息,比如Uber司機的UUID,用戶的UUID等。我們可以在這個請求的數據包中對電話號碼進行枚舉,隨後就可以得到大批的UUID。我們就是通過這個方法來獲取到UUID的!
但是不幸的是,當我們提交這個漏洞時Uber官方說漏洞提交重複了。有人在我們之前提交了這個漏洞。
2016年4月6日 – 漏洞上報給Uber
2016年4月7日 – Uber需要更多信息關於此漏洞
2016年4月7日 – 我們更新了漏洞的信息
2016年4月7日 – 漏洞提交重複,已經有人上報此漏洞
使用Uber司機APP並且無需激活
每個Uber賬戶都可以申請成爲Uber司機,但是需要提供駕照信息,並且經過Uber官方的審覈。但是我們發現一個方法可以繞過這個審覈。如果你的Uber司機賬戶沒有通過Uber官方的審覈,那麼你是無法使用Uber司機APP的。
這裏有一個參數是allowNotActivated,如果你的賬戶未被激活,那麼參數的值是false。
然後我們嘗試把allowNotActivated中的false改成true,結果沒想到我們成功的得到了Uber司機APP的訪問權限。然而此時此刻我們測試的那個司機賬戶還未經過Uber官方的審覈。
你可以看到我們成功訪問的Uber司機的APP界面。
但是當我們提交這裏漏洞時已經被Uber官方通知爲漏洞重複提交。
2016年3月31日 – 漏洞上報給Uber官方
2016年3月31日 – Uber詢問更多的漏洞細節
2016年3月31日 – 我們對漏洞細節進行補充
2016年4月7日 – Uber把該漏洞定義爲重複提交,已經有人提交過該漏洞。
通過UUID查看Uber司機的歷史旅程
Uber APP有一個新的功能叫做waybill。然而我們發現通過這個服務發送的數據包結合Uber司機的UUID,我們就可以知道這個司機上一次的行程信息。
但是我們是怎麼獲得Uber司機的UUID的呢?很簡單,你先叫一次Uber服務,在司機接單後你取消這個訂單,並且在取消訂單的過程中抓包。在捕獲的數據包裏面就有Uber司機的UUID。不僅如此,這個返回的數據包裏面還包含着這個Uber司機上一次的行程信息,比如從哪裏開始接單的,車上的乘客姓名,乘客數量和乘客要去的地方等。這些都在這個數據包裏面。
然後再把這個waybill填寫上去,你就可以看到這個司機的車牌號,車的型號,司機姓名,駕駛路線等信息。
2016年3月31日 – 上報漏洞給Uber公司 2016年4月1日 – Uber公司開始審覈漏洞 2016年4月13日 – Uber公司開始修復漏洞 2016年4月18日 – Uber公司支付賞金
越權查看他人行程信息
是否還記得第三個漏洞?我們通過僞造他人的UUID來獲得他們的註冊郵箱地址。
下面這個數據包截圖是用戶查看自己的行程的請求數據包。請注意查看這個數據包中紅方框的信息,有木有一種很熟悉的感覺?沒錯,那個就是UUID。
當我們把這個UUID替換成其他人的UUID,返回的數據包中就包含他人的行程信息。
2016年3月31日 – 上報漏洞給Uber 2016年3月31日 – Uber開始審覈漏洞 2016年4月5日 – Uber開始修復漏洞 2016年4月13日 – Uber發放賞金
註明:已經查過水錶了!