利用短信劫持Facebook帳號
這篇文章將演示一個簡單的漏洞。利用這個漏洞,無須用戶交互即可獲取任意Facebook帳號的完全控制權。請看下文。
Facebook允許你將自己的手機號與帳號進行關聯。這讓你可以通過短信接收更新信息,同時也意味著你可以通過手機號而不是郵件地址進行登錄。
漏洞位于“/ajax/settings/mobile/confirm_phone.php”。它接受多個參數,但其中有兩個最重要:一個是發送到手機上的驗證碼,一個是profile_id,就是手機號碼的關聯賬戶。
關鍵問題是,雖然profile_id應該設置為你自己的帳號(顯而易見的),但把它修改為目標帳號的值竟不會引起任何錯誤。
為了利用這個漏洞,我們首先給Facebook在英國的短信服務號32665發送字母F。在回復的短信中,我們可以獲取8個字符的驗證碼。

我們把這個驗證碼輸入到密碼框中(在這里),并且修改fbMobileConfirmationForm表單中的profile_id元素。

請求提交后會返回成功(HTTP 200)。你會發現__user(與AJAX請求一起發送)的值與我們修改的profile_id不同。

注意:提交這個請求后,你也許不得不重新認證,但是要填寫的密碼是你自己的,而不用填目標帳號的。
然后你會收到認證成功的短信。

現在,針對已登錄的用戶,我們可以提交一個重置密碼的請求,并設置通過短信獲取重置驗證碼。

隨后你會收到一條新短信,里面有重置驗證碼。

我們把這個驗證碼填入表單中,換一個新密碼,這樣我們就完成了整個過程。這個帳號已經被我們控制了。

修復方案
Facebook不再接受用戶提交的profile_id變量。
漏洞處理
2013.05.23 – 漏洞反饋給了Facebook
2013.05.28 – Facebook確認了該漏洞
2013.5.28 – 問題被修復
注意
這個漏洞的獎金高達2萬美元,這也反應了問題的嚴重性。