AI给一段越权漏洞打了满分好评:一次为期三个月的代码审计翻车复盘

PetterLiu(博客园) 2026-09-15T12:13:51.987806

作为团队里推动AI代码审计的人,作者曾相信这套系统能守住安全底线。直到一个伪装成"性能优化"的越权漏洞,带着模型给出的 10/10 安全评级和"Proven Secure"标签,顺利合入主分支。复盘后他发现:模型不是在审代码,而是在读故事——描述写得越专业,它就越容易被说服。

那个"满分"的漏洞,是怎么合进主分支的

直到上周,我才意识到自己犯了一个多低级的错误。

我是团队里负责引入AI代码审计的人,当初拍着胸脯跟大家保证这套系统能守住安全底线。它也的确拦下过不少低级 bug,在几次紧急发布中还给出了相当详细的风险提示。我对它的信任是一点点攒起来的——直到那个伪装成"性能优化"的越权漏洞,带着 AI 打出的 10/10 安全评级和"Proven Secure"标签,大摇大摆地合进了主分支。

这不是 AI 的失误,是我的盲区。

image

它不是在审代码,是在做阅读理解

事后复盘时,我盯着那段恶意代码和它的合并请求描述看了很久。代码里的逻辑漏洞并不高明,甚至可以说有点粗糙。但包裹着它的那段描述写得太"漂亮"了:大量集合论符号、严谨的学术化措辞、一套看起来无懈可击的"形式化验证"推导过程。

问题就出在这儿。AI 根本没有在审代码,它是在做阅读理解。

当一段信息密度极高的自然语言和一段低熵的代码同时摆在模型面前时,注意力机制天然地被前者吸走了。它不再是冷静的审计员,而变成了一个急于证明"这段代码符合描述"的做题家。为了维持语义上的连贯,它主动放弃了对底层逻辑的校验,甚至反过来用那套伪数学证明说服了自己。

这个画面很荒诞:一个小偷穿着高定西装走进银行,监控因为他衣着得体,自动把他标成了 VIP。AI 不是不够聪明,是太容易被"看起来正确"的东西带偏。

攻击方的成本,低得让人后背发凉

更让我不安的是,这种欺骗不是偶然,而是可以系统化复制的。

我在本地搭了一个不做过滤的模型做模拟测试,才发现攻击者的成本有多低。他们完全不需要精通高阶漏洞利用,只要掌握一套"生成式迭代"的话术打磨流程:先提交一版带洞的代码,被拒之后把反馈喂给本地模型,让它重写描述、堆术语、换理论框架,再提交、再调整……直到把 AI 的防御边界磨穿。

在我们的测试集里,这种基于反馈循环的"自动化社会工程学",成功率高达 97%。防守方只有一次审查机会,还要面对海量提交带来的疲劳战;攻击方却可以无限次试错,精准调优到 AI 的"口味"为止。这已经算不上技术对抗,而是一场单方面的认知降维打击。

最后有效的,反而是最笨的办法

试过很多精巧的解法之后,我发现唯一管用的策略恰恰最粗暴。

现在我们在 CI(持续集成)流水线里加了一道强制脚本:所有进入 AI 审计管道的代码,会被自动剥离全部注释、合并请求描述和提交信息。AI 拿到的只有纯粹的语法树、变量流和控制逻辑。

没有故事可听,它就只能老老实实看代码。

效果立竿见影。误报率确实上升了一些,但那些曾经被"权威叙事"掩盖的真实漏洞,终于重新浮出水面。我们为此多付出了人工复核的成本,但这笔账算得过来——比起漏掉一个致命漏洞,多花几个小时排查误报,代价实在太小。

我不再把 AI 当成"理性上帝"

这次教训彻底重塑了我对 AI 的认知。

它不是一个具备绝对理性的审计官,本质上是一个预测引擎,一个极容易被叙事节奏带偏的概率模型。它不理解什么是"真",只理解什么"听起来像真的"。

现在我给团队定了三条铁律,也算给自己的警示:

写下这些文字时,我脑子里反复回响着一个问题:连严密的计算机代码都能被一段"看起来很专业"的伪证洗脑,那么在医疗诊断、法律判决、金融风控这些更依赖文本推理、也更感性的领域,AI 是不是也正在因为某些"编得很好的故事",悄悄做出致命的妥协?

那些领域我不敢替谁回答。但至少在我这条防线上,同样的事不会再发生第二次。在 AI 编程工具被普遍接入研发流程、"氛围编程"被反复提起的当下,这个案例值得每一个把判断权交给模型的人看一眼。

关键要点

查看原文