當前位置:
首頁 > 新聞 > OAuth授權不當導致的Twitter私信讀取漏洞($2,940)

OAuth授權不當導致的Twitter私信讀取漏洞($2,940)

想像一下這種場景,當你初次用Twitter服務,登錄其附屬或授權的第三方app應用時,Twitter會按慣例執行OAuth授權驗證,如以下這個界面。仔細查看查看,可以看到,Twitter應用會列出在授權登錄之後,其會進行(will be able to)和不會執行(will not be able to)的操作。而在其不會執行的操作中,它清楚地列出了:不會讀取用戶的推特私信(Direct Messages)。真是這樣的嗎?


但實際是,如果你點擊 Authorize app之後,你的推特私信(Direct Messages)將會被Twitter完全讀取,和你個人相關的私信聊天內容,如性別、段子笑話、表情包等等將會被Twitter收集得到,從而導致個人信息間接泄露,非常悲劇!換句話說,Twitter附屬或其第三方app應用服務,是有許可權讀取用戶推特私信(Direct Messages)內容的,也就是說,我們用戶完全被Twitter欺騙了!怎麼會像這樣呢?一起來聽聽漏洞發現者Terence Eden的驗證和闡述。

漏洞原因


2013年,Twitter官方應用app的用戶接入 OAuth授權API 相關私鑰(key)和密碼(secrect)遭到泄露,被人放到了Github上,這些API密鑰信息都用於Twitter官方應用,如Twitter for Android、Twitter for iPhone、Twitter for Google TV、TweetDeck等app的用戶接入授權驗證。


這種信息泄露導致的問題就是,一些未被Twitter官方認證的第三方app應用可以用這些密鑰信息實行假冒,接入Twitter官方應用API。


為了防止第三方app獲取這些密鑰並使用它們將用戶直接重定向到app應用中,Twitter作了 「callback address restrictions」(回調地址限制)的設置,也就是說,這個回調地址會在app配置中要求用戶輸入一個預先設定的URL地址,告訴用戶,當用戶用Twitter賬號密碼登錄app之後,將會被重定向到這個URL鏈接頁面,這個URL鏈接對用戶來說,相當於登錄後的重定向跳轉。

另外,Terence Eden還強調,針對一些用戶直接無法訪問或嵌入web瀏覽器的app應用,像命令行應用、嵌入式系統、遊戲控制端或某些類型的移動app,Twitter對這些應用的驗證授權相對困難,為此,Twitter推出了一種替代性的次要解決方案,那就是使用PIN碼驗證,用戶使用Twitter賬號密碼登錄這些應用後,跳出的不是直接的回調頁面(callback url,),而是一個需要進一步驗證的7位數PIN碼。之後,用戶在其app應用中輸入這個PIN碼作為oauth_verifier,之後即可在後台得到一個access_token,以此繼續使用app。在這個PIN驗證過程中,Twitter並沒有顯示出恰當的驗證後許可權信息,為此可能會對用戶造成誤導。


總結來說,漏洞發現者Terence Eden對該漏洞有以下幾方面的理解:



1.2013年,遭到泄露的Twitter官方應用app用戶接入授權API密鑰信息,現在仍可被利用;


2.Twitter官方應用和一些其它第三方應用利用這些授權API密鑰信息進行OAuth授權,提示界面明確指出「不會讀取用戶推特私信」,但實際上,這些應用是能讀取到用戶的推特私信(Direct Messages)內容的;


3.未經Twitter認證的其它第三方應用,在授權接入Twitter API時,會被要求輸入一個7位數PIN碼,用戶按照指示輸入後,並未顯示完整的Twitter具備許可權,對用戶造成誤導。


PoC


針對該漏洞的以上理解,Terence Eden給出了以下驗證性代碼,並稱在點擊Authorize app授權,並輸入PIN碼後,能讀取並列印出自己的推特私信內容:

#!/usr/bin/env pythonimport tweepy# Official Keysconsumer_key    = "IQKbtAYlXLripLGPWd0HUA"consumer_secret = "GgDYlkSvaPxGxC4X8liwpUoqKwwr3lCADbz8A7ADU"# Set up the authorisationauth = tweepy.OAuthHandler(consumer_key, consumer_secret)auth.secure = Trueauth_url = auth.get_authorization_url(//img.ifuun.com/getimg.php?url=)print "Visit this URL and authorise the app to use your Twitter account: " + auth_url# The above URL says that there"s no access to DMsverifier = raw_input("Type in the generated PIN: ").strip()auth.get_access_token(verifier)# Full Authfull_auth = tweepy.OAuthHandler(consumer_key, consumer_secret)full_auth.set_access_token(auth.access_token, auth.access_token_secret)api = tweepy.API(full_auth)# Print all the user"s Direct Messagesprint api.direct_messages()

漏洞修復和總結


針對該漏洞,重點在於以上代碼可讀取並列印出自己的推特私信內容,因此Twitter一開始和Terence Eden進行了積極溝通,並認為他們關注的是,第三方app應用程序是否可能在未經用戶同意的情況下訪問用戶數據。另外,Twitter說明,其 Twitter for iOS 和 Twitter for Android 沒有顯示用戶同意對話框的原因在於,因為OAuth是一個基本的技術細節,而不是一個授權認證會話的批准過程。Twitter還聲稱,他們已經取消Twitter for Google TV 的應用,並將會審查其它第三方app應用,以確定是否有任何app有可能訪問他們未被授權訪問的數據。

但是,最終待漏洞完全披露後,Twitter的態度有了轉變,其在漏洞總結中聲稱:



漏洞上報者所說的使用PIN碼或非預期OAuth流驗證機制,我們認為並不會對用戶造成誤導,另外,我們也不認為用戶數據會被Twitter for iPhone 或 Twitter for Google TV 在未授權情況下讀取,而且據目前情況來看,沒有任何Twitter用戶因此漏洞遭受個人隱私信息泄露。


呵呵……但好在最終該漏洞,Twitter還是獎勵了Terence Eden $2,940,漏洞原因被HackerOne定義為隱私侵犯。Terence Eden表示,雖然該漏洞很難被攻擊者利用,但是,這是一種對用戶隱私的欺騙和漠視。尤其是在現今GDPR(通用數據保護條例)的前提下,大公司更應該做出良好典範。

漏洞上報進程



2018-11-06 通過HackerOne上報漏洞;


2018-11-06 提供更多技術性說明和POC代碼;


2018-11-15 因美國假期原因,漏洞披露被推後;


2018-11-16 Twitter獎勵了$2,940美金;


2018-12-06 Twitter修復了漏洞;


2018-12-14 發表這篇文章。


*參考來源:

shkspr

threatpost

hackerone

,clouds編譯,轉載請註明來自FreeBuf.COM


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

淺談php表單安全中Token的實際應用
FortiAppMonitor:用於監控macOS上的系統活動的強大工具

TAG:FreeBuf |