PHP2Shell:AI 如何迫使软件偿还40年的技术债务
PHP2Shell漏洞将一个存在两年的PHP崩溃错误转变为远程代码执行漏洞,使WordPress、Drupal、NASA、维基百科和白宫网站面临风险——而一旦AI工具被指向代码,大约两周内就被发现了。这一事件由IEEE Spectrum于2026年11月报道,已成为一个更大论点的参考案例:AI已经降低了在数十年遗留软件中发现可利用漏洞的成本,迫使行业面对其推迟了40年的技术债务。
PHP2Shell到底是什么
PHP2Shell是PHP中的一个严重漏洞,PHP是1994年创建的服务器端语言,至今仍支撑着互联网的很大一部分。该漏洞允许攻击者读取敏感数据并在主机服务器上运行恶意代码,从而可能安装恶意软件或窃取关键数据。
其底层的错误并不新鲜。早在2024年就报告给了PHP基金会,表现为内存不足错误——这类错误通常只会导致程序崩溃。由于崩溃很常见且通常不危险,该报告一直未被处理。
“如果你在任何时间点查看,都会有一堆等待修复的错误报告,它们只是崩溃。大多数人并不太重视它们。” — 哥伦比亚大学计算机科学副教授Suman Jana
转折点出现在网络安全公司Calif在OpenAI的赞助下独立审计PHP时。在两周内,一名由AI工具辅助的Calif研究人员找到了一种将内存不足错误转化为任意代码执行的方法。Wiz公司确认并扩展了这些发现。随后,一个由四名PHP基金会工程师组成的团队花了两个月时间开发补丁。
据公开所知,该漏洞在恶意行为者获得之前已被研究人员报告,并且补丁先发布。同期披露的其他重大安全问题包括影响Node.js的Brotli远程代码执行漏洞、Ruby正则表达式引擎中的三个错误,以及一个密钥在毫秒内被破解的证书颁发机构。
为什么AI改变了利用的经济学
AI不需要成为自主黑客就能改变安全平衡。它只需要让痛苦且高度具体的推理变得足够便宜,使更多人能够做到。
利用内存错误需要弄清楚如何跳转到特定程序的特定内存点,并确定按什么顺序覆盖哪些位。Suman Jana将其描述为繁琐而非天才的工作。
“这真的不是火箭科学。只是有很多非常具体的推理,做起来很痛苦。而我认为AI在这方面做得非常好。” — Suman Jana,哥伦比亚大学
Jana明确表示人类仍然至关重要:Calif、OpenAI和Wiz的研究人员在网络安全和PHP方面都有深厚的专业知识。他的主张更窄但更有影响力——AI提高了顶尖0.1%专家的产出,并让略低于该层级的人无需掌握每个细节就能操作。
Hacker News评论者将这一观点扩展到攻击经济学。有人描述了从复杂攻击需要昂贵专业人士的世界,到攻击成本仅为几美分到几美元的世界转变:
“在大多数公司中,安全通过模糊保密一直很重要,只要进行复杂攻击的门槛是让昂贵的IT专业人员去做,你就可以相对放松……现在进行这样的攻击只需几美分到几美元,这完全改变了游戏规则,每个人都是目标。” — @ThePhysicist
另一个人将同样的转变描述为一种常见隐含策略的消亡:
“将‘攻击太痛苦’作为安全策略的心态在AI时代不再有效。” — @ctrlaltdileep
发现与修复错误之间的不对称性
PHP2Shell是警告而非胜利的核心原因是,发现错误和修复错误不是对称的任务。发现是可并行且廉价的;修复需要证明攻击的每条路径都已关闭,同时不破坏现有行为。
“发现错误和修复错误之间存在根本的不对称性。因为当你修复错误时,你必须确保你知道攻击的所有部分都已关闭,并且你不会破坏任何现有功能。” — Suman Jana
这种不对称性对PHP等开源项目影响最大,这些项目被广泛依赖但没有明确的收入来源。AI辅助的发现使维护负担更加紧迫,却没有自动为其提供资金。
Jana提出的缓解措施是前沿AI实验室向关键开源代码的安全审计捐赠令牌预算,他认为这应该更频繁地发生,无论是通过协调努力还是捐赠。他还指出形式验证是自动化补丁方面的一种方式:Anthropic于10月22日发布的新版本展示了一个流程,其中LLM生成补丁,另一个LLM生成补丁正确的证明。
“唯一不是由LLM完成的是证明检查器,因为必须有人检查证明,因为LLM会幻觉。所以,你需要某种形式化的东西。” — Suman Jana
反方论点:AI也在创造技术债务
Hacker News上最强烈的反驳是,标题只是故事的一半。AI在加速发现旧漏洞的同时,也在生成很少有人理解的新代码。
“讽刺的是,AI也在让我们创造一个全新的技术债务水平——没有人真正理解正在编写的代码,我们只是信任机器。” — @herval
“搞笑的是人们用vibe coding制作大型AI应用,认为这不会创造技术债务和安全漏洞。如果说有什么不同的话,AI正在发现现有漏洞,并以比历史上任何时候都快的速度创造它们。” — @program_whiz
几位评论者区分了错误和债务。错误是缺陷;债务是没人理解的代码的累积成本。按照这个定义,通过测试但未被理解的AI生成代码是债务创造,而不是偿还。
“技术债务不是错误,技术债务是如果你让AI生成一个应用程序,却几乎不了解它是如何工作的。没有理解的AI会创造无限的技术债务。” — @nwmcsween
一个相关的担忧是AI修复往往很狭窄。评论者报告说,AI生成的补丁可以通过特定测试,但仍然脆弱或引入不明显的故障模式,这在安全关键的修复中最为重要。
框架争议:强制支付还是促成偿还?
Hacker News上的很大一部分人直接拒绝了文章悲观的框架。他们认为,如果AI发现了错误,AI帮助编写了补丁,标题应该是关于消除债务,而不是被迫支付。
“所以,标题应该读作‘AI正在帮助我们消除40年的技术债务。’因为AI发现了错误,而且可能此时也已经生成了补丁。” — @Kevin_Flynn
“你也可以轻松地将此标题为:AI使我们能够修复长期存在的软件安全问题,而这些问题没有人有时间、技能或愿望去发现。我想,这都取决于视角。” — @cushychicken
其他人认为AI消除了维持拖延的借口。以前过于昂贵而无法合理化的工作变得负担得起,这改变了什么算作可接受的忽视。
“AI已经移除了我们所有不消除技术债务的借口。” — @Lucasoato
一个更怀疑的评论者提出,两种框架可能都不正确,结果是一个永久的跑步机,而不是一次性的偿还:如果每个非平凡的修复都带来新问题的风险,行业可能最终会不断翻新代码,仅仅为了保持移动目标。
“如果情况确实如此,而AI无法在有限时间内神奇地产生完美软件,那么真正发生的事情是,敌对AI利用我们技术债务的威胁将迫使我们永远燃烧和翻新代码,仅仅为了保持移动目标。” — @swatcoder
瓶颈是部署,而不是发现
一个实际的反对意见切入了大部分辩论:发现错误变得便宜,但在大型组织中发布修复并不便宜。
“在许多大型组织中,最古老的系统没有明确的所有者,也缺乏足够的自动化测试,发布过程只有几个人理解。当关键补丁到达时,团队仍然无法回答基本问题:这个组件实际上在哪里运行,谁能批准更改,以及我们如何知道我们没有破坏其他东西?” — @rahulsawhneyonl
这就是为什么“灾难已避免”的说法立即引起怀疑。存在补丁不等于部署了补丁。评论者指出,许多运营商不会自动更新PHP,因此易受攻击的表面在披露后很长时间内仍然存在于野外。
“现在不是仍然有易受攻击的服务正在被黑客攻击吗?” — @tlhunter
“很多人实际上不会自动更新他们的PHP,所以……漏洞并没有从野外消失。” — @hoppp
时间线反驳论点
一位评论者挑战了文章关于AI是决定性新因素的假设,指出Brotli/HTTP2Shell时间线作为证据,表明人类过程仍然主导延迟。该时间线显示,一个错误在代码中存在了八年,一个修复在Git中未发布八个月,至少有四位独立研究人员发现并报告了该问题。
“文章将PHP2Shell视为当前漏洞浪潮中最严重的违规者,但HTTP2Shell/Brotli2Shell可以说更糟……至少部分现实实际上仍然是‘人类只是坐在漏洞上数月甚至数年。’” — @vanschelven
这一反驳与其说是驳斥AI论点,不如说是使其复杂化:披露和修复流程在AI出现之前就已经失败。
安全从业者实际上应该做什么
约翰霍普金斯大学信息安全研究所的Matthew Green对机构反应持悲观态度。他的预测是,只有在普通人注意到的严重事件发生后,有意义的资金才会到来,他将其定在可能在2027年初。
“在真正糟糕的事情发生之前,没有人会解决这个问题。而PHP2Shell还不够糟糕,不足以成为真正糟糕的事情。” — Matthew Green,约翰霍普金斯大学
他的即时建议平淡而具体:一旦提供安全更新就安装,而不是等待。
“如果你的手机说‘嘿,有安全更新可用,你想安装吗’,不要等到下周。现在就做。” — Matthew Green
Jana的结论是PHP2Shell是预览而非异常。
“这肯定不会是最后一个。只是谁发现它。希望白帽黑客先发现它,就像这个一样。” — Suman Jana
评论者添加了实际推论:在别人之前对你自己代码使用AI进攻性测试,将漏洞赏金计划视为容量受限,并期望形式验证首先出现在基础软件上,而不是快速移动的应用代码。
“很容易预测,在未来几年内,我们将看到对大量基础软件的验证,以及对其上软件的子验证置信度方案。” — @samuelknight
完美安全的软件甚至可能吗?
讨论中最深的分歧是哲学性的。几位评论者通过《哥德尔、艾舍尔、巴赫》援引哥德尔不完备定理,认为没有系统原则上可以做到不可破解,只能更昂贵地破解。其他人反驳说,实际目标从来不是完美,而是将攻击成本提高到目标价值之上。
“我们是否知道非平凡软件是否可能完全安全?或者无论我们修复多少,总会存在一种破解方式?” — @carra
“没有正常复杂度的软件可以‘可证明’。” — @pyrphoros
这种紧张关系尚未解决,而这正是PHP2Shell故事的真实主题。AI使寻找漏洞几乎免费。行业是使用同样的能力来加固其基础,还是仅仅为了更快地打补丁,决定了未来十年的软件是更安全还是仅仅更疯狂。
“是的,我们会看到AI暴露的错误,这几个月会有点糟糕。但当这一切结束时,软件将比以往任何时候都更安全。” — @glennfiedler
Sources
相关
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch