Lỗ hổng PHP-fpm cho phép thực thi mã từ xa trên máy chủ

Có sẵn bản phát hành sửa lỗi của PHP 7.3.11, 7.1.33 và 7.2.24, trong đó loại bỏ phê bình sự dễ bị tổn thương (CVE-2019-11043) trong tiện ích mở rộng PHP-FPM (Trình quản lý quy trình FastCGI), cho phép bạn thực thi mã của mình từ xa trên hệ thống. Để tấn công các máy chủ sử dụng PHP-FPM kết hợp với Nginx để chạy các tập lệnh PHP, nó đã có sẵn công khai làm việc khai thác.

Cuộc tấn công có thể xảy ra trong các cấu hình nginx trong đó việc chuyển tiếp tới PHP-FPM được thực hiện bằng cách tách các phần của URL bằng cách sử dụng “fastcgi_split_path_info” và xác định biến môi trường PATH_INFO, nhưng không kiểm tra trước sự tồn tại của tệp bằng cách sử dụng “try_files $fastcgi_script_name” lệnh hoặc “if (!-f $) document_root$fastcgi_script_name)". Vấn đề cũng là biểu lộ trong cài đặt được cung cấp cho nền tảng NextCloud. Ví dụ: cấu hình có cấu trúc như:

vị trí ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

Bạn có thể theo dõi cách giải quyết sự cố trong bộ công cụ phân phối trên các trang sau: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Arch, Fedora. Để khắc phục, bạn có thể thêm kiểm tra sự tồn tại của tệp PHP được yêu cầu sau dòng “fastcgi_split_path_info”:

try_files $fastcgi_script_name =404;

Sự cố xảy ra do lỗi khi thao tác con trỏ trong file sapi/fpm/fpm/fpm_main.c. Khi gán một con trỏ, giả định rằng giá trị của biến môi trường PATH_INFO phải chứa tiền tố khớp với đường dẫn đến tập lệnh PHP.
Nếu lệnh fastcgi_split_path_info chỉ định việc chia đường dẫn tập lệnh bằng cách sử dụng biểu thức chính quy phân biệt dòng mới (ví dụ: nhiều ví dụ đề xuất sử dụng "^(.+?\.php)(/.*)$"), thì kẻ tấn công có thể đảm bảo rằng một giá trị trống được ghi vào biến môi trường PATH_INFO. Trong trường hợp này, tiếp tục thực hiện thực hiện viết path_info[0] về XNUMX và gọi FCGI_PUTENV.

Bằng cách yêu cầu một URL được định dạng theo một cách nhất định, kẻ tấn công có thể dịch chuyển con trỏ path_info sang byte đầu tiên của cấu trúc “_fcgi_data_seg” và việc ghi số 0 vào byte này sẽ dẫn đến chuyển động của “char* pos” con trỏ tới vùng nhớ được định vị trước đó. FCGI_PUTENV tiếp theo sẽ ghi đè dữ liệu trong bộ nhớ này với giá trị mà kẻ tấn công có thể kiểm soát. Bộ nhớ được chỉ định cũng lưu trữ các giá trị của các biến FastCGI khác và bằng cách ghi dữ liệu của chúng, kẻ tấn công có thể tạo một biến PHP_VALUE hư cấu và thực thi mã của chúng.

Nguồn: opennet.ru

Thêm một lời nhận xét