歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

用瀏覽器緩存繞過同源策略(SOP)限制

來源:本站整理 作者:佚名 時間:2020-01-21 TAG: 我要投稿

本文分享的Writeup是作者在做Keybase.io的漏洞眾測中發現的SOP(同源策略)繞過漏洞,由于Keybase.io在用的多個API端點都啟用了CORS(跨域資源共享)機制,這種緩解同源策略的機制某種程度上克服了同源策略的嚴格限制,可以讓不同域服務器間實現交互請求。而作者在測試中發現了Keybase的CORS策略錯誤配置,利用這種缺陷,可以操縱瀏覽器緩存獲取用戶敏感數據信息。一起來看看。
Keybase 是一個開源的跨平臺即時通訊工具,在 PC 設備上支持 macOS、Linux 和 Windows 平臺,并提供 Chrome/Firefox 瀏覽器擴展。此外還提供 iOS 和 Android 版本。和眾多 IM 工具相比,Keybase 最吸引人的地方在于免費使用且不會受到任何廣告騷擾,最重要的是它還是一個開源項目。
在安全性和隱私方面,Keybase 采用了端到端的加密方式,承諾會為每個用戶的群組、文件和聊天等數據提供安全保護。如果這些數據上傳到云中,也會進行加密處理。
漏洞前言
Keybase在當前用戶向其他用戶發送加密消息時,可以讓當前用戶通過一個API接口去查找其他Keybase用戶,在該接口中提供了加密發送消息時所需的,如公鑰等其他Keybase用戶公共信息。這聽起來貌似是安全的,是吧?
該API接口的CORS(跨域資源共享)策略配置如下:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET
Access-Control-Allow-Headers: Content-Type, Authorization, Content-Length, X-Requested-With
Access-Control-Allow-Credentials: false
在了解這個CORS配置問題之前,我們先來厘清幾個重要的知識點:
1、Access-Control-Allow-Origin中的星號“*”說明,任意外部域名都能與該API進行交互,執行跨域的請求調用;
2、Access-Control-Allow-Credentials中的“false”說明, 這里可能出于安全考慮,服務器不允許用戶在跨域請求中包含代表身份信息的Cookie。此處Access-Control-Allow-Headers暴露的用戶認證頭信息和接下來要講的漏洞關系不大,因為在查詢上述API接口中用不到。
漏洞情況
自然地,由于上述那個可查詢的API接口是公共的,所以在進行跨域請求時無需攜帶防御CSRF(跨站請求偽造)的token信息,因為用戶在使用Keybase.io時是經過身份驗證的,且他的會話信息存儲在了Cookie中,只有一些非常敏感的API接口會要求在請求頭中攜帶用戶認證頭token。
后來我發現,如果在消息加密驗證和發送環節,用上述那個查找其他Keybase用戶的API來查找我自己,哪怕輸入我名字中的一個字母,搜索結果中就會匹配到我的一些賬戶信息,其中竟然包含了我的一些敏感信息,如:
郵箱地址
我使用和剩余的邀請碼數量
計費信息
上一次登錄的時間戳、郵件形式的時間/日期驗證碼
TripleDes加密的PGP私鑰
但是,我并沒有私鑰存儲在Keybase上啊,之后我才了解到這是Keybase的在2015到2016年的一個遺留功能,現在已經不再實施。
經測試,一旦我在上述API請求中Cookie信息被刪除,我的個人敏感信息也不會再返回顯示。但是,我在服務端對該API的響應消息中發現了一個名為 ‘Etag’ 的消息頭,這是一個瀏覽器緩存標記頭,代表客戶端請求資源未發生變化,那么瀏覽器就可以從用戶的緩存內容中去取出然后響應給用戶。
Payload與漏洞利用
我想起Twitter用戶@Bitk_曾用過一個技巧,那就是用javascript的fetch API方法去強制從瀏覽器緩存中直接發起一個跨域請求,而恰巧 Keybase 在這里未曾對服務端響應頭部署過任何緩存控制頭(Cache-Control)措施,于是,我就在本地構造了如下的Payload
html>
    script> 
    var url = "https://keybase.io/_/api/1.0/user/lookup.json?username={YOUR_USERNAME}"; 
    fetch(url, {   
        method: 'GET',   
        cache: 'force-cache'
        });
    script>
    html>
如果上述Payload請求能成功執行,可能就會返回響應一些Keybase的緩存信息,基于此,我執行了一個身份驗證請求,最終有效地返回了與我賬戶相關的一些個人敏感信息。如下:

為了確認Payload是否被成功執行,從下圖的瀏覽器請求信息中可以看到,fetch方法直接從瀏覽器緩存中讀取了我的身份信息。

漏洞上報及處理進程
2019.12.19   漏洞初報
2019.12.19   兩小時后,Keybase在響應消息中中加入了‘Cache-Control: no-store’
2019.12.24   Keybase獎勵了$1,500 公布漏洞
 

【聲明】:黑吧安全網(http://www.650547.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        安徽快3自由的百科 股票指数怎么看涨跌 福建22选5开奖软件 传统上海快三开奖结果 佛山股票配资公司 广东快乐十分开奖记录 广东十一选五当天计划 上证50指数成分股 贵州十一选五哪个软件好 股票基本入门知识 广西十一选五走势玩法