PHP-FPM遠程代碼執行漏洞(CVE-2019-11043)

0x00 簡介

在長亭科技舉辦的 Real World CTF 中,國外安全研究員 Andrew Danau 在解決一道 CTF 題目時發現,向目標服務器 URL 發送 %0a 符號時,服務返回異常,疑似存在漏洞。php

在使用一些有錯誤的Nginx配置的狀況下,經過惡意構造的數據包,便可讓PHP-FPM執行任意代碼。nginx

但因爲是配置文件的開放性。還請使用 nginx+php-fpm 的服務管理員/運維人員及時作好自查自檢工做。git

0x01 漏洞詳情

因爲\n(%0a)的傳入致使nginx傳遞給php-fpm的PATH_INFO爲空。github

進而致使能夠經過FCGI_PUTENV與PHP_VALUE相結合,修改當前的php-fpm進程中的php配置。在特殊構造的配置生效的狀況下能夠觸發任意代碼執行。golang

注:徹底複製Nginx官方給出的php-fpm示例配置的用戶受到此漏洞影響正則表達式

示例配置以下:安全

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

0x02 漏洞復現

在vulhub上已經更新了相應的靶場環境:服務器

https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043

拉取鏡像環境: 運維

環境啓動後,訪問http://your-ip:8080/index.php便可查看到一個默認頁面。php-fpm

使用https://github.com/neex/phuip-fpizdam中給出的工具,發送數據包: (前提本機擁有正常的golang環境)

可見,這裏已經執行成功。

咱們訪問http://your-ip:8080/index.php?a=id,便可查看到命令已成功執行:

注意,由於php-fpm會啓動多個子進程,在訪問/index.php?a=id時須要多訪問幾回,以訪問到被污染的進程。

0x03 修復建議

1.修改 nginx 配配置文件中fastcgi_split_path_info的正則表達式,不容許.php以後傳入不可顯字符 2.暫停使用 nginx+php-fpm 服務 3.刪除以下配置

fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO       $fastcgi_path_info;

0x04 參考連接

https://www.anquanke.com/post/id/189415 https://github.com/vulhub/vulhub/blob/master/php/CVE-2019-11043/README.zh-cn.md https://mp.weixin.qq.com/s/XPFIEiNvNorfgQHein_NGw

相關文章
相關標籤/搜索