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

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

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

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

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

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

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

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