针对 Debian 12 (bookworm) 和 Debian 13 (trixie) 的只读 PHP 软件包审计工具。 它会将软件包版本与 CVE-2026-109618 和 CVE-2026-109619(通常被称为 PHP2Shell)已发布的修复进行比对。
它会清点已安装分支中的 PHP 核心软件包,包括 PHP-FPM、CLI、CGI 和 Apache mod_php,而不是依赖默认的 php -v 命令。
它还会报告 APT 候选版本、软件包保持状态以及被评估软件包之外的常见运行时路径。
这是一个软件包版本检查工具,不是漏洞利用工具,也不能作为服务器安全的证明。 它不会安装软件包、更改配置、刷新 APT 索引、重启服务、执行 PHP 二进制文件或发起网络请求。
要求:Debian 12 或 13、Python 3.9+ 以及标准的 dpkg/APT 工具。
没有第三方 Python 依赖。检查工具不需要 root 权限;无法访问的扫描路径会被报告为不完整。
git clone https://github.com/toxy4ny/php2shell-checker.git
cd php2shell-checker
# Optional, separate operation: refresh available package versions.
sudo apt update
python3 check-php2shell.py
GitHub 镜像:https://github.com/toxy4ny/php2shell-checker
你也可以只下载 check-php2shell.py,检查后本地运行。
要包含自定义安装目录:
python3 check-php2shell.py --scan-root /www/server/php --scan-root /srv/php
默认扫描覆盖 /usr/bin、/usr/sbin、/usr/lib/cgi-bin、
/usr/lib/apache2/modules、/usr/local 和 /opt。它会识别常见的 PHP、
PHP-FPM、CGI、LiteSpeed PHP、FrankenPHP 和 Apache 模块文件名。不会遍历目录
符号链接;请显式传入它们的目标目录。
| 状态 | 含义 |
|---|---|
FIXED | 包元数据满足已知的已修复版本阈值。 |
UPDATE | 可识别的 Debian 包版本低于其修复阈值。 |
UNKNOWN | 无法自动验证修复情况。请咨询包供应商。 |
较旧的第三方包不会被自动判定为存在漏洞:其供应商可能已向后移植修复。在安装受支持的修复版本或独立验证向后移植之前,它们会保持 UNKNOWN 状态。仅凭 epoch 或较大的打包修订号绝不能算作上游修复。版本命名并不能证明仓库真实性或包完整性。
示例输出(仅作说明,并非对您主机的扫描):
[UPDATE] php8.2-fpm installed=8.2.34-1~deb12u1
Debian package version below 8.2.35-1~deb12u1; source=php8.2 (8.2.34-1~deb12u1)
Candidate: 8.2.35-1~deb12u1 [FIXED] — Debian package version >= 8.2.35-1~deb12u1
如果 APT 提供了更新的修复候选版本,报告会为符合条件的软件包打印一条模拟命令和一条更新命令。两者均不会被执行。 被保持(held)的软件包会被识别并从建议命令中排除。依赖关系和保持状态仍可能影响完整事务:请在继续之前审查模拟结果。
退出码:
| 代码 | 含义 |
|---|---|
0 | 所有发现的 PHP 核心软件包均满足已知修复阈值,且扫描范围内没有其他未知发现。 |
1 | 至少有一个软件包需要更新,且没有未知发现。 |
2 | 存在未知发现、审计不完整、未找到 PHP 核心软件包、不支持的系统或执行错误。优先级高于 1。 |
规则验证于 2026-10-22。它们内嵌在脚本中,不会自动刷新。未来/未映射的分支会被报告为 UNKNOWN。
| 软件包或分支 | 修复阈值 |
|---|---|
Debian 12 php8.2 源码包 | 8.2.35-1~deb12u1 |
Debian 13 php8.4 源码包 | 8.4.27-1~deb13u1 |
| 上游 PHP 8.2 | 8.2.35 |
| 上游 PHP 8.3 | 8.3.36 |
| 上游 PHP 8.4 | 8.4.27 |
| 上游 PHP 8.5 | 8.5.12 |
主要参考:
apt update 错误。FIXED 结果并不能证明主机从未被入侵。python3 -m unittest discover -s tests -v
Fixture 测试无需 Debian 即可运行。在 Debian 上,额外的测试会使用真实的
dpkg --compare-versions 来覆盖发行版边界、预发布版本、epoch 和
打包修订版本。CI 会在两个 Debian 发行版上运行测试和已安装 PHP 的冒烟检查,覆盖 GitHub 和 GitLab。
对于版本规则的更改,请附上主要厂商公告和回归 测试。请在缺陷报告中隐去主机名和敏感路径。请勿包含 凭据或生产配置转储。
MIT。版权所有 (c) 2026 PHP2Shell Checker 贡献者。