← 最新论文
💻 computer science

Repairing vulnerabilities without invisible hands. A differentiated replication study on LLMs

本文提出了一项差异化复制研究,证明了大型语言模型在自动化漏洞修复方面的成功可能是由对训练数据的记忆而非真正的推理所驱动的,因为改变提示词中的故障位置会显著降低其生成正确补丁的能力。

原作者: Maria Camporese, Fabio Massacci

发布于 2026-01-15
📖 1 分钟阅读☕ 轻松阅读

原作者: Maria Camporese, Fabio Massacci

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正试图教一名非常聪明但略显傲慢的学生如何修理一台坏掉的机器。你向他展示了这台机器,准确地指出了损坏的部分,并问道:“你能修好它吗?”

学生看着机器,思考片刻,然后交给你一个完美的修复方案。你为他欢呼!但随后你开始怀疑:这个学生是真的学会了如何修理机器,还是仅仅从他之前读过的一本书中记住了这个特定问题的答案?

这篇论文是一部关于大型语言模型(LLM)及其修复计算机安全漏洞(漏洞)能力的“怀疑论侦探故事”。作者 Maria Camporese 和 Fabio Massacci 怀疑,我们目前看到的惊人结果可能是一种骗局。他们称这些骗术为**“隐形之手”(Invisible Hands)**。

以下是他们利用简单的类比对这项调查进行的拆解:

三种“隐形之手”(嫌疑人)

作者认为有三个隐藏因素在帮助这些 AI 模型表现得比实际更聪明:

  1. “泄题的教科书”(数据泄露):
    想象学生正在参加考试,但答案不小心印在了试卷背面,而且学生在考试前已经学习过那张试卷了。在 AI 世界中,“教科书”就是漏洞和修复的数据库。如果 AI 在训练时已经学习过现在要求它修复的完全相同的漏洞,那么它就不是在进行“修复”,而是在背诵记忆中的答案。

  2. “完美的 GPS”(完美定位):
    通常,当我们要求 AI 修复一个漏洞时,我们会准确告诉它哪一行代码是损坏的。这就像给学生一张地图,并在损坏的齿轮处画了一个巨大的红叉。作者怀疑,如果你去掉那个“红叉”,或者把“红叉”移到错误的齿轮上,学生可能会感到困惑。如果 AI 真的足够聪明,即使你指向了错误的地方,它也应该能找到损坏的部分。如果它失败了,说明它只是在跟随那个“红叉”,而不是理解了机器。

  3. “填空游戏”技巧(补全 vs. 修复):
    有时,我们要求 AI 修复代码的方式就像是在玩“填词游戏”(Mad Libs)。我们删掉损坏的部分,然后说:“请填空。”由于 AI 模型非常擅长预测句子中的下一个词,它们可能会通过猜测最符合逻辑的常见词来完成修复,而不是因为它们理解了其中的逻辑。

实验:“位移 GPS”测试

为了证明他们的理论,作者设计了一个聪明的实验。他们拿了一个标准的 AI 修复安全漏洞测试,并加入了一个转折:他们故意对 AI 撒了谎。

  • 设置: 他们告诉 AI,“漏洞在第 10 行。”
  • 转折: 实际上,他们告诉 AI 漏洞在第 12 行、第 14 行或第 8 行。他们移动了“位置”。

假设:

  • 如果 AI 是“天才”(具备泛化能力): 它应该观察代码,意识到漏洞实际上在别处,并无论你指向哪里都能正确修复它。
  • 如果 AI 是“作弊者”(仅靠记忆): 它会忽略你错误的指向,查看它的“记忆库”,然后吐出它为原始问题记忆下的答案。或者,如果指向的位置偏差太大,它会感到困惑并彻底失败。

作者预测,如果 AI 只是在记忆,那么无论你指向正确的位置还是偏移 8 行的位置,它的结果都会是一样的。这就像一个知道答案是“42”的学生,只要问题看起来稍微有点熟悉,无论你问什么,他都会写下“42”。

“第二意见”(评审员)

作者还加入了第二个 AI 来充当“评审员”。在第一个 AI 修复代码后,第二个 AI 会检查它。

  • 理论: 如果第一个 AI 只是在背诵答案,那么第二个 AI(同样也背诵了相同的答案)应该能够非常好地识别出那个“正确的”记忆答案,并拒绝其他的修复方案。
  • 测试: 如果你破坏了指令(即移除了“隐形之手”),第二个 AI 应该会突然感到困惑,并失去分辨好坏修复方案的能力。

他们正在做的工作

他们正在对一个 Java 代码漏洞数据集进行这项测试。他们正在:

  1. 移动目标: 告诉 AI 漏洞在错误的地方。
  2. 改变语言: 重命名变量,以便 AI 无法通过匹配记忆中的单词来完成任务。
  3. 检查工作: 使用自动化测试和人类专家来查看修复是否真的有效。

目标

他们并不是想说 AI 是没用的。他们想知道:AI 真的在学习如何修复安全漏洞,还是仅仅像一只鹦鹉一样重复它听过的内容?

如果他们发现移动“漏洞位置”并不会改变 AI 的成功率,这就证明 AI 只是通过记忆在作弊。如果当他们搞乱指令时,成功率下降了,这意味着 AI 确实在尝试理解问题。

简而言之:这篇论文是一场针对 AI 代码修复的“测谎仪测试”,旨在区分真正的智能与巧妙的记忆。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →