来源笔记

Verify Before You Fix: Agentic Execution Grounding for Trustworthy Cross-Language Code Analysis

Cross Language Code AnalysisVulnerability DetectionAgentic ValidationAutomated Program RepairCode Llms

本文提出了一条跨语言漏洞分析流程,用于在 Java、Python 和 C++ 之间检测、验证并修复代码。核心主张是,只有在执行确认漏洞可被利用之后才应进行修复,这样可以减少流程中的错误动作。

  • 漏洞流程常把模型预测当成事实处理,错误阳性会流入后续阶段,浪费修复工作。
  • 现有工具通常把检测、验证和修复拆成不同系统,而且很多工具需要针对每种编程语言使用不同模型。
  • 这很重要,因为对未经验证的结果做安全修复,会带来不必要的补丁、降低信任,并可能错过真正的利用路径。
  • 该系统使用三阶段循环:先检测可疑代码,再通过执行验证可利用性,最后只修复已确认的案例。
  • 在检测阶段,它把 Java、Python 和 C++ 代码转换为共享的 Universal AST,并结合两类信号:一个是程序结构的 GraphSAGE 嵌入,另一个是源代码语义的 Qwen2.5-Coder-1.5B 嵌入。
  • 一个学习得到的双向门控模块按样本为结构分支和语义分支分配权重,这也直接说明了是哪一条分支推动了预测。
  • 在验证阶段,LLM 代理构建利用假设和测试脚手架,在隔离的 Docker 环境中运行它们,并要求先有确认性的执行证据,样本才会被标记为可利用。
  • 在修复阶段,经过 LoRA 调优的 Qwen2.5-Coder-1.5B-Instruct 模型生成最小补丁,重新运行检测,并最多迭代五次;失败样本连同诊断轨迹交给人工处理。
  • 同语言检测在 Java、Python 和 C++ 上达到 89.84% 到 92.02% 的准确率0.8837 到 0.9109 的 F1
  • 零样本跨语言检测在六组训练-测试语言配对上达到 74.43% 到 80.12% 的 F1;混合模型的平均 F1 为 0.7631,高于仅语义模型的 0.6981 和仅结构模型的 0.5426
  • 验证阶段在 66.84% 到 71.49% 的案例中确认了被标记样本可利用,在 58.72% 到 62.37% 的案例中拒绝了检测器的错误阳性,并在 2.67% 到 3.98% 的误报率下找回了 11.76% 到 16.21% 的漏检漏洞。
  • 在五次迭代内,修复成功率为 81.37% 到 87.27%,平均迭代次数为 2.3 到 3.4 次;修复后的通过率为 90.44% 到 93.15%
  • 端到端来看,完整流程解决了 69.74% 的漏洞,消除了 61.24% 的错误阳性,避免了 73.13% 的不必要修复,总体流程失败率为 12.27%
  • 消融结果表明两个关键组件都很重要:去掉 uAST 后,跨语言平均 F1 下降 23.42%;关闭基于执行的验证后,不必要修复增加 131.7%,端到端成功率下降 9.56 个百分点