新年新氣象,我們會在FSRC公眾號發出焦點科技信息安全部工作過程中總結的經驗。分享內容不僅是漏洞分析,也包括運營、sdl、等保、自研工具等。只要與安全相關,我們都會整理並分享給大家,歡迎各位安全從業者關注。
Chrome 51 開始,瀏覽器的 Cookie 新增加了一個SameSite屬性,用來防止 CSRF 攻擊和用戶追蹤。
未來Chrome瀏覽器會默認為Cookie添加SameSite屬性,在跨站請求的情況下不允許跨站攜帶Cookie給後端,導致所有跨站場景下使用Cookie進行鑑權的服務會受到影響。
本文分析了一旦該屬性默認對所有升級到相應版本的用戶生效,可能對安全和業務產生的影響。
閱讀本文,你可以獲取如下信息:
SameSite的目的就是為了防止CSRF攻擊,在此稍微介紹下CSRF攻擊步驟便於理解:1.假設有個bank.com的銀行轉帳接口
POST /tans_money
Host: bank.com
cookie: secret=1ead41da1;
money={金額}&receiver={收款人}
攻擊者hack擁有一個域名hack.com,並構造hack.com/csrf.html,包含如下內容
<html>
...
<form action="https://bank.com/tans_money">
<input name="money" value="1000">
<input name="receiver" value="mkdd">
</form>
<script>document.forms[0].submit();</script>
...
</html>
此時如果受害者已經登錄了bank.com,然後被誘騙訪問了https://hack.com/csrf.html,就會附帶著Cookie發起一個給hack轉帳1000元的請求。
POST /tans_money
Host: balabalabank.com
cookie: secret=1ead41da1;
money=1000&receiver=mkdd
上面假設的案例便是一個典型的CSRF漏洞,利用方式是構造表單,將action值設置為存在漏洞的接口,然後誘導受害者訪問被植入表單的網頁,偷偷發起非受害者意願的請求。CSRF漏洞可用的構造方式如下:
表1 構造CSRF的方式
form標籤的action屬性GET/POST請求AJAXGET/POST請求img標籤的src屬性GET請求iframe標籤的src屬性GET請求a標籤的href屬性GET請求link標籤的href屬性GET請求SameSite的值可以設置為3種:
其中Strict最為嚴格,如果設置為Strict,上表的方式均無法附帶Cookie。Lax稍微寬鬆點,設置為Lax,會限制部分請求。當設置為None的時候表示關閉不啟用SameSite防護。3個可選值的影響羅列如下:
表2 SameSite值對請求方式的反饋
form標籤的action屬性,method為GET時不發送Cookie發送Cookie發送Cookieform標籤的action屬性,method為POST時不發送Cookie不發送Cookie發送CookieAJAX不發送Cookie不發送Cookie發送Cookieimg標籤的src屬性不發送Cookie不發送Cookie發送Cookieiframe標籤的src屬性不發送Cookie不發送Cookie發送Cookiea標籤的href屬性不發送Cookie發送Cookie發送Cookielink標籤的href屬性不發送Cookie發送Cookie發送Cookie<html>
<img src="https://www.focuschina.com/_img">
</html>
2. 將testss.html放在web目錄中本文中我把它放在localhost/testss.html下
3.瀏覽器訪問https://www.focuschina.com/使用控制臺設置一個Cookie,name=mkdd,後續我們只關注這個Cookie
4. 訪問localhost/testss.html,可以看到正常通過img標籤正常攜帶了這個Cookie5. 為name=mkdd這個Cookie設置一個Strict6. 訪問localhost/testss.html,發現此時已經不攜帶name=mkdd這個Cookie了7. 測試img標籤對應Lax的效果
把name=mkdd的SameSite值設置為Lax,對於img標籤也不會附帶Cookie,符合表2的情況
8.繼續測試GET型表單對應Lax效果
把name=mkdd的SameSite值設置為Lax(document.cookie="name=mkdd;SameSite=Lax;"),然後修改localhost/testss.html為如下內容
<html>
<form action="https://www.focuschina.com/_form" method="GET">
<input name="oobs" value="oobs">
</form>
<script>document.forms[0].submit()</script>
</html>
9. 訪問localhost/testss.html,發現已經攜帶了Cookie,符合表2中GET請求+Lax值為發送Cookie的情景本文中提到的相關資源已在網絡公布,僅供研究學習使用,請遵守《網絡安全法》等相關法律法規。
chrome文檔:
https://www.chromium.org/updates/same-site
Cookie 的 SameSite 屬性(阮一峰):
http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html
FSRC,願與你共同成長焦點科技漏洞提交網址:https://security.focuschina.com