What Are File Upload Vulnerabilities?
Là các lỗ hổng xảy ra khi máy chủ cho phép người dùng tải tập tin lên hệ thống tập tin mà không thực hiện validate các thuộc tính và nội dung của tập tin.

What is the Impact of File Upload Vulnerabilities?
Sự ảnh hưởng của các lỗ hổng upload tập tin dựa trên 2 yếu tố:
- Khía cạnh nào của tập tin không được validate đúng cách: tên tập tin, loại tập tin, kích thước tập tin, …
- Tên tập tin: attacker có thể ghi đè những tập tin quan trọng. Ngoài ra, nếu server có lỗ hổng path traversal thì attacker còn có thể upload tập tin lên những đường dẫn tùy ý.
- Loại tập tin: nếu server cho phép một số loại tập tin chẳng hạn như
.phphoặc.jspđược thực thi thì attacker có thể upload web shell1 để thực hiện RCE. - Kích thước tập tin: attacker có thể tấn công DoS bằng cách tải lên tập tin có kích thước lớn nhằm làm đầy không gian lưu trữ của server.
- Các ràng buộc được áp dụng lên tập tin sau khi nó được tải lên.
How Do Web Servers Handle Requests for Static Files?
Quá trình xử lý request đến tập tin tĩnh diễn ra như sau:
- Phân tích đường dẫn của tập tin ở trong request để xác định loại tập tin dựa trên mapping giữa phần mở rộng của tập tin và MIME type.
- Nếu tập tin không thực thi được: server sẽ gửi nội dung của tập tin cho client thông qua response.
- Nếu tập tin có thể thực thi được thì sẽ xảy ra 2 trường hợp:
- Server được cấu hình để thực thi loại tập tin này: nó sẽ thực thi và trả về kết quả cho client thông qua response.
- Server không được cấu hình để thực thi loại tập tin này: nó sẽ trả về lỗi cho client thông qua response. Tuy nhiên, trong một số trường hợp, nội dung của tập tin có thể được gửi cho client dưới dạng plain text.
Uploading Files Using PUT
Một số server cho phép sử dụng PUT request để upload tập tin, kể cả khi nó không khả dụng thông qua giao diện của trang web:
PUT /images/exploit.php HTTP/1.1
Host: vulnerable-website.com
Content-Type: application/x-httpd-php
Content-Length: 49
<?php echo file_get_contents('/path/to/file'); ?>How to Prevent File Upload Vulnerabilities
Để phòng chống các lỗ hổng liên quan đến việc upload tập tin, ta có thể:
- Kiểm tra phần mở rộng của tập tin sử dụng whitelist thay vì blacklist.
- Đảm bảo tên tập tin không chứa các chuỗi con mà có thể được xem như là một thư mục hoặc chuỗi traversal (
../). - Đổi tên tập tin được tải lên nhằm tránh việc đụng độ và ghi đè tập tin.
- Không upload tập tin lên hệ thống tập tin vĩnh cửu của server khi nó chưa được validate đầy đủ.
- Nếu có thể, sử dụng các framework để xử lý tập tin thay vì tự viết cơ chế validate tập tin.
Resources
Footnotes
-
web shell là các đoạn script độc hại cho phép attacker có thể thực thi các câu lệnh tùy ý ở trên web server thông qua các HTTP request. ↩