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à
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:
try_files $fastcgi_script_name =404;
Sự cố xảy ra do lỗi khi thao tác con trỏ trong file
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
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