Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 🔓 XML External Entity (XXE) – Lỗ hổng nguy hiểm nhưng thường bị xem nhẹ


    Trong quá trình kiểm thử bảo mật ứng dụng web, một trong những lỗ hổng xuất hiện khá nhiều nhưng lại ít được chú ý đúng mức là XML External Entity (XXE). Nếu không được cấu hình và xử lý đúng cách, XXE có thể cho phép attacker đọc file nội bộ, thực hiện SSRF, thậm chí dẫn đến RCE trong một số trường hợp đặc biệt.
    📌 1. XXE là gì?

    XXE (XML External Entity) là một lỗ hổng bảo mật xảy ra khi ứng dụng phân tích (parse) dữ liệu XML mà cho phép xử lý các external entity do người dùng kiểm soát.

    Trong XML, chúng ta có thể định nghĩa entity như sau:
    <!DOCTYPE foo [
    <!ENTITY xxe SYSTEM "file:///etc/passwd">
    ]>

    Nếu parser không được cấu hình an toàn, entity này sẽ được resolve và nội dung file nội bộ sẽ bị trả về trong response.

    👉 Vấn đề nằm ở việc parser XML cho phép tải tài nguyên bên ngoài (file nội bộ, URL HTTP, FTP, v.v.) mà không có cơ chế kiểm soát.
    ⚠️ 2. Tác động của XXE

    XXE không chỉ đơn thuần là đọc file. Tùy vào môi trường và cấu hình, nó có thể gây ra:

    🔎 2.1. Local File Disclosure

    Đọc file nhạy cảm:
    • /etc/passwd
    • web.config
    • source code ứng dụng
    • private key

    🌐 2.2. SSRF (Server-Side Request Forgery)

    Attacker có thể ép server gửi request đến:Điều này cực kỳ nguy hiểm trong môi trường cloud.
    💣 2.3. Denial of Service (Billion Laughs Attack)

    Tấn công bằng cách tạo entity lồng nhau:
    <!ENTITY a "1234567890">
    <!ENTITY b "&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;">

    Khi parser resolve, nó có thể tiêu tốn rất nhiều tài nguyên RAM và CPU → gây DoS.
    🔥 2.4. RCE (trong một số trường hợp)

    Trong các hệ thống cũ hoặc parser đặc biệt, XXE có thể kết hợp với các giao thức như expect:// để thực thi lệnh.
    🎯 3. Khi nào ứng dụng dễ bị XXE?

    Ứng dụng có nguy cơ cao nếu:
    • Sử dụng XML làm format input (SOAP API, SAML, XML-RPC…)
    • Không disable DTD
    • Dùng parser mặc định của:
      • PHP SimpleXML
      • Java DocumentBuilderFactory
      • Python lxml
      • .NET XmlDocument

    🛡️ 4. Cách phòng chống XXE

    ✅ 4.1. Disable DTD

    Ví dụ trong Java:
    factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
    ✅ 4.2. Disable external entity resolution

    Tắt:
    • external-general-entities
    • external-parameter-entities

    ✅ 4.3. Sử dụng thư viện an toàn
    • Dùng parser ở chế độ secure
    • Cập nhật framework mới nhất

    ✅ 4.4. Validate input & Content-Type
    • Chỉ chấp nhận JSON nếu không cần XML
    • Kiểm tra Content-Type
    • Không parse XML không cần thiết

    🧪 5. Cách phát hiện XXE khi pentest
    • Thử inject <!DOCTYPE>
    • Thử gọi file:///etc/passwd
    • Thử gọi http://127.0.0.1
    • Kiểm tra out-of-band (Burp Collaborator)

    📚 6. XXE trong thực tế

    XXE từng được liệt kê trong OWASP Top 10 (A4 – XML External Entities) năm 2017.

    Trong các phiên bản mới, XXE được gộp vào nhóm:
    • Security Misconfiguration
    • Insecure Design

    🧠 7. Kết luận

    XXE là một lỗ hổng:
    • ❗ Dễ xảy ra nếu cấu hình sai
    • ❗ Khó phát hiện nếu không test đúng cách
    • ❗ Nguy hiểm trong môi trường cloud và microservices
    Trong thời đại REST + JSON phổ biến, nhiều người nghĩ XXE không còn quan trọng. Nhưng trong hệ thống legacy, SOAP API, SAML authentication… XXE vẫn là một mối đe dọa thực sự.

    Nếu bạn đang học cybersecurity hoặc làm pentest, đừng bỏ qua lỗ hổng này – nó thường là “cánh cửa phụ” dẫn đến những lỗ hổng nghiêm trọng hơn như SSRF hoặc RCE.

    Click image for larger version

Name:	Rebuild-image-for-blog-1024x538.png
Views:	8
Size:	30.5 KB
ID:	438751
Working...
X