Trung tâm nghiên cứu công nghệ Thaisonit cảnh báo về lỗ hổng CVE-2024-4577 trong PHP nhằm cung cấp thêm thông tin cần thiết để quản trị viên cũng như người dùng có thể thực hiện các biện pháp bảo mật một cách kịp thời và hiệu quả.
Thông tin về lỗ hổng:

CVE-2024-4577 là một lỗ hổng bảo mật nghiêm trọng trong PHP. Lỗ hổng này xảy ra khi sử dụng Apache và PHP-CGI trên hệ điều hành Windows, nếu hệ thống được cấu hình để sử dụng một số bảng mã (code pages) nhất định. Khi đó, Windows có thể sử dụng cơ chế “Best-Fit” để thay thế các ký tự trong dòng lệnh được truyền tới các hàm Win32 API. Điều này có thể làm cho mô-đun PHP-CGI hiểu sai các ký tự này như là các tùy chọn của PHP. Mã tùy ý có thể được thực thi trên các máy chủ PHP từ xa thông qua cuộc tấn công chèn đối số.

Lỗ hổng này có thể cho phép một kẻ tấn công thực hiện các hành động sau:

Tiết lộ mã nguồn của các tập lệnh PHP.

Thực thi mã PHP tùy ý trên máy chủ.

Hình ảnh minh họa hacker

Phát hiện ra lỗ hổng:

Trong quá trình nghiên cứu tấn công liên tục của nhóm DEVCORE , nhóm DEVCORE đã phát hiện ra một lỗ hổng thực thi mã từ xa trong PHP. Do ngôn ngữ lập trình này được sử dụng rộng rãi trong hệ sinh thái web và dễ khai thác, nhóm DEVCORE đã phân loại mức độ nghiêm trọng của lỗ hổng này là nghiêm trọng và nhanh chóng báo cáo cho nhóm chính thức của PHP. Nhóm chính thức đã phát hành bản vá vào ngày 2024/06/06. Vui lòng tham khảo mốc thời gian để biết thông tin chi tiết về việc tiết lộ.

Dòng thời gian:

  • 07/05/2024 - DEVCORE đã báo cáo vấn đề này thông qua trang tiết lộ lỗ hổng PHP chính thức.
  • 07/05/2024 - Các nhà phát triển PHP đã xác nhận lỗ hổng bảo mật và nhấn mạnh nhu cầu phải khắc phục ngay lập tức.
  • 16/05/2024 - Các nhà phát triển PHP đã phát hành phiên bản sửa lỗi đầu tiên và yêu cầu phản hồi.
  • 18/05/2024 - Các nhà phát triển PHP đã phát hành phiên bản sửa lỗi thứ hai và yêu cầu phản hồi.
  • 20/05/2024 - PHP bước vào giai đoạn chuẩn bị cho việc phát hành phiên bản mới.
  • 06/06/2024 - PHP phát hành phiên bản mới 8.3.8 , 8.2.20 và 8.1.29 .

Minh họa cho lỗ hổng CVE-2024-4577 thực thi mã Poc

Mô phỏng lại quá trình tấn công từ khai thác lỗ hổng CVE-2024-4577

Các phiên bản PHP bị ảnh hưởng:

Lỗ hổng này ảnh hưởng đến tất cả các phiên bản PHP được cài đặt trên hệ điều hành Windows. Vui lòng tham khảo thông tin bên dưới để biết chi tiết:

  • PHP 8.3: phiên bản nhỏ hơn phiên bản 8.3.8 (v < 8.3.8)
  • PHP 8.2: phiên bản nhỏ hơn phiên bản 8.2.20 (v < 8.2.20)
  • PHP 8.1: phiên bản nhỏ hơn phiên bản 8.1.29 (v < 8.1.29)

Vì nhánh PHP 8.0, PHP 7 và PHP 5 đã kết thúc vòng đời và không còn được duy trì nữa nên quản trị viên máy chủ có thể tham khảo phần "Tôi có dễ bị tấn công không?" ở bên dưới để tìm các đề xuất vá tạm thời trong phần "Biện pháp giảm thiểu" ở dưới cùng.

Tôi có dễ bị tấn công không?

Đối với trường hợp kết hợp thông thường như Apache HTTP Server và PHP, quản trị viên máy chủ có thể sử dụng hai phương pháp được liệt kê trong bài viết này để xác định máy chủ của họ có dễ bị tấn công hay không. Điều đáng chú ý là Kịch bản 2 cũng là cấu hình mặc định cho XAMPP dành cho Windows , do đó tất cả các phiên bản cài đặt XAMPP trên Windows đều dễ bị tấn công theo mặc định .

Tại thời điểm viết bài này, đã xác minh rằng khi Windows chạy ở những ngôn ngữ sau, kẻ tấn công trái phép có thể trực tiếp thực thi mã tùy ý trên máy chủ từ xa :

  • Tiếng Trung phồn thể (Mã trang 950)
  • Tiếng Trung giản thể (Mã trang 936)
  • Tiếng Nhật (Mã trang 932)

Đối với Windows chạy ở các ngôn ngữ khác như tiếng Anh, tiếng Hàn và Tây Âu, do phạm vi sử dụng PHP rộng nên hiện tại không thể liệt kê và loại bỏ hoàn toàn tất cả các kịch bản khai thác tiềm ẩn. Do đó, người dùng nên tiến hành đánh giá tài sản toàn diện, xác minh các kịch bản sử dụng của họ và cập nhật PHP lên phiên bản mới nhất để đảm bảo an ninh.

Kịch bản 1 : Chạy PHP ở chế độ CGI

Khi cấu hình Action chỉ thị để ánh xạ các yêu cầu HTTP tương ứng với tệp nhị phân thực thi PHP-CGI trong Apache HTTP Server, lỗ hổng này có thể bị khai thác trực tiếp. Các cấu hình phổ biến bị ảnh hưởng bao gồm, nhưng không giới hạn ở:

AddHandler cgi-script .php
Action cgi-script "/cgi-bin/php-cgi.exe"

Hoặc

<FilesMatch "\.php$">
SetHandler
application/x-httpd-php-cgi
< /
FilesMatch>
Action application/x-httpd-php-cgi "/php-cgi/php-cgi.exe"

Kịch bản 2 : Hiển thị tệp nhị phân PHP (cũng là cấu hình XAMPP mặc định)

Ngay cả khi PHP không được cấu hình theo chế độ CGI, việc chỉ hiển thị tệp nhị phân thực thi PHP trong thư mục CGI cũng bị ảnh hưởng bởi lỗ hổng này. Các tình huống phổ biến bao gồm, nhưng không giới hạn ở:

  1. Sao chép php.exe hoặc php-cgi.exe vào /cgi-bin/folder.

Hiển thị thư mục PHP thông qua ScriptAliaslệnh, chẳng hạn như:

ScriptAlias /php-cgi/ "C:/xampp/php/"

Biện pháp giảm thiểu:

Chúng tôi khuyến cáo mạnh mẽ rằng tất cả người dùng nên nâng cấp lên phiên bản PHP mới nhất là 8.3.8 , 8.2.20 và 8.1.29 . Đối với các hệ thống không thể nâng cấp, có thể sử dụng các hướng dẫn sau để tạm thời giảm thiểu lỗ hổng.

Tuy nhiên, vì PHP CGI là một kiến ​​trúc lỗi thời và có nhiều vấn đề nên vẫn nên đánh giá khả năng di chuyển sang một kiến ​​trúc an toàn hơn như Mod-PHP, FastCGI hoặc PHP-FPM.

1. Đối với người dùng không thể nâng cấp PHP:

Các Quy tắc Viết lại sau đây có thể được sử dụng để chặn các cuộc tấn công. Xin lưu ý rằng các quy tắc này chỉ là biện pháp giảm thiểu tạm thời cho các ngôn ngữ tiếng Trung phồn thể, tiếng Trung giản thể và tiếng Nhật . Bạn vẫn nên cập nhật lên phiên bản đã vá hoặc di chuyển kiến ​​trúc trong thực tế.

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

2. Đối với người dùng sử dụng XAMPP cho Windows:

XAMPP vẫn chưa phát hành các tệp cập nhật tương ứng cho lỗ hổng này tại thời điểm viết bài viết này. Nếu bạn xác nhận rằng bạn không cần tính năng PHP CGI, bạn có thể tránh tiếp xúc với lỗ hổng bằng cách sửa đổi cấu hình Máy chủ HTTP Apache sau:

C:/xampp/apache/conf/extra/httpd-xampp.conf

Xác định vị trí các dòng tương ứng:

ScriptAlias /php-cgi/ "C:/xampp/php/"

Và bình luận như sau:

# ScriptAlias /php-cgi/ "C:/xampp/php/"

    Thẩm quyền giải quyết: