Khi thực hiện upload file trên các hệ thống web, có nhiều lỗi bảo mật có thể xảy ra nếu không có các biện pháp bảo vệ thích hợp. Dưới đây là một số lỗi bảo mật phổ biến và phương pháp phòng chống:
Hacker có thể upload các file có định dạng không mong muốn như .php, .jsp, .exe để thực hiện mã độc.
Có thể gây quá tải cho hệ thống, dẫn đến từ chối dịch vụ (DoS).
Lưu trữ file ở các thư mục có thể truy cập công khai, tạo điều kiện cho hacker thực hiện tấn công.
File có thể chứa mã độc hoặc các nội dung không an toàn khác.
Đặt tên file với các ký tự đặc biệt có thể dẫn đến tấn công Path Traversal hoặc Remote Code Execution.
Có nhiều trường hợp đã xảy ra khi hacker lợi dụng lỗ hổng bảo mật trong quá trình upload file để tấn công hệ thống. Dưới đây là một số ví dụ nổi bật:
Nhiều plugin của WordPress đã từng bị phát hiện lỗ hổng liên quan đến việc upload file, như:
Drupal: Năm 2018, lỗ hổng trong hệ thống upload file của Drupal đã bị khai thác để upload và thực thi mã độc, từ đó chiếm quyền kiểm soát hệ thống.
Dropbox: Năm 2011, lỗ hổng trong hệ thống của Dropbox cho phép hacker upload file với mã độc, gây nguy hại cho người dùng tải xuống.
US Voter Database: Năm 2017, một lỗ hổng upload file trong hệ thống đăng ký cử tri của một số bang ở Mỹ cho phép hacker upload mã độc để truy cập dữ liệu cá nhân của cử tri.
Magento: Năm 2016, lỗ hổng trong nền tảng e-commerce Magento cho phép hacker upload file mã độc, từ đó chiếm quyền kiểm soát cửa hàng trực tuyến.
vBulletin: Năm 2019, lỗ hổng trong phần mềm forum vBulletin cho phép upload file mã độc, từ đó chiếm quyền kiểm soát diễn đàn.
Hacker sẽ tìm kiếm các trang web hoặc ứng dụng web có chức năng upload file nhưng không có kiểm tra chặt chẽ về định dạng file, MIME type, hoặc phần mở rộng file.
Hacker tạo một file chứa mã độc, ví dụ file .php với nội dung:
<?php // File độc hại PHP system($_GET['cmd']); ?>
Hacker sử dụng chức năng upload file của trang web để upload file PHP độc hại này.
Nếu file được upload thành công và lưu trữ tại vị trí có thể truy cập công khai, hacker sẽ truy cập vào file thông qua URL, ví dụ: http://example.com/uploads/malicious.php?cmd=whoami
Lệnh whoami sẽ được thực thi trên máy chủ, và kết quả sẽ được trả về cho hacker, cho phép họ biết được thông tin về hệ thống.
Chỉ cho phép upload các định dạng file cần thiết và an toàn (ví dụ: .jpg, .png, .pdf).
Đặt giới hạn kích thước file tối đa mà hệ thống có thể chấp nhận để tránh quá tải.
Lưu trữ file ở thư mục không công khai, có quyền truy cập hạn chế.
Sử dụng các công cụ kiểm tra mã độc hoặc nội dung không an toàn trong file trước khi lưu trữ.
Đổi tên file trước khi lưu trữ để tránh các vấn đề liên quan đến ký tự đặc biệt và xung đột tên.
Sử dụng các công cụ bảo mật như tường lửa ứng dụng web (WAF) để giám sát và ngăn chặn các tấn công từ phía upload file.
Kiểm tra MIME type của file để đảm bảo file có định dạng hợp lệ trước khi cho phép upload.
Loại bỏ các metadata không cần thiết hoặc nguy hiểm có thể có trong file.
Phát hiện và ngăn chặn các file có phần mở rộng kép như file.php.jpg.
Hạn chế quyền truy cập của thư mục chứa file upload, chỉ cho phép quyền ghi (write) và không cho phép thực thi (execute).