Phân tích cách khai thác lỗ hổng Wget – CVE 2014-4877
Trong những ngày qua một lỗ hổng trong GNU Wget trên các hệ thống Linux mới được phát hiện bởi Rapid7. CVE 2014-4877 được đánh giá là một lỗ hổng nghiêm trọng vì Wget hầu như có mặt trong tất cả các hệ thống Linux.
Wget là một chương trình trên Linux cho phép download file qua các giao thức thông dụng hiện nay như FPT, HTTP, HTTPS. Lỗ hổng trong Wget cho phép kẻ tấn công ghi file tùy ý hay các liên kết symlink vào hệ thống khi nạn nhân download thông qua giao thức ftp với quyền ghi file theo quyền mà nạn nhân dùng để chạy Wget. Lỗ hổng cũng có thể bị lợi dụng để thực thi mã từ xa thông qua việc ghi file vào /etc/cron.d/ trên hệ thống.
Lỗ hổng tồn tại trong tất cả các phiên bản Wget dưới 1.16. Trong bài viết này tôi sẽ thử nghiệm khai thác lỗ hổng này với mã khai thác sử dụng Metasploit.
Cách thức khai thác lỗ hổng
Chạy mã khai thác của Wget sử dụng metasploit dựng lên một server FPT. Thiết lập các cấu hình để chèn mã thực thi vào thư mục /etc/cron.d/ trên máy nạn nhân
Khi nạn nhân chạy wget để download file dạng:
Dẫn đến việc ghi đè file trong TAGET_DATA vào thư mục TARGET_FILE trên máy nạn nhân. Nguyên nhân là do khi Wget xử lý tải về một thư mục chứa symlink là TARGET_FILE mà nội dung thư mục trùng tên với nó. Wget sẽ xử lý lỗi khi tạo symlink trên máy nạn nhân sau đó sẽ truy cập vào TARGET_FILE và tải nội dung file cronshell vào hệ thống của nạn nhân.
Khi chạy dưới quyền root, file cronshell sẽ được ghi vào thư mục /etc/cron.d/ (target_file). Thư mục này sử dụng crontab cho phép chạy tự động tác vụ được thiết lập trong file trên hệ thống. Khi ghi đè được cronshell vào thư mục này, kẻ tấn công có thể chèn mã độc vào máy nạn nhân và tự động thực thi.
Cách khắc phục
Hiện nay bản vá cho lỗ hổng này đã được nhà phát triển wget cập nhật trong phiên bản 1.16. Người sử dụng chỉ đơn giản là cập nhật lên phiên bản mới nhất này để bảo vệ và chống lại lỗ hổng.Tải phiên bản mới nhất của Wget tại đây
Nếu chưa thể cập nhật phiên bản mới nhất, người sử dụng có thể tự bảo vệ bằng cách bật tính năng retr-symlinks trong file cấu hình wget. Thêm dòng “retr-symlinks=on” trong /etc/wgetrc hoặc ~/.wgetrc.
Wget là một chương trình trên Linux cho phép download file qua các giao thức thông dụng hiện nay như FPT, HTTP, HTTPS. Lỗ hổng trong Wget cho phép kẻ tấn công ghi file tùy ý hay các liên kết symlink vào hệ thống khi nạn nhân download thông qua giao thức ftp với quyền ghi file theo quyền mà nạn nhân dùng để chạy Wget. Lỗ hổng cũng có thể bị lợi dụng để thực thi mã từ xa thông qua việc ghi file vào /etc/cron.d/ trên hệ thống.
Lỗ hổng tồn tại trong tất cả các phiên bản Wget dưới 1.16. Trong bài viết này tôi sẽ thử nghiệm khai thác lỗ hổng này với mã khai thác sử dụng Metasploit.
Cách thức khai thác lỗ hổng
Chạy mã khai thác của Wget sử dụng metasploit dựng lên một server FPT. Thiết lập các cấu hình để chèn mã thực thi vào thư mục /etc/cron.d/ trên máy nạn nhân
Khi nạn nhân chạy wget để download file dạng:
Dẫn đến việc ghi đè file trong TAGET_DATA vào thư mục TARGET_FILE trên máy nạn nhân. Nguyên nhân là do khi Wget xử lý tải về một thư mục chứa symlink là TARGET_FILE mà nội dung thư mục trùng tên với nó. Wget sẽ xử lý lỗi khi tạo symlink trên máy nạn nhân sau đó sẽ truy cập vào TARGET_FILE và tải nội dung file cronshell vào hệ thống của nạn nhân.
Khi chạy dưới quyền root, file cronshell sẽ được ghi vào thư mục /etc/cron.d/ (target_file). Thư mục này sử dụng crontab cho phép chạy tự động tác vụ được thiết lập trong file trên hệ thống. Khi ghi đè được cronshell vào thư mục này, kẻ tấn công có thể chèn mã độc vào máy nạn nhân và tự động thực thi.
Cách khắc phục
Hiện nay bản vá cho lỗ hổng này đã được nhà phát triển wget cập nhật trong phiên bản 1.16. Người sử dụng chỉ đơn giản là cập nhật lên phiên bản mới nhất này để bảo vệ và chống lại lỗ hổng.Tải phiên bản mới nhất của Wget tại đây
Nếu chưa thể cập nhật phiên bản mới nhất, người sử dụng có thể tự bảo vệ bằng cách bật tính năng retr-symlinks trong file cấu hình wget. Thêm dòng “retr-symlinks=on” trong /etc/wgetrc hoặc ~/.wgetrc.