PHP远程代码执行漏洞分析(CVE2019-11043)

本文详细分析了PHP远程代码执行漏洞CVE2019-11043,该漏洞影响Nginx + php-fpm配置的服务器。攻击者能通过精心构造的payload触发远程代码执行,可能导致服务器被植入后门。建议受影响的运维人员检查配置,升级补丁或启用官方推荐的安全配置。

PHP远程代码执行漏洞分析(CVE2019-11043)

近日,美创安全实验室监测到PHP官方披露了Nginx + php-fpm部分配置下存在的远程代码执行高危漏洞(CVE2019-11043),攻击者可利用该漏洞对目标网站进行远程代码执行攻击。虽然此漏洞的影响面有限,但由于配置文件的开放性,还请使用niginx + php-fpm的运维人员及时做好自检自查工作。

0x00漏洞时间线

9月14日 至18日,国外安全研究员Andrew Danau在参加Real World CTF中发现,向目标服务器URL发送 %0a 符号时,服务返回异常,疑似存在漏洞。
9月26日,PHP官方发布漏洞通告,其中指出:使用Nginx + php-fpm的服务器,在部分配置下,存在远程代码执行漏洞,并且该配置已被广泛使用危害较大。
10月21日至22日,PHP官方发布漏洞更新,该漏洞POC公开。
10月24日 美创第59号实验室发布漏洞预警。

0x01漏洞描述

Nginx上fastcgi_split_path_info在处理带有%0a的请求时,会因为遇到换行符\n导致PATH_INFO为空。而php-fpm在处理PATH_INFO为空的情况下,存在逻辑缺陷。攻击者通过精心构造和利用的PAYLOAD,可以导致远程代码执行。但Nginx使用的这个fastcgi配置,并非Nginx默认配置。

0x02受影响的版本

使用Nginx + php-fpm配置的服务器,并且在nginx/conf/nginx.confg配置文件中采用如下配置的时候,都会出现RCE漏洞

Location ~[^/]\.php(/|$){
  ...
  fastcg
### 漏洞详情 PHP-FPM(FastCGI Process Manager)是 PHP 的一个替代 FastCGI 实现,因其高效稳定的特性而广泛用于生产环境。CVE-2019-11043 是在 PHP-FPM 与 Nginx 配合使用的配置中发现的一个远程代码执行漏洞。 该漏洞的核心在于 Nginx 配置中的 `fastcgi_split_path_info` 指令使用了不安全的正则表达式。当请求的 URL 包含特定字符(如换行符 `%0a`)时,可能导致 `PATH_INFO` 参数为空,从而触发 PHP-FPM 中的路径解析错误[^3]。 具体来说,Nginx 配置如下: ```nginx location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; } ``` 在这种情况下,攻击者可以通过构造恶意请求来绕过路径限制,并最终导致任意代码执行--- ### 影响范围 此漏洞影响使用以下配置组合的服务器: - **受影响版本**:PHP-FPM 在某些特定配置下,尤其是在与 Nginx 结合使用且未正确处理 `PATH_INFO` 的情况下。 - **Nginx 配置**:使用 `fastcgi_split_path_info ^(.+?\.php)(/.*)$;` 的配置方式。 - **PHP 版本**:包括但不限于 PHP 7.1、7.2 和 7.3 的某些版本。官方修复发布于 2019 年 10 月 22 日,涉及 PHP 7.1.33、7.2.24 和 7.3.11 版本[^1]。 --- ### 修复方案 为了缓解和修复 CVE-2019-11043 漏洞,可以采取以下措施: 1. **升级 PHP 版本** 确保将 PHP 升级到官方发布的修复版本: - PHP 7.1.33 或更高 - PHP 7.2.24 或更高 - PHP 7.3.11 或更高 2. **修改 Nginx 配置** 如果无法立即升级 PHP,可以调整 Nginx 的配置以避免路径解析问题。例如,修改 `fastcgi_split_path_info` 的正则表达式为更严格的匹配规则: ```nginx location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; } ``` 上述配置通过移除 `[^\]` 部分并简化正则表达式,减少潜在的解析异常。 3. **过滤特殊字符** 在 Nginx 层面对请求 URI 进行检查,阻止包含非法字符(如 `%0a`)的请求进入后端处理流程。例如: ```nginx if ($request_uri ~* "%0a") { return 403; } ``` 4. **启用 WAF(Web Application Firewall)** 使用 Web 应用防火墙对传入请求进行过滤,识别并阻断可能利用该漏洞的攻击流量。 5. **最小化暴露面** 对于不需要动态脚本执行的目录,应明确禁止 `.php` 文件的执行权限,防止攻击者上传恶意脚本并执行。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值