Mục lục
Lỗ hổng Path Traversal là gì?
Lỗ hổng web Path Traversal (còn được gọi là Directory Traversal) là một lỗ hổng bảo mật phổ biến trên các ứng dụng web. Lỗ hổng này cho phép kẻ tấn công truy cập vào các tệp tin và thư mục trên máy chủ web mà không được phép truy cập. Điều này có thể gây ra nhiều nguy hiểm cho hệ thống web và dữ liệu của người dùng.
Cơ chế hoạt động của lỗ hổng Path Traversal là kẻ tấn công sử dụng ký tự dot-dot-slash (“../”) để truy cập vào các thư mục cha của thư mục hiện tại. Khi kẻ tấn công thành công trong việc truy cập vào các thư mục cha, họ có thể tiếp tục truy cập vào các thư mục khác và thậm chí có thể truy cập vào các tệp tin quan trọng trên máy chủ web.
Mức độ nghiêm trọng | Rất nghiêm trọng |
Tỷ lệ phát hiện | Thường xuyên |
Phạm vi | Tất cả ứng dụng Desktop, Website, Mobile có thao tác với tệp tin và File |
Mức độ ảnh hưởng | Làm rò rỉ thông tin trong cơ sở dữ liệu (Tính bí mật – Confidenttiality) Tuỳ từng nghiệp vụ của ứng dung. Thông thường chỉ đọc và thực thi, không thay đổi nội dung của File. (Tính toàn vẹn – Integrity) Từ chối dịch vụ (Tính sẵn sàng – Availability) |
Hậu quả xấu nhất | Chiếm quyền toàn bộ máy chủ |
Khắc phục nhanh | Sanitize Filename Parameters |
Đường dẫn tuyệt đối và tương đối trong hệ điều hành
Khi đứng ở bất kỳ đâu trong hệ điều hành, chúng ta có thể sử dụng đường dẫn Tuyệt Đối (Absolute Path) của một File hoặc Directory. Nếu xét ví dụ dưới đây, chúng ta đọc file hello.txt thông qua đường dẫn /usr/bin/hello.txt.
Nếu chúng ta đang ở thư mục Music mà muốn đọc nội dung file hello.txt theo cách sử dụng đường dẫn Tương Đối (Relative Path). Chúng ta sẽ sử dụng ../../../usr/bin/hello.txt để lùi 3 cấp về thư mục / (root) của hệ điều hành Linux, sau đó từ đó mới bắt đầu tìm đến thư mục /usr/bin/hello.txt ban đầu.
- Trên Linux người ta sử dụng dấu / để phân cách các thư mục.
- Tuy nhiên trong Windows bạn có thể sử dụng đồng thời hai dấu \ hoặc /.
Tại sao lại có lỗ hổng File Path Traversal?
Hầu hết lỗ hổng File Path Traversal xuất hiện trong các chức năng liên quan tới việc xử lý các File hoặc Directory. Lập trình viên cho phép người dùng hoặc ứng dụng đưa tên file hoặc đường dẫn mà không loại bỏ các dấu chấm và gạch chéo “/”, “.”. Như đã giải thích ở phía trên, hai dấu này sẽ giúp chúng ta di chuyển qua lại các thư mục.
Một số chức năng trong Web hay xuất hiện lỗ hổng này:
- Download File
- Upload File
- Export
- Load Resources (Images, CSS, JS,..)
- Load Page (?menu=home, ?menu=about, ?page=home, ?page=search)
Cùng xét một ví dụ sau, trang web được thiết kế cho phép người dùng tải về các file báo cáo định dạng PDF thông qua đường dẫn download.php?file=report.pdf. Người dùng nhập vào tên file, hệ thống sẽ đi tìm file này ở đường đẫn /var/www/resource/report.pdf. Nếu file tồn tại, chương trình sẽ đọc nội dung file và trả nội dung đó về cho người dùng.
Do tham số file truyền vào qua phương thức HTTP GET không kiểm soát và loại bỏ các ký tự đặc biệt. Hacker có thể sử dụng đường dẫn tương đối để đọc nội dung file flag bằng cách sau ?file=../../../flag
Kẻ tấn công có thể tận dụng lỗ hổng này để truy cập vào các tệp tin quan trọng khác của hệ thống như /etc/passwd, /etc/hosts
Các biến thể của dot-dot-slash
Lập trình viên đôi khi sẽ áp dụng các bộ lọc ở dạng Blacklist Filter (Cấm những gì) hoặc Whitelist Filter (Cho phép những gì) để tăng mức độ bảo vệ. Các Hacker sẽ sử dụng các biến thể của dot-dot-slash được sử dụng để đánh lừa các bộ lọc để tiếp tục cuộc tấn công.
- Double Encoding: Kẻ tấn công sử dụng kỹ thuật mã hóa kép để mã hóa các ký tự đặc biệt và các dấu hiệu dot-dot-slash. Ví dụ, đối với đường dẫn “../file.txt”, kẻ tấn công có thể mã hóa dấu hai chấm “..” thành “%252e%252e” để tránh các bộ lọc và bảo vệ khỏi lỗ hổng Directory Traversal.
- Unicode Encoding: Kẻ tấn công sử dụng kỹ thuật mã hóa Unicode để mã hóa các ký tự đặc biệt và các dấu hiệu dot-dot-slash. Ví dụ, đối với đường dẫn “../file.txt”, kẻ tấn công có thể mã hóa dấu hai chấm “..” thành “%u002e%u002e”, để tránh các bộ lọc và bảo vệ khỏi lỗ hổng Directory Traversal.
- Nếu lập trình viên phát hiện “../” trong input, chương trình sẽ thực hiện việc xoá bỏ chuỗi đó. Nên hacker sẽ đưa vào …/./ để khi nó xoá thì còn lại chuỗi ../
What do you think?
It is nice to know your opinion. Leave a comment.