php-fpm 中允許在服務器上遠程執行代碼的漏洞

可用的 PHP 7.3.11、7.1.33 和 7.2.24 的修正版本,其中 淘汰 批判的 脆弱性 PHP-FPM(FastCGI 進程管理器)擴展中的 (CVE-2019-11043) 允許您在系統上遠程執行代碼。 攻擊使用PHP-FPM結合Nginx運行PHP腳本的服務器,已經公開 工作的 開發.

在 nginx 配置中可能會發生攻擊,其中 PHP-FPM 中的轉發是通過使用“fastcgi_split_path_info”分割 URL 的各個部分並定義 PATH_INFO 環境變量來執行的,但沒有首先使用“try_files $fastcgi_script_name”檢查文件是否存在指令或“if (!-f $ document_root$fastcgi_script_name)”。 問題包括 表現出來了 在為 NextCloud 平台提供的設置中。 例如,具有以下形式結構的配置很容易受到攻擊:

位置 ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(。+?\。php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

您可以按照以下頁面上的發行版進行故障排除: Debian, RHEL, Ubuntu, SUSE/開放SUSE, FreeBSD的, , Fedora。 作為一種安全解決方法,在“fastcgi_split_path_info”行之後,您可以添加對所請求的 PHP 文件是否存在的檢查:

try_files $fastcgi_script_name =404;

該問題是由操作文件中的指針時發生錯誤引起的 sapi/fpm/fpm/fpm_main.c。 分配指針時,假定 PATH_INFO 環境變量的值必須包含與 PHP 腳本的路徑匹配的前綴。
如果 fastcgi_split_path_info 指令指定使用對換行符傳輸敏感的正則表達式分割腳本路徑(例如,在許多示例中建議使用“^(.+?\.php)(/. *)$"),那麼攻擊者就可以實現向PATH_INFO環境變量寫入空值。 在這種情況下,進一步執行 執行 將path_info[0]寫入零並調用FCGI_PUTENV。

通過請求以某種方式格式化的URL,攻擊者可以將path_info 指針移動到“_fcgi_data_seg”結構的第一個字節,向該字節寫入零會將“char * pos”指針移動到之前所在的內存區域。 接下來調用的 FCGI_PUTENV 會用攻擊者可以控制的值覆蓋此內存中的數據。 指定的內存還存儲其他FastCGI變量的值,通過寫入它們的數據,攻擊者可以創建一個虛擬的PHP_VALUE變量並實現他的代碼的執行。

來源: opennet.ru

添加評論