cve-2012-1823是php 5.4.1中真实存在的远程代码执行漏洞,仅影响cgi模式(非fpm或mod_php),利用querystring被当作php-cgi参数执行,导致源码泄露和rce,官方已停止支持该版本,唯一可靠处置方式是立即升级或停用cgi模式。

CVE-2012-1823 是 PHP 5.4.1 中真实存在的、已验证可利用的远程代码执行漏洞,**必须立即下线或隔离该环境,升级是唯一可靠处置方式**。PHP 官方早在 2012 年就已停止对 5.4.x 的所有支持(包括安全更新),当前(2026年)继续运行该版本等同于主动暴露高危攻击面。
确认是否仍在运行 php-cgi 模式
漏洞仅影响以 php-cgi 二进制直接作为 CGI 网关运行的场景(非 php-fpm 或 mod_php)。常见误判点:XAMPP、WAMP、某些老旧 Apache + mod_cgi 配置默认启用该模式。
- 检查 Web 服务器配置中是否存在
ScriptAlias /cgi-bin/ "/path/to/php-cgi.exe"或类似AddHandler cgi-script .php规则 - 访问
http://your-site.com/phpinfo.php,查看Server API字段是否为CGI/FastCGI(注意:FastCGI 模式不受此漏洞影响,但 CGI 模式会显示为CGI/FastCGI,需结合进程启动方式进一步确认) - 在 Linux 下执行
ps aux | grep php-cgi,若看到带-b(绑定端口)以外参数、且无-c(配置文件)或-y(fpm 配置)的孤立php-cgi进程,大概率是 CGI 模式
快速验证漏洞是否可利用
不建议在生产环境直接测试,但若需确认风险等级,可在隔离网络中用如下请求探测:
GET /index.php?-s HTTP/1.1 Host: example.com
若响应返回 PHP 源码(而非 404 或 500),说明 php-cgi 正在将 querystring 当作参数解析,漏洞存在。更危险的利用如:
GET /index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input HTTP/1.1 Host: example.com
配合 POST body:<?php echo "poc"; ?>,若返回 poc,即证明 RCE 可行。
- 该验证依赖
short_open_tag开启(5.4.1 默认开启),且未禁用php://input - 部分 WAF 或 Nginx 配置会拦截含
-d的 querystring,导致误判“已防护”,实则后端仍脆弱 - Apache 的
mod_security规则若未更新至 2012 年后版本,对-s参数基本无识别能力
无法升级时的临时缓解措施
PHP 5.4.1 已无补丁可用,所谓“缓解”只是降低被利用概率,不能消除根本风险:
- 立即在 Web 服务器层禁用所有
.php文件的 CGI 执行权限:Apache 中加<filesmatch> SetHandler none </filesmatch>;Nginx 中移除fastcgi_pass或改用return 403 - 若必须保留 PHP 功能,强制切换为
php-fpm模式(需额外部署),并确保php-fpm进程不监听公网端口、仅通过 Unix socket 通信 - 在 php.ini 中设置
disable_functions = system,exec,shell_exec,passthru,proc_open,popen,但注意:攻击者可通过include或file_get_contents绕过此类限制 - 启用
open_basedir并严格限定到 Web 根目录,防止路径遍历读取系统文件(如/etc/passwd)
为什么不能只打“补丁”或改配置
这个漏洞不是某个函数逻辑错误,而是 php-cgi 二进制在 CGI 模式下的设计缺陷:它把整个 querystring 当作命令行参数传给自身解析。RFC 3875 要求如此,PHP 实现也照做了——修复它等于重写 CGI SAPI 层,官方从未提供热补丁。
- 所有号称“修复 CVE-2012-1823 的 5.4.x 补丁”均为第三方非官方修改,未经 PHP 安全团队审计,可能引入新问题
- 修改
php.ini中的variables_order或request_order对该漏洞完全无效 - 即使关闭
display_errors、隐藏phpinfo(),也无法阻止攻击者通过盲注方式触发 RCE
真正有效的动作只有两个:停用 CGI 模式,或升级到仍在支持周期的版本(如 PHP 8.2/8.3)。任何“临时加固”都只是争取迁移时间的缓冲带,不是解决方案。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











