0x01 前言
2019年10月23日,php官方發布了在 Nginx 配置不當的情況下 php-fpm 可導致遠程代碼執行的漏洞。
但由于是配置文件的開放性,還請使用 nginx+php-fpm 的服務管理員/運維人員及時做好自查自檢工作。
能不能不舉報我了,總被禁言。。。我苦啊!
0x02 漏洞詳情
在 https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c#L1150 中由于n(%0a)的傳入導致nginx傳遞給php-fpm的PATH_INFO為空。
進而導致可以通過FCGI_PUTENV與PHP_VALUE相結合,修改當前的php-fpm進程中的php配置。在特殊構造的配置生效的情況下可以觸發任意代碼執行。
注:完全復制Nginx官方給出的php-fpm示例配置的用戶受到此漏洞影響
示例配置如下:
PHP FastCGI Example | NGINX
0x03 漏洞證明:
使用配置文件
0x04 修復建議
- 修改 nginx 配配置文件中fastcgi_split_path_info的正則表達式,不允許.php之后傳入不可顯字符
- 暫停使用 nginx+php-fpm 服務
- 刪除如下配置
fastcgi_split_path_info ^(.+?.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info;