K3ysTr0K3R/PHP-8.1.0-dev-Backdoor

GitHub: K3ysTr0K3R/PHP-8.1.0-dev-Backdoor

针对 PHP 8.1.0-dev 供应链后门的远程代码执行(RCE)漏洞利用与分析工具,用于验证受感染开发快照中的未授权命令执行风险。

Stars: 1 | Forks: 0

# PHP 8.1.0-dev `User-Agentt` 后门远程代码执行 (RCE) # 概述 **PHP 8.1.0-dev User-Agentt 后门**是开源软件历史上最臭名昭著的供应链入侵事件之一。与由编程错误引起的传统漏洞不同,此问题源于**恶意代码被蓄意插入到官方 PHP 源代码仓库中**。 在攻击者成功入侵 PHP Git 基础设施后,该后门于 **2021 年 3 月**出现在 **PHP 8.1.0-dev** 的开发快照中。恶意提交伪装成受信任的 PHP 维护者,并引入了一种隐藏机制,只要接收到特制的 HTTP 标头,该机制就能够执行任意 PHP 代码。 尽管该后门在被发现和移除之前只存在了很短的时间,但任何部署了受感染开发版本的服务器都会立即面临**未经身份验证的远程代码执行 (RCE)** 的风险。 这一事件从根本上改变了 PHP 的开发流程,并最终促使 PHP 源代码仓库从其自托管的 Git 基础设施中迁移出去。 :contentReference[oaicite:0]{index=0} # 为什么该漏洞是独特的 大多数远程代码执行漏洞源于: - 缓冲区溢出 - 输入验证错误 - 内存损坏 - 逻辑缺陷 这个漏洞则不同。 它**不是一个代码 bug**。 它是一个**蓄意植入的后门**,隐藏在合法的 PHP 源代码中。 攻击者没有利用现有的弱点,而是修改了 PHP 本身,以执行由任何发起 HTTP 请求的人提供的任意 PHP 代码。 这使得该事件成为**软件供应链攻击**最著名的例子之一。 # 背景 **2021 年 3 月 28 日**,PHP 的 Git 仓库中出现了两个可疑的提交。 这两个提交似乎都来自著名的 PHP 维护者。 起初它们看起来无害。 提交信息类似于普通的拼写错误修复。 然而,研究人员很快注意到 PHP 解释器中添加了可疑代码。 插入的代码在传入的 HTTP 请求中搜索自定义标头: ``` User-Agentt ``` 注意多出的那个 **"t"**。 这种微妙的拼写差异有助于在后门在随意审查时隐藏起来。 如果标头以触发字符串开头: ``` zerodium ``` PHP 会立即使用以下代码执行其后的所有内容: ``` zend_eval_string() ``` 这实际上允许任何人远程执行任意 PHP 代码。 这些恶意提交在被发现后的几小时内即被移除。后来的调查表明,攻击者是攻陷了 PHP Git 基础设施,而不是合法获取了维护者的签名密钥。 :contentReference[oaicite:1]{index=1} # 根本原因 插入的代码大致执行以下逻辑: ``` Incoming HTTP Request │ ▼ Read User-Agentt Header │ ▼ Does header start with "zerodium"? │ Yes ▼ Execute remaining text as PHP │ ▼ Attacker gains Remote Code Execution ``` PHP 没有将标头视为无害的元数据,而是直接将其作为可执行的 PHP 代码进行评估。 # 技术细节分析 通常,HTTP 请求包含类似于以下内容的标头: ``` GET / HTTP/1.1 Host: example.com User-Agent: Mozilla Firefox ``` 受感染的 PHP 版本额外处理了: ``` User-Agentt: ``` 如果其值以: ``` zerodium ``` PHP 会调用: ``` zend_eval_string() ``` 剩余的内容将变为可执行的 PHP。 概念上: ``` User-Agentt: zerodium │ ▼ zend_eval_string(payload) │ ▼ Remote Code Execution ``` # 攻击流程 ``` Attacker │ │ HTTP Request ▼ GET / User-Agentt: zerodiumsystem("id"); │ ▼ PHP 8.1.0-dev │ ▼ Backdoor Triggered │ ▼ system("id") │ ▼ Command Executed │ ▼ Output Returned ``` 无需身份验证。 无需会话。 无需凭据。 一个 HTTP 请求就足够了。 # 为什么是 "User-Agentt"? 攻击者故意选择 ``` User-Agentt ``` 而不是 ``` User-Agent ``` 因为: - 它看起来几乎一模一样 - 它可以逃避随意的代码审查 - 大多数开发人员会忽略未知的 HTTP 标头 - 现有应用程序将继续正常工作 这个微小的拼写错误隐藏了一个完整的远程代码执行后门。 # 受影响版本 仅有: ``` PHP 8.1.0-dev ``` 特别是 2021 年 3 月事件期间发布的存在后门的开发快照。 稳定版本,例如: - PHP 7.x - PHP 8.0 - PHP 8.1 Stable **从未受影响**。 # 攻击要求 攻击者只需要: - 网络访问权限 - HTTP 连接 - 一个存在漏洞的 PHP 8.1.0-dev 服务器 无需身份验证。 无需暴力破解。 无需登录。 无需事先访问权限。 # 影响 成功利用此漏洞可使攻击者: - 执行任意操作系统命令 - 执行任意 PHP 代码 - 读取敏感文件 - 修改 Web 应用程序 - 上传 Web shell - 安装持久化后门 - 转储数据库 - 窃取凭据 - 提升权限 - 进一步向内部网络渗透 - 完全控制受影响的主机 实际上,此漏洞会导致**服务器被完全控制**。 # MITRE ATT&CK 映射 | 技术 | 描述 | |------------|-------------| | T1195 | 供应链妥协 | | T1059 | 命令和脚本解释器 | | T1505 | 服务器软件组件 | | T1105 | 入口工具传输 | | T1071 | 应用层协议 | | T1106 | 原生 API | | T1055 | 进程注入(可能的利用后行为) | | T1027 | 混淆文件或信息 | # 检测 管理员应立即调查暴露以下内容的系统: ``` PHP/8.1.0-dev ``` 在响应标头中,例如: ``` X-Powered-By: PHP/8.1.0-dev ``` 还应检查 HTTP 日志,查找包含以下内容的可疑请求: ``` User-Agentt ``` 或 ``` zerodium ``` 许多入侵检测系统和 IPS 产品现在都包含了专门针对此攻击模式的特征签名。 :contentReference[oaicite:2]{index=2} # 妥协指标 (IOC) 可能的指标包括: - 包含 `User-Agentt` 的请求 - 以 `zerodium` 开头的标头值 - 意外的命令执行 - 未知的 PHP 文件 - 新的 Web shell - PHP 衍生出的可疑子进程 - 无法解释的出站网络连接 # 利用复杂性 | 属性 | 值 | |-----------|-------| | 身份验证 | 无 | | 用户交互 | 无 | | 复杂性 | 非常低 | | 所需权限 | 无 | | 远程 | 是 | 这被认为是较容易利用的远程代码执行漏洞之一,因为攻击者只需发送一个特制的 HTTP 请求。 # 缓解措施 切勿在生产系统上部署 PHP 的开发快照。 如果发现服务器运行了受感染的构建版本: 1. 立即移除存在漏洞的版本。 2. 升级到稳定的 PHP 版本。 3. 假定已被完全控制。 4. 轮换所有凭据。 5. 审计 Web shell。 6. 审查身份验证日志。 7. 检查计划任务和持久化机制。 8. 如果无法排除被入侵的可能性,请重建服务器。 # 安全教训 该事件证明了几个重要的教训: - 开发构建版本永远不应公开暴露。 - 软件供应链是高价值的攻击目标。 - 代码签名和基础设施安全至关重要。 - 源代码仓库需要持续监控。 - 微小的代码更改可能会隐藏灾难性的漏洞。 - 对上游软件的信任必须始终经过验证。 此次入侵加速了 PHP 开发基础设施的变革,并凸显了整个行业对软件供应链安全日益增长的需求。 :contentReference[oaicite:3]{index=3} # 参考资料 - 关于恶意提交的 PHP Internals 讨论 - PHP 源代码仓库事件报告 - Packet Storm Security 漏洞利用发布 - Juniper Threat Labs IPS 签名 - 社区技术分析 - 公开漏洞利用研究 # 总结 **PHP 8.1.0-dev User-Agentt 后门** remains one of the most significant examples of a software supply chain attack affecting a major open-source project. Rather than exploiting a programming flaw, attackers inserted a hidden backdoor directly into the language's source code, allowing unauthenticated remote execution of arbitrary PHP code through a specially crafted `User-Agentt` HTTP 标头。Although the compromised development snapshots were quickly removed and no stable PHP releases were affected, the incident underscored the critical importance of securing software development infrastructure, verifying code provenance, and avoiding the deployment of development builds in production environments. Today, the vulnerability is widely studied as a landmark case in supply chain security and serves as a reminder that the integrity of the software build process is just as important as the security of the code itself.
标签:CISA项目, OpenVAS, PHP, Web安全, 后门利用, 文档安全, 编程工具, 蓝队分析, 远程代码执行