
PHP 8.1.0-dev User-Agentt 后门远程代码执行(RCE)
User-Agentt 后门远程代码执行(RCE)严重性: 严重(CVSS 等效值:10.0)
漏洞类型: 供应链后门 / 远程代码执行(RCE)
受影响软件: PHP 8.1.0-dev(仅限开发构建版本)
攻击向量: 远程(未认证)
是否需要认证: 否
用户交互: 无
影响: 系统完全沦陷
PHP 8.1.0-dev User-Agentt 后门 是开源软件历史上最臭名昭著的供应链入侵事件之一。与源于编程错误的传统漏洞不同,此问题源于恶意代码被故意插入 PHP 官方源代码仓库。
该后门出现在 2021 年 3 月期间的 PHP 8.1.0-dev 开发快照中,此前攻击者成功入侵了 PHP 的 Git 基础设施。恶意提交冒充受信任的 PHP 维护者,并引入了一个隐藏机制,能够在收到特制 HTTP 头时执行任意 PHP 代码。
尽管该后门仅存在很短时间就被发现并移除,但任何部署了被入侵开发构建的服务器都会立即面临**未认证远程代码执行(RCE)**的风险。
这一事件从根本上改变了 PHP 的开发工作流程,并最终促使 PHP 源代码仓库从自托管的 Git 基础设施迁移出去。 :contentReference[oaicite:0]{index=0}
大多数远程代码执行漏洞源于:
而此漏洞与众不同。
它不是编码错误。
它是一个被故意植入的后门,隐藏在合法的 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-Agent
因为:
这个微小的拼写错误掩盖了一个完整的远程代码执行后门。
仅限:
PHP 8.1.0-dev
特指 2021 年 3 月事件期间发布的被入侵开发快照。
稳定版本,例如:
从未受到影响。
攻击者只需要:
无需认证。
无需暴力破解。
无需登录。
无需先前访问权限。
成功利用允许攻击者:
实际上,此漏洞会导致服务器完全沦陷。
管理员应立即调查暴露了以下信息的系统:
PHP/8.1.0-dev
这些信息出现在诸如以下的响应头中:
X-Powered-By:
PHP/8.1.0-dev
还应检查 HTTP 日志中是否包含可疑请求:
User-Agentt
或
zerodium
许多入侵检测系统和 IPS 产品现在都包含专门针对此攻击模式的检测签名。 :contentReference[oaicite:2]{index=2}
可能的指标包括:
User-Agentt 的请求zerodium 开头的头值| 属性 | 值 |
|---|---|
| 认证 | 无 |
| 用户交互 | 无 |
| 复杂度 | 非常低 |
| 所需权限 | 无 |
| 远程 | 是 |
这被认为是最容易利用的远程代码执行漏洞之一,因为攻击者只需发送一个特制的 HTTP 请求。
切勿在生产系统上部署 PHP 的开发快照。
如果发现服务器运行的是被入侵的构建版本:
此事件揭示了几个重要的教训:
此次入侵加速了 PHP 开发基础设施的变革,并凸显了软件供应链安全在整个行业中日益增长的重要性。 :contentReference[oaicite:3]{index=3}
PHP 8.1.0-dev User-Agentt 后门 仍然是影响主流开源项目的软件供应链攻击中最具代表性的案例之一。攻击者并非利用编程缺陷,而是直接将隐藏后门植入该语言的源代码中,从而能够通过特制的 User-Agentt HTTP 头实现未认证的任意 PHP 代码远程执行。尽管被入侵的开发快照很快被移除,且没有任何稳定版 PHP 受到影响,但这一事件凸显了保护软件开发基础设施、验证代码来源以及避免在生产环境中部署开发构建版本的至关重要性。如今,该漏洞作为供应链安全领域的标志性案例被广泛研究,并提醒我们:软件构建过程的完整性与代码本身的安全性同等重要。
| 技术 | 描述 |
|---|
| T1195 | 供应链入侵(Supply Chain Compromise) |
| T1059 | 命令与脚本解释器(Command and Scripting Interpreter) |
| T1505 | 服务器软件组件(Server Software Component) |
| T1105 | 入站工具传输(Ingress Tool Transfer) |
| T1071 | 应用层协议(Application Layer Protocol) |
| T1106 | 本机 API(Native API) |
| T1055 | 进程注入(Process Injection,可能的利用后操作) |
| T1027 | 混淆文件或信息(Obfuscated Files or Information) |