Danh mục OWASP: MASVS-CODE: Chất lượng mã
Tổng quan
Kỹ thuật chèn thực thể bên ngoài XML (XXE) là một cuộc tấn công vào các ứng dụng phân tích cú pháp dữ liệu đầu vào XML. Cuộc tấn công XXE xảy ra khi một trình phân tích cú pháp XML được định cấu hình yếu xử lý đầu vào XML không đáng tin cậy có tham chiếu đến một thực thể bên ngoài. Cuộc tấn công này có thể được dùng để triển khai nhiều sự cố, bao gồm cả việc từ chối dịch vụ, truy cập vào hệ thống tệp hoặc đánh cắp dữ liệu.
Tác động
Khi phân tích cú pháp một tài liệu XML, ứng dụng có thể xử lý mọi DTD (Định nghĩa loại tài liệu, còn gọi là thực thể bên ngoài) có trong tài liệu. Kẻ tấn công có thể khai thác hành vi này bằng cách chèn mã độc dưới dạng DTD. Sau đó, mã này có thể truy cập vào các phần của hệ thống tệp của thiết bị, chỉ ứng dụng mới có thể truy cập và có thể chứa dữ liệu nhạy cảm. Hơn nữa, mã độc hại này có thể đưa ra các yêu cầu từ thiết bị, có khả năng bỏ qua các biện pháp bảo mật chu vi.
Cuối cùng, nếu ứng dụng mở rộng các DTD, thì điều này có thể tạo ra một tình huống có nhiều lần lặp lại các thực thể được tham chiếu, làm cạn kiệt tài nguyên của thiết bị và dẫn đến trường hợp từ chối dịch vụ.
Giải pháp giảm thiểu
Tắt DTD
Cách an toàn nhất để ngăn chặn XXE là luôn vô hiệu hoá hoàn toàn DTD (các thực thể bên ngoài). Tuỳ thuộc vào trình phân tích cú pháp đang sử dụng, phương thức này có thể tương tự như ví dụ sau cho thư viện Trình phân tích cú pháp kéo XML:
Java
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
Việc vô hiệu hoá DTD cũng giúp trình phân tích cú pháp chống lại các cuộc tấn công từ chối dịch vụ. Nếu không thể tắt hoàn toàn DTD, thì bạn phải tắt các thực thể bên ngoài và khai báo loại tài liệu bên ngoài theo cách dành riêng cho từng trình phân tích cú pháp.
Do có nhiều công cụ phân tích cú pháp XML trên thị trường, nên cách ngăn chặn các cuộc tấn công XXE sẽ khác nhau tuỳ theo công cụ. Bạn có thể cần tham khảo tài liệu về công cụ để biết thêm thông tin.
Thực hiện việc dọn dẹp dữ liệu đầu vào
Bạn nên định cấu hình lại ứng dụng để không cho phép người dùng chèn mã tuỳ ý vào phần mở đầu của tài liệu XML. Việc này phải được xác minh phía máy chủ, vì có thể bỏ qua chế độ kiểm soát phía máy khách.
Sử dụng một thư viện khác
Nếu không thể định cấu hình thư viện hoặc phương thức được sử dụng theo cách an toàn, bạn nên cân nhắc sử dụng một thư viện hoặc phương thức khác. Cả Trình phân tích cú pháp tệp XML và Trình phân tích cú pháp SAX đều có thể được định cấu hình một cách an toàn, không cho phép các DTD và thực thể.
Tài nguyên
- OWASP XXE
- Bản tóm tắt về biện pháp ngăn chặn OWASP XXE
- Hằng số XML: FEATURE_SECURE_PROCESSING
- Trình phân tích cú pháp kéo XML
- Trình phân tích cú pháp SAX