Qsnh / php2shell-fixed
git clone https://github.com/Qsnh/php2shell-fixed.git
宝塔面板(BT Panel)上已停止维护的 PHP 版本(5.4 – 8.1)的 PHP2Shell(CVE-2026-109618 / CVE-2026-109619)修复包。仓库里有打好补丁的源码包,以及一键完成编译、替换、回滚的脚本。
+46
stars, 24h · #853
+46
stars, 7 days · #4,376
+46
stars, 30 days · #14,021
46
★ total · +46% this week
4
forks · 0 open issues
Star history starts 2026-10-23; the chart appears after the second daily snapshot.
LanguageShell
License—
Created2026-10-22 (1d ago)
Last push1d ago
Watchers1
OwnerUser
Links
README excerpt
# php2shell-fixed > 联系方式:有事情可以联系 宝塔面板(BT Panel)上已停止维护的 PHP 版本(5.4 – 8.1)的 **PHP2Shell(CVE-2026-109618 / CVE-2026-109619)修复包**。仓库里有打好补丁的源码包,以及一键完成编译、替换、回滚的脚本。 > Patched PHP source tarballs and a one-command upgrade script that fix PHP2Shell (CVE-2026-109618 / CVE-2026-109619) for end-of-life PHP 5.4 – 8.1 builds installed by BT Panel (宝塔). --- ## 漏洞简介 2026-10-21,PHP 官方披露了两个漏洞,CVSS v4.0 评分都是 9.2,**无需登录即可远程执行代码**: | CVE | 说明 | |---|---| | CVE-2026-109618 | 内存耗尽时,请求数据只初始化了一半,清理阶段被当作有效数据使用,导致远程代码执行 | | CVE-2026-109619 | 上一个请求留下的内部状态在内存释放后仍被保留,被同一 worker 的下一个请求使用,导致远程代码执行 | PHP-FPM、Apache mod_php、php-cgi 等处理 Web 请求的方式都受影响。PHP 官方只为 8.2 – 8.5 发布了修复版本(8.2.35 / 8.3.36 / 8.4.27 / 8.5.12)。8.1 及更早的版本没有正式修复版:官方只给 7.4、8.0、8.1 发了源码补丁,7.3 及以下什么都没有。 官方公告: ## 支持的版本 | 宝塔 PHP 版本 | 升级后 | 补丁来源 | 源码包 | |---|---|---|---| | 5.4.x | 5.4.45 | 基于官方 7.4 补丁移植到 PHP5 引擎(**非官方**) | `php-5.4.45-cve2026.tar.gz` | | 5.5.x | 5.5.38 | 基于官方 7.4 补丁移植到 PHP5 引擎(**非官方**) | `php-5.5.38-cve2026.tar.gz` | | 5.6.x | 5.6.40 | 基于官方 7.4 补丁移植到 PHP5 引擎(**非官方**) | `php-5.6.40-cve2026.tar.gz` | | 7.0.x | 7.0.33 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.0.33-cve2026.tar.gz` | | 7.1.x | 7.1.33 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.1.33-cve2026.tar.gz` | | 7.2.x | 7.2.34 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.2.34-cve2026.tar.gz` | | 7.3.x | 7.3.33 | 基于官方 7.4 补丁移植(**非官方**) | `php-7.3.33-cve2026.tar.gz` | | 7.4.x | 7.4.33 | PHP 官方补丁 `712e60f9ed` | `php-7.4.33-cve2026.tar.gz` | | 8.0.x | 8.0.30 | PHP 官方补丁 `82f8f31b16` | `php-8.0.30-cve2026.tar.gz` | | 8.1.x | 8.1.34 | PHP 官方补丁 `1d7dec178a` | `php-8.1.34-cve2026.tar.gz` | - 每个源码包都是 **php.net 官方发布的源码**(SHA256 与 php.net 公布值一致),加上 `patches/` 目录里对应的补丁。包内的 `CVE-2026-PATCH/` 目录也附了补丁原文 - 升级目标是各分支的最后一个版本,所以同时也会带上这些年已发布的其他安全修复 - 同一大版本内升级,扩展 ABI 不变,redis、swoole_loader 等已安装的扩展**不需要重新编译** - **PHP 8.2 及以上**:直接在宝塔面板里更新到官方修复版即可,不需要本仓库 > ⚠️ 5.4 – 7.3 的补丁是从官方 7.4 补丁移植的,**没有经过 PHP 官方审核**(其中 5.4 – 5.6 是移植到 PHP7 之前的老引擎,差异更大)。移植细节见下文的补丁说明。介意的话请优先升级到 PHP 8.2+。 ## 支持的系统 脚本只依赖 bash、coreutils、gcc/make 这些基础工具,用服务器上**原来编译 PHP 的环境和编译参数**重新编译,不绑定具体发行版。 | 系统 | 编译器 | 实测情况 | |---|---|---| | Ubuntu 16.04 | gcc 5.4 | ✅ x86_64:10 个版本全流程 + 回归测试;ARM64:7.0 – 8.1 全流程,5.4 – 5.6 编译 + 回归测试 | | CentOS 7 | gcc 4.8.5 | ✅ x86_64:10 个版本全流程 + 回归测试;ARM64:7.0 – 8.1 全流程 | | Debian、Ubuntu 18.04+、CentOS 8 / Rocky / AlmaLinux 等 | — | 未实测,理论上可用 | "理论上可用"的前提是:宝塔当初能在这台服务器上把这个 PHP 编译出来。如果之后系统升级过(比如 openssl 被换掉了),`build` 这一步可能会失败。失败时线上 PHP 不受任何影响,把 `/www/server/php-cve2026/logs/` 里的日志拿去排查即可。 ## 快速开始 以 PHP 7.4 为例,其他版本把 `74` 换成 `54` / `55` / `56` / `70` / `71` / `72` / `73` / `80` / `81`。所有命令都用 root 执行。 ### 1. 下载脚本和源码包 只需要下载**脚本**和**你要升级的版本对应的源码包**,放在同一个目录里: [code] CentOS 7 的 `sha256sum`(coreutils 8.22)不支持 `--ignore-missing`,改用下面这条,只校验已下载的文件: [code] 服务器访问 GitHub 很慢的话,可以在本地电脑下载好,再用宝塔面板的"文件"功能上传到 `/root/phpfix`。 ### 2. 确认哪些站点在用哪个 PHP [code] ### 3. 编译(不影响线上) [code] 大约需要 10 – 40 分钟,看到"编译完成,补丁自检通过"就成功了。这一步失败的话线上不受任何影响,日志在 `/www/server/php-cve2026/logs/`。 可用内存不足 1G 时,建议先加一块临时 swap: [code] ### 4. 安装(建议在业务低峰期) [code] 脚本会依次: 1.