TL;DR

Hai nhà nghiên cứu @MianHIZB (Mian) và @bug_blitzer vừa công bố một lỗi Chrome cho phép bypass hoàn toàn SameSite=Strict - cơ chế bảo vệ CSRF mạnh nhất hiện có. Cách khai thác đơn giản đến bất ngờ: hacker dụ nạn nhân vào trang mục tiêu, nạn nhân ấn F12 để mở DevTools, và ngay lúc đó Chrome tự động gửi một cross-site POST kèm đầy đủ cookie xác thực. Lỗi đã được vá. Writeup đầy đủ tại Critical Research Lab.

Breaking SameSite=Strict in Chrome - Critical Thinking Bug Bounty

SameSite=Strict là gì và tại sao nó quan trọng

SameSite=Strict là thuộc tính cookie ngăn trình duyệt gửi cookie trong bất kỳ request cross-site nào - kể cả POST từ domain ngoài. Đây là hàng rào CSRF cứng nhất: ngay cả khi attacker dụ được user click vào form độc hại từ domain khác, browser sẽ từ chối đính kèm session cookie vào request đó.

Khi một site dùng SameSite=Strict, về lý thuyết không thể thực hiện CSRF. Đó là lý do đây là phát hiện đáng chú ý - lỗi này không nằm ở code ứng dụng mà nằm thẳng trong engine của Chrome.

Nguồn gốc kỹ thuật: mismatch tại Chromium network stack

Lỗi nằm trong file inspector_resource_content_loader.cc của Chromium. Cụ thể là sự không khớp giữa hai lớp:

  • RequestMode (Network Service layer): kiểm soát request được gửi đi đâu
  • FetchCacheMode (Blink layer): kiểm soát cache hay network access

DevTools Inspector Resource Content Loader mặc định dùng tổ hợp kNoCors + kOnlyIfCached. Đây là vi phạm Fetch spec - spec yêu cầu kOnlyIfCached phải được ghép với kSameOrigin, không phải kNoCors. Sự mâu thuẫn này tạo ra một kẽ hở: service worker của site mục tiêu nhận được request với mode sai, bỏ qua ràng buộc cache-only, và thực thi request trong origin context của site đó - kèm toàn bộ cookie SameSite=Strict.

Attack chain từng bước

  1. Attacker tạo trang độc hại chứa cross-site POST form hướng đến site mục tiêu
  2. Browser điều hướng nạn nhân đến trang mục tiêu (lúc này cookie bị chặn - bình thường)
  3. Nạn nhân mở DevTools bằng F12, Ctrl+Shift+I, hoặc chuột phải > Inspect
  4. DevTools kích hoạt Inspector Resource Content Loader với tổ hợp mode sai (kNoCors + kOnlyIfCached)
  5. Service worker của site mục tiêu nhận request, bỏ qua ràng buộc cache-only
  6. Request thực thi trong origin của site mục tiêu, đính kèm đầy đủ cookie SameSite=Strict
  7. POST body được replay với xác thực đầy đủ - CSRF thành công

Điều kiện tiên quyết: site mục tiêu phải có một service worker đã đăng ký - đây là điều kiện rất phổ biến trên các PWA và SPA hiện đại. Bất kỳ site nào cài sw.js để hỗ trợ offline hoặc push notification đều đáp ứng điều kiện này.

Social engineering ở đây không khó: attacker chỉ cần thuyết phục nạn nhân mở DevTools - ấn F12 để check lỗi, xem console, hoặc inspect element. Đây là thao tác quen thuộc ngay cả với người dùng bình thường khi được hướng dẫn bởi một trang support giả mạo hoặc một hướng dẫn kỹ thuật độc hại.

Ngoài F12, variant dùng Ctrl+U (view page source) cũng bị ảnh hưởng theo cơ chế tương tự, được ghi nhận riêng là Issue-470629629.

Mức độ nghiêm trọng và tác động thực tế

Chrome xếp lỗi này ở mức S3 - High, Priority P2. Với lỗ hổng này, attacker có thể thực hiện:

  • Thay đổi email/mật khẩu tài khoản nạn nhân
  • Chuyển tiền trên các ứng dụng fintech/banking
  • Chiếm quyền tài khoản hoàn toàn (account takeover)
  • Bất kỳ hành động nào yêu cầu xác thực trên site mục tiêu

Toàn bộ ứng dụng web hiện đại dùng service worker - tức PWA, SPA với offline support, hoặc bất kỳ site nào cài sw.js - đều nằm trong vùng ảnh hưởng nếu dùng SameSite=Strict làm lớp bảo vệ chính.

Chrome đã vá thế nào

Fix đơn giản nhưng hiệu quả: thay đổi default mode trong inspector_resource_content_loader.cc từ kNoCors sang kSameOrigin. Điều này đảm bảo service worker bị ràng buộc phục vụ response từ cache, không thể thực thi network request trong origin context của site.

Đây là một fix một dòng code nhưng đóng lại một lỗ hổng có thể bypass lớp bảo mật được hàng triệu developer tin tưởng.

Timeline & nguồn

Writeup được công bố ngày 06/05/2026 bởi Mian (@MianHIZB)@bug_blitzer trên Critical Research Lab - platform research của Critical Thinking Bug Bounty podcast. Lỗi đã được Chrome vá trước khi writeup được publish.

Nguồn: lab.ctbb.show, PortSwigger Web Security Academy.