- CNNVD編號(hào):未知
- 危害等級(jí): 高危
- CVE編號(hào):CVE-2019-11043
- 漏洞類型: 代碼執(zhí)行
- 威脅類型:遠(yuǎn)程
- 廠 商:未知
- 漏洞來(lái)源:深信服
- 發(fā)布時(shí)間:2020-09-11
- 更新時(shí)間:2021-01-14
漏洞簡(jiǎn)介
該漏洞是PHP-FPM中的fpm_main.c文件的env_path_info下溢導(dǎo)致,在sapi/fpm/fpm/fpm_main.c文件中的第1140行包含pointer arithmetics,這些pointer arithmetics假定env_path_info的前綴等于php腳本的路徑。但是,代碼不會(huì)檢查這些假設(shè)是否被滿足,缺少檢查會(huì)導(dǎo)致”path_info”變量中的指針無(wú)效。
這樣的條件可以在標(biāo)準(zhǔn)的Nginx配置中實(shí)現(xiàn)。如果有這樣的Nginx配置:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
攻擊者可以使用換行符(編碼格式為%0a)來(lái)破壞`fastcgi_split_path_info`指令中的regexp。regexp損壞將導(dǎo)致空PATH_INFO,從而觸發(fā)該錯(cuò)誤。
這個(gè)錯(cuò)誤會(huì)造成代碼執(zhí)行漏洞。在后面的代碼中,path_info[0]的值設(shè)置為0,然后再調(diào)用FCGI_PUTENV。攻擊者可以使用精心選擇的URL路徑長(zhǎng)度和查詢字符串,使path_info精確地指向_fcgi_data_seg結(jié)構(gòu)的第一個(gè)字節(jié)。然后將0放入其中則‘char* pos’字段向后移動(dòng),然后FCGI_PUTENV使用腳本路徑覆蓋一些數(shù)據(jù)(包括其他快速cgi變量)。使用這種技術(shù),攻擊者可以創(chuàng)建一個(gè)偽PHP_VALUE fcgi變量,然后使用一系列精心選擇的配置值來(lái)執(zhí)行代碼。
漏洞公示
PHP-FPM(FastCGI流程管理器)是另一種PHP FastCGI實(shí)現(xiàn),具有一些其他功能,可用于各種規(guī)模的站點(diǎn),尤其是繁忙的站點(diǎn)。
對(duì)于PHP 5.3.3之前的php來(lái)說(shuō),PHP-FPM是一個(gè)補(bǔ)丁包,旨在將FastCGI進(jìn)程管理整合進(jìn)PHP包中。如果你使用的是PHP 5.3.3之前的PHP的話,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP后才可以使用。而PHP 5.3.3已經(jīng)集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程、可以平滑重載PHP配置。
參考網(wǎng)站
受影響實(shí)體
影響產(chǎn)品:
在2019-09-26更新之前下載的PHP-FPM,且必須為Nginx + php-fpm 的服務(wù)器使用如下配置,會(huì)受到影響。
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
...
}
補(bǔ)丁
【深信服下一代防火墻】可防御此漏洞, 建議部署深信服下一代防火墻的用戶開(kāi)啟安全防御模塊,可輕松抵御此高危風(fēng)險(xiǎn)。
【深信服云盾】已第一時(shí)間從云端自動(dòng)更新防護(hù)規(guī)則,云盾用戶無(wú)需操作,即可輕松、快速防御此高危風(fēng)險(xiǎn)。
1. 如果業(yè)務(wù)不需要以下配置,建議用戶刪除:
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
2. 使用github中的最新的PHP版本,下載地址:
https://github.com/php/php-src