AI说代码没漏洞?马上被 PHP 打脸了

前几天 PHP 高危漏洞,整个互联网都兵荒马乱,连高市都被惊动了。

欧洲多国的政府网站在同一时间陆续下线,荷兰的数字身份系统与个人政务门户紧急关闭。日本各大平台相继挂出维护公告,连出去吃一顿寿司郎,顾客都被告知手机小程序因系统升级暂停服务。有内阁官员在深夜紧急发文,呼吁所有负责运维的人员今晚务必紧急应对,如果实在无法及时给网站打上补丁,哪怕临时拔掉网线停止运行,也是降低风险的必要手段。

这两个被安全社区称为 PHP2Shell 的漏洞,编号分别为 CVE-2026-109618 与 CVE-2026-109619,CVSS 评分为 9.2 分。在默认配置下,未经身份验证的外部请求可以通过特定参数触发底层异常,从而获取服务器的执行权限。

巧合的是,漏洞公开的前后几天,关于 AI 代码验证的技术讨论也十分活跃。

OpenAI 官方高调宣布,自家最新的前沿模型参与了关键漏洞的挖掘,将其列为安全计划的重大战果。而在开源社区和学术圈,Anthropic 刚刚放出的技术研究也引来无数赞叹,论文称 AI 已经可以为开源代码库生成能够通过独立检查器核验的形式化证明。在很多人的设想中,AI 正在以前所未有的速度消灭人类程序员写的失误,一个代码不会再有漏洞的新时代似乎触手可及。

然而,一边是硅谷实验室里被数学公式证明得无懈可击的理想代码,另一边却是现实世界里大批关键网站仓皇拔掉网线断网自保。

事实证明,即使应用层代码通过了严格的单元测试、静态分析甚至形式化证明,一旦承载代码运行的底层解释器存在缺陷,系统依然面临被直接攻破的风险。

漏洞挖掘复盘与 AI 的实际角色

在漏洞披露初期,部分技术宣传倾向于强调大语言模型在安全挖掘中的自动化表现。但在参与挖掘与复盘的安全研究人员公开技术细节后,整个过程展现出了更严谨的工程原貌。

最早发现漏洞并写出可用攻击验证的人,其实是独立安全研究员 Ryan Austin。早在八月初,他就已经在社交平台上发出了包含发现哈希的线索。在随后的复盘文章里,这位一线研究者特意强调,最初的发现并没有依赖什么特殊的工具框架,更没有使用普通人触碰不到的神奇模型。

真正决定漏洞被挖出来的,是对目标底层历史长达数十年的积累。研究员手中的线索,一路回溯到了 2004 年公开记录的内存限制缺陷,以及 2020 年一份未被充分重视的问题报告。这些历史记录构成了排查的主要方向。

AI 在这个过程中主要承担了加速验证的工作。在传统安全研究中,将一个理论上的内存缺陷转化为稳定可靠的验证脚本,通常需要研究人员耗费数周时间反复调试。借助大语言模型的辅助分析,这个验证周期被缩短到几天以内。

这种分工反映了当前技术的真实定位。研究的方向与直觉主要依赖人类对系统历史和代码上下文的理解,模型则显著提高了信息检索与代码验证的效率。

需要注意的是,随着利用验证门槛的降低,防守方面临的时间压力也相应增加。一旦漏洞补丁公开,逆向分析修复代码并提炼攻击特征的成本大幅下降,留给系统维护人员排查和升级的窗口期变得更加紧迫。

解释器内核缺陷与验证盲区

过去绝大多数关于网站被攻破的事故,问题出在上层应用的业务代码里。比如程序员少写了一道输入过滤,让黑客把恶意 SQL 语句传进了数据库;或者在处理上传时没有判断后缀,让人把木马文件存进了服务器。

而这次漏洞之所以引起广泛关注,原因在于其触发位置不在应用层的业务逻辑,而在 PHP 解释器的底层内核。

根据 W3Techs 的统计,在已知服务端开发语言的网站中,大约 69% 仍在使用 PHP 运行服务。在典型的部署架构中,Web 服务器接收请求后,通过 FastCGI 协议将数据交由 PHP-FPM 处理,底层由 C 语言实现的解释器负责内存分配、请求解析与代码执行。

这次的两个高危漏洞,直接深埋在 PHP 解释器内核的 C 语言实现中。换句话说,哪怕你的网站除了打印一行 Hello World 之外什么都没写,也一样逃不过被直接攻破的命运。

CVE-2026-109618 的成因与内存异常处理机制相关。当请求处理中遇到内存耗尽情况时,底层采用中断跳转(longjmp)的方式终止执行。如果该操作发生在部分内部数据尚未完全初始化的阶段,后续的内存清理例程会把未初始化的数据当作有效对象处理,为攻击者提供了执行特定指令的途径。CVE-2026-109619 则涉及变量作用域释放后的状态残留,上一次处理未清理干净的内存被后续请求复用,存在泄露数据甚至改变执行流程的隐患。

从请求处理路径来看,外部恶意载荷在 Web 服务器与 FastCGI 协议解析阶段就已经开始对解释器产生影响。由于缺陷发生在应用脚本被读取并执行之前,上层业务代码无论如何编写,都无法拦截底层运行时的状态异常。

形式化证明的工程边界

这正是为什么当下关于 AI 形式化证明的狂欢,在真实的运维现场显得格外尴尬。

Anthropic 在技术附录中探讨了使用大模型辅助生成证明的方法,展示了数学规格在排查逻辑边界上的严谨性。在 Hacker News 的技术讨论中,很多开发者赞赏了这种确定性验证带来的进步,但同时也聚焦于其在大型工程中的适用边界。

软件工程中的各类质量保障手段有着清晰的分工。

  • 单元测试针对固定样例验证预期输出。

  • 性质测试引入随机输入排查边界异常。

  • 形式化证明利用数理逻辑推导函数是否满足规格定义。

这些验证手段关注的都是应用代码本身的逻辑一致性。在推导过程中,它们预设了一个理想的前提,即执行代码的硬件、操作系统、标准库以及语言解释器完全符合规范,不存在未预料的副作用。

但在生产环境中,这种理想状态并不存在。形式化证明可以确认一个支付扣减函数在算法层面不存在逻辑漏洞,却无法保证 PHP 解释器在分配内存时不会发生越界。应用层代码的正确推导,无法替代对底层运行环境的安全核验,这也是安全领域常提及的原则:证明通过不等于部署安全(Proof-checked is not deployment-verified)。

只要底层的 C 语言运行时存在裂缝,纯代码层面的证明通过,就绝不等于生产部署安全。把代码逻辑的无误误解为整个系统的固若金汤,是当下技术团队最大的盲区。

存量系统的长尾与补丁现实

面对这样高危的bug,最理所当然的呼吁往往只有两个字:升级。

然而,对于数以百万计真正支撑着业务运转的团队来说,说起来是简单,但实现却很难。

公开统计数据显示,现存的 PHP 站点中,大约 65% 运行在 PHP 8.x 分支。剩下的存量中,大约 27% 仍在使用 PHP 7.x,还有约 7% 运行在 PHP 5.x。这两类老旧版本早在数年前就已经结束了官方支持周期(EOL)。

官方针对本次漏洞发布的修复版本仅包含 8.2、8.3、8.4 和 8.5 四个活跃分支。这意味着全球大约三分之一的存量 PHP 站点无法直接获取官方推送的安全补丁。

对于维护这些系统的企业而言,直接跨主版本升级往往面临高昂的改造代价。旧项目通常依赖已被废弃的语法特性或陈旧的扩展组件,贸然升级解释器可能导致业务代码直接报错。在有限的时间内,推倒重写既不现实,也容易引入新的不可控风险。

在这个节骨眼上,劝这些企业推倒重来搞重构,或者寄希望于 AI 连夜把几十万行老旧代码无损改写,纯属天方夜谭。所以面对这种情况,工程上更可行的应对方式是在维持主版本兼容性的同时,为底层运行环境补充必要的回移植补丁。

建立运行时的确定性

处理类似的底层安全更新,需要将关注点从单一的代码测试,延伸到包含运行时、服务配置与进程状态的完整证据链。

在开发与多版本维护方面,像 ServBay 这样的本地开发集成环境在此次事件中就立了大功了。

针对本次漏洞,ServBay 除了第一时间同步 PHP 8.x 主流分支的修复包,还针对已经停止官方维护的旧版 PHP(包括 7.x 乃至 5.6 分支)提供了回移植的安全补丁支持。

这种做法为维护遗留系统的团队提供了一个务实的缓冲方案。开发者不需要承担重写代码的风险,可以在原有的大版本分支下更新已包含修复补丁的解释器包,消除底层运行时的安全隐患。

同时,配合按项目独立绑定 PHP 版本的机制,不同的站点可以根据自身依赖各自运行在对应的隔离环境中。新项目可以使用最新的 PHP 版本,老旧系统则固定在已打补丁的旧版本中,避免了全局环境互相干扰的问题。开发者在借助 AI 编写代码或运行测试的同时,底层基础设施能够提供版本明确、配置透明的运行时底座,让上层的逻辑验证与下层的环境安全各就其位。

总结

AI 技术在安全领域的应用,确实提升了漏洞发现、辅助分析与逻辑证明的效率。但工具的发展并没有改变基础软件工程的客观规律。

代码逻辑的自洽,始终建立在底层解释器稳定运行的基础之上。面对 CVE-2026-109618 这类发生在底层的严重缺陷,单纯依靠上层代码的测试或数学证明并不足以消除风险。正视验证手段的边界,结合受控、可复现的基础设施,及时为活跃版本与历史遗留系统应用安全补丁,才是保障服务稳定运行的扎实路径。

相关推荐
孟健2 小时前
Claude Code 接入 Cloudflare 3.7万星安全审计 Skill:从全量烧钱到按需裁剪的实战方案
开源·ai编程·claude
tq10863 小时前
对PHP漏洞的思考
php
wangruofeng3 小时前
黑色十月:AI 找到的漏洞,两小时数十万次利用
人工智能·安全·php
殷紫川3 小时前
14款大模型Java编码能力横评:闭源三强断层领先,开源追赶到哪一步了
aigc·openai·ai编程
Behavior3 小时前
Kimi K3.1 疑似现身 LMArena:匿名代号 Kibitz、SGLang 单日六条加固 PR,月底有望官宣
llm·aigc·vibecoding
文谦南宁AI普工3 小时前
跨组织 Agent 对接收官:12 条硬条款 + 一个能跑的门检校验器
aigc·agent·ai编程
用户4015823324623 小时前
对话一长,AI 就忘了你说过的话?Claude Code、Codex、Aider、WES Code 怎么压缩上下文
人工智能·go·ai编程
qinglongcn4 小时前
如何安全地停下一个正在工作的 Agent——中断与崩溃恢复
agent·ai编程
摩羯12304 小时前
AI提示词备查与原始输入输出记录:生成式人工智能合规的可验证实现
人工智能·aigc