PHP历史上还有哪些严重的内核级漏洞

胖伟君_2629

胖伟君_2629

2026-10-22

904人浏览

原创

php历史上的严重底层漏洞,既包括cgi参数处理和fpm路径处理,也包括phar扩展的内存问题。排查时应先对齐组件、部署模式和触发条件,再核对补丁;不能只看到php或rce几个字就判断整台服务器受影响。

PHP官方历史公告说明CGI补充修复及不适用的服务模式(封面裁切)

这里提到的「内核级」,和操作系统内核漏洞不是一回事

接下来聊到的所有缺陷,都属于PHP运行时、服务接口、PHP自带底层扩展的相关问题,既不属于Linux或Windows的系统内核漏洞,也不会把所有问题都归为Zend引擎本身的错误。这类问题和业务代码里常见的SQL注入、普通权限校验疏漏,处在完全不同的问题层级。

底层缺陷可能发生在请求参数转换、路径计算或二进制数据读取阶段。C语言组件若错误处理长度、边界或内存生命周期,就可能读写无效区域;参数解释错误则可能让输入被当成运行选项。

是否能够远程利用,还取决于入口是否可达、服务模式、平台和应用行为,并非装有PHP就自动满足全部条件。

2012年:CGI参数处理问题及后续补充修复

CVE-2012-1823涉及特定CGI部署的参数处理,随后还有CVE-2012-2311相关修正。PHP官方5.3.13公告明确写的是完成CGI场景修复,并注明mod_php和PHP-FPM不受该攻击影响,不能把这条历史问题扩大成所有运行模式。

查看官方补充修复公告时,要同时保留漏洞编号与适用模式。它说明了“发布过修复版”还需要核对后续修正,不意味着今天应该安装早已过期的PHP 5系列。

PHP官方历史公告说明CGI补充修复及不适用的服务模式

2019年:特定FPM配置场景下的路径处理缺陷

CVE-2019-11043涉及某些FPM配置下的缓冲区越界写,可能导致远程代码执行。这里的关键不只是版本,还包括请求路径如何被Web服务器传递给FPM;不能因为站点使用Nginx就判定中招,也不能将所有FPM配置视为同一风险。

遗留站点应保存Web服务器配置、FPM池与完整软件包信息,并对照发行版跟踪记录检查回补情况。单纯复制其他服务器的配置片段,不能替代补丁核验。

2023年:Phar目录读取场景下的缓冲区溢出与越界读取

CVE-2023-3824发生在Phar扩展目录读取逻辑。PHP官方公告指出,检查不可信Phar文件内容的应用可能受到影响,实际利用高度依赖目标应用;它不是“任何HTTP请求都会直接执行代码”的证明。

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载

跑上传归档、文件预览、离线分析这类任务的系统,要提前校验归档文件的上传权限,确认读取归档的进程身份和对应权限。公告截图里展示的只是漏洞影响条件说明,不代表本站已经完成该漏洞的复现。

PHP官方Phar漏洞公告说明利用依赖应用及不可信归档处理条件

2024年:Windows特定代码页下的PHP-CGI参数注入

CVE-2024-4577的典型条件是Windows、Apache与PHP-CGI,再叠加特定代码页的Best-Fit字符转换。转换后的字符可能被误当作PHP选项;不能把这一机制原样套到Linux FPM站点上。

CERT-EU公告里同时列明了对应的平台和部署限制条件。排查Windows端的遗留应用时,要核对实际运行的进程和CGI映射关系,不能只靠控制面板显示的PHP版本直接下判断。

PHP官方Windows PHP-CGI漏洞公告及历史修复版本,非当前升级目标

按Web站点和归档处理两类场景分别盘点

场景 优先记录 后续核验
对公网Web站点 服务模式、平台、请求映射 完整包号、补丁与工作进程
归档处理或后台任务 输入来源、扩展、任务账号 读取链路、权限与运行时补丁
  1. 逐个登记所有站点、后台任务的负责人、PHP二进制文件路径、部署模式和安装来源。
  2. 逐条对照漏洞公告的触发条件,把已确认受影响、不涉及该场景、暂时缺信息没法判定的三类项目分开记录。
  3. 选用仍在官方维护周期内的安全版本,或者对应供应商提供的漏洞回补包,验证没问题之后替换所有相关进程和全量副本。

下面给出的完整示例,会把四类问题对应的相关组件整理成清单,脚本本身不会做版本安全校验,也不会加载归档文件、发送任何攻击请求。把代码存为audit.php运行,输出结果可以直接当作人工资产盘点的字段参考。

<?php // 只展示历史漏洞的组件分类,不探测网络、不加载可疑文件,也不作安全判定。
$cases=[
    ['CVE-2012-1823 / CVE-2012-2311','CGI','CGI argument handling; inspect deployment'],
    ['CVE-2019-11043','FPM','Specific FPM configuration and request path'],
    ['CVE-2023-3824','Phar extension','Inspecting untrusted Phar archive contents'],
    ['CVE-2024-4577','Windows PHP-CGI','Apache + CGI + specific Windows code pages'],
];
echo 'Demo runtime: ',PHP_VERSION,' / ',PHP_SAPI,PHP_EOL;
foreach ($cases as [$id,$component,$condition]) {
    echo $id,PHP_EOL,'  component: ',$component,PHP_EOL,'  context: ',$condition,PHP_EOL;
}
echo "Inventory only: versions, vendor patches and reachable paths still need review.\n";
php audit.php

示例在macOS的PHP 8.5.10 WebAssembly环境执行。输出中的运行时只是本次教学测试环境,不是被检查服务器;历史案例标签也不是漏洞扫描结果。

只读示例的真实运行输出:历史漏洞按组件和场景分类的实际输出,不进行探测或安全判定

复盘历史漏洞时避开四个常见误区

  • 别只靠漏洞年份判断系统是否安全:一定要核对完整的安装包版本号、供应商的补丁回补情况,以及当前版本的官方支持状态。
  • 别把PHP扩展漏洞错当成操作系统内核漏洞:先明确出问题的具体组件,以及可被外部访问的入口点。
  • 别一看到RCE就忽略触发前提:要完整记录对应的平台、配置、输入来源和应用行为的所有限制条件。
  • 别觉得旧漏洞修完就不用管新公告:像PHP2Shell这类新出现的问题,还是要单独做核验。

这些案例的共同启示是,要维护准确的资产清单,而不是死记一堆旧版本号。如果现场已经出现异常文件、可疑账号或者对外连接的痕迹,补丁更新和入侵调查要分开留证;单纯升级版本,不能证明历史上的攻击痕迹已经被完全清除。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php2shell漏洞 php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

11204

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6501

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2155

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

4108

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4834

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3791

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5457

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

4262

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

12202

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习