Một lỗ hổng rất nguy hiểm vừa được công bố trong các phiên bản PHP trước 5.4.39, 5.5.x trước 5.5.23, và 5.6.x trước 5.6.7 – tức là ngoài các bản PHP mới nhất trên PHP.net.
Lỗ hổng nằm trong hàm move_uploaded_file được sử dụng trong việc xử lý các form upload của PHP. Lỗi này có thể cho phép hacker dễ dàng tải các tệp tin PHP lên server thông qua việc áp dụng một kỹ thuật bypass cổ điển là thêm ký tự nullbyte (\x00) vào tên tệp tin trước khi tải lên máy chủ. Hacker sẽ đổi tên của tệp tin file.php thành file.php\x00.jpg và sau đó upload lên server, lỗi trong hàm move_uploaded_file sẽ cho phép tin tặc upload thành công tệp tin đó lên máy chủ.
Tệp tin tải lên là file.php\x00.jpg nhưng qua hàm move_uploaded_file($_FILES[‘name’][‘tmp_name’],”/file.php\x00.jpg”) thì tệp tin được tạo lên máy chủ thực sự lại là file.php
Với việc upload được bất cứ tệp tin PHP nào lên máy chủ là cực kỳ rất nguy hiểm, các form upload trở thành các cửa hậu cho tin tặc tấn công và khai thác. Tin tặc có thể upload lên các tệp tin mã độc, webshell để chiếm hoàn toàn quyền điều khiển máy chủ, cũng như có thể tấn công và kiểm soát tất cả các website khác trên máy chủ nếu quản trị máy chủ phân quyền không tốt. Lỗ hổng hiện đã được thông báo cho PHP và đã được cập nhật vào phiên bản mới nhất với mã lỗi là: CVE-2015-2348
Cách khắc phục
Lọc bỏ giá trị Nullbyte trong tên của tệp tin tải lên máy chủ ($_FILES[‘uploaded’][‘name’]) trước khi sử dụng hàm move_uploaded_file và cập nhật lên các bản PHP mới nhất đã vá lỗi.