I. What is XML external entity injection?
-
XXE là một lỗ hổng web cho phép attacker can thiệp vào
việc xử lý dữ liệu XML của ứng dụng. Nó thường cho phép attacker xem
các files trong sever hệ thống và tương tác với bất kỳ BE hoặc hệ
thống bên ngoài mà ứng dụng mà nó có thể truy cập.
-
Trong một vài trường hợp, attacker có thể leo thang 1
cuộc tấn công XXE thành việc thỏa hiệp với BE bằng cách tận dụng XXE
để thực hiện SSRF.
II.
How do XXE vulnerablities arise?
- Một vài ứng dụng sử dụng XML để chuyển dữ liệu giữ browser và server. Các ứng dụng này hầu như (virtually) luôn luôn sử dụng một thư viện chuẩn hoặc nền tẳng API để xử lý dữ liệu XML trên server. Các lỗ hổng XXE xuất hiện do đặc tả XML chứa các tính năng nguy hiểm khác nhau và trình phân tích cú pháp tiêu chuẩn vẫn hỗ trợ các tính năng năng này ngay cả khi chúng không được sử dụng một các bình thường.
2.
What is XML?
-
XML là là ngôn ngữ đánh dấu mở rộng, được thiết kế
với mục đích lưu trữ, truyền dữ liệu sao cho cả người và máy đều
có thể đọc được.
-
Bản chất là sử dụng các thẻ xác định cấu trúc tài
liệu cũng như cách tài liệu được lưu trữ, đọc và vận chuyển

3.
What are XML entities?
a.
DTD
-
Document type definitions: dùng để định nghĩa loại tài
liệu thông qua việc xác định cấu trúc cũng như chỉ ra format hợp lệ
của các phần tử và thuộc tính trong file xml.
b.
DTD entity
c.
External Entity
i. Denial of service
ii. File Disclosure
iii. SSRF
III. What are types of XXE attacks
-
Có rất nhiều kiểu tấn công XXE khác nhau như:
·
Exploit XXE to retrieve files: Khai thác vào những nơi mà
thực thể bên ngoài được định nghĩa, chứa nội dung của các file và
trả về trong response.
·
Exploiting XXE to perform SSRF attacks: Khai thác vào nơi
mà thực thể ngoại được định nghĩa dựa trên URL tới một hệ thống BE
·
Exploiting blind XXE exfiltrate data out-of-band: khai thác
vào nơi có các dữ liệu nhạy cảm được vận chuyển từ server tới 1 hệ
thống mà attacker điều khiển
·
Exploiting blind XXE to retrieve data via error messages:
Attacker có thể kích hoạt một thông báo lỗi chứa thông tin nhạy cảm.
IV.
Exploiting XXE to retrieve files
-
Để thực hiện tấn công XXE truy vấn một file bất kỳ
từ filesystem của server, cần phải thay đổi XML theo 2 cách:
·
Introduce (or edit) a
DOCTYPE element that defines an external entity containing the path to the
file.
·
Edit a data value in the XML that is returned in the
application's response, to make use of the defined external entity.
Lab 1: Exploiting XXE using
external entities to retrieve files
Ø
Mô tả bài lab: Trong bài lab này có một chức năng “Check
Stock” chứa chức XML input và trả
về giá trị trong response. Nhiệm vụ vủa bài này là truy cập được
đến /etc/passwd.
Ø
Các bước thực hiện:
Ø
Thực hiện chức năng checkstock ta được POST request chưa
XML. Thực hiện chèn payload <!DOCTYPE foo [ <!ENTITY xxe SYSTEM
"file:///etc/passwd"> ]> vào
sau thẻ xml và đổi external entity thành xxe
Ø
Và đây là response trả vể => Done!!!
P Anh ơi em chưa
hiểu cái payload <!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> Anh giải thích
cụ thể cho em với ạ !!!
V.
Exploiting XXE to perform SSRF attacks
-
Để khai thác XXE cho SSRF, cần phải định nghĩa một
external XML entity sử dụng URL mà bạn muốn đi tới và sử dụng một
entitry đã được định nghĩa với giá trị dữ liệu. Sau đó xem response
từ URL trong ứng dụng đó và tương tác hai chiều với hệ thống BE. Nếu
không bạn có thể thực hiện blind SSRF
attacks.
Lab2: Khai thác XXE đẻ
thực hiện SSRF attacks
Ø
Mô tả bài lab: Server đang chạy một endpoint ảo (EC2 metadata)
tại url mặc định http://169.254.169.254/ . Endpoint này có thể sử dụng
để truy vấn dữ liệu instance, một trong số chúng có thể là thông tin
nhạy cảm. Để làm bài lab này, hãy khai thác lỗ hổng XXE để thực
hiện một cuộc tấn công SSRF để thu được secret access key của server từ
EC2 metadata endpoint
P Em có tìm hiểu
nhưng chưa rõ lắm về cái EC2 metadata endpoint, anh có thể giải thích
cho em được không ạ !
Ø
Thực hiện bài lab:
VI.
Blind XXE vulnerabilities
-
Rất nhiều thể hiện của XXE không thể nhìn thấy: Tức
là các ứng dụng không trả về giá trị của bất kì khai báo external
entities trong response, vì vậy việc truy vấn trực tiếp server-side là
không khả thi.
-
Blind XXE vẫn có thể nhận dạng và khai thác, nhưng
với các kĩ thuật cao hơn. Bạn có thể sử dụng out – of – band để tìm
lỗ hổng và khai thác chúng để lấy exfiltrate data (dữ liệu trái
phép).
·
Cũng có thể kích hoạt các lỗi cú pháp XMl để có
thể đọc các thông tin nhạy cảm có thể có trong thông báo lỗi.
VII.
Finding hidden attack surface for XXE injection
1.
XInclude attacks
2.
XXE attacks via file upload
3.
XXE attacks via modified content type
VIII.
How to find and test for XXE vulnerabilities