Skip to content

Translation in progress Some entries still include text in the original language.

arXiv· arXiv:2601.22952· Yunpeng Xiong, Ting Zhang·Indexed by this site · Originally published

Filtering the Noise: A Comparative Study of LLM Agents in Vulnerability False Positive Filtering

Sifting the Noise: A Comparative Study of LLM Agents in Vulnerability False Positive Filtering

Quick read

Evaluation and benchmarks

Based on 论文 PDF (AI 生成); refer to the original

SWE-agent配Claude Sonnet 4在OWASP上剩余FPR为6.3%,但会漏掉部分真漏洞。

Questions
SAST误报多,造成分诊负担和告警疲劳。已有LLM方法多是一次性提示,不能翻代码库或迭代核验。作者要比较不同智能体架构筛误报的效果、对真漏洞的误伤和计算成本。
Methods
比较三套智能体与零样本提示,骨干是Claude Sonnet 4、DeepSeek Chat、GPT-5。数据为OWASP、Vul4J与截止后OSS-Fuzz;SWE-agent配Claude再消融跨文件导航和多轮交互。
Experiments and results
OWASP上SWE-agent配Claude Sonnet 4剩余FPR为6.3%。Vul4J上GPT-5配OpenHands的FP识别召回为93.3%。OSS-Fuzz上前者识别率与精度均为95.5%,零样本为36.4%。
Limitations and future work
作者称温度设为0仍不保证确定结果;Vul4J的50条样本未必代表原分布,OSS-Fuzz是50条验证集,不能当作全部框架的C/C++排序。作者计划做CWE感知、成本自适应和人在回路,并扩展语言与扫描器。
Experimental setupClaude Sonnet 4、DeepSeek Chat et al. · OWASP Benchmark v1.2、Vul4J et al. · FPR、FP identification rate et al.
Evaluated models
Claude Sonnet 4DeepSeek ChatGPT-5
Benchmarks
OWASP Benchmark v1.2Vul4JOSS-Fuzz
Metrics
FPRFP identification rateprecisionrecallF1accuracyTP retention
AI summaryAn arXiv paper compares three LLM agent frameworks—Aider, OpenHands, and SWE-agent—on vulnerability false positive filtering. On the OWASP Benchmark, the best configuration reduces the initial false positive rate of over 92% to 6.3%; on real Java projects, the best configuration achieves up to 93.3% false positive identification for CodeQL alerts. On a post-cutoff OSS-Fuzz dataset, SWE-agent with Claude Sonnet 4 identifies 95.5% of false positives while maintaining 95.5% precision, compared to 36.4% for plain prompting. The authors note that agent benefits depend on the backbone model and CWE type, with clear advantages over plain prompting for stronger models such as Claude Sonnet 4 and GPT-5, but limited gains for weaker backbones; aggressive false positive reduction may suppress real vulnerabilities, and computational costs vary considerably across frameworks.

An arXiv paper compares three LLM agent frameworks—Aider, OpenHands, and SWE-agent—on vulnerability false positive filtering. On the OWASP Benchmark, the best configuration reduces the initial false positive rate of over 92% to 6.3%; on real Java projects, the best configuration achieves up to 93.3% false positive identification for CodeQL alerts. On a post-cutoff OSS-Fuzz dataset, SWE-agent with Claude Sonnet 4 identifies 95.5% of false positives while maintaining 95.5% precision, compared to 36.4% for plain prompting. The authors note that agent benefits depend on the backbone model and CWE type, with clear advantages over plain prompting for stronger models such as Claude Sonnet 4 and GPT-5, but limited gains for weaker backbones; aggressive false positive reduction may suppress real vulnerabilities, and computational costs vary considerably across frameworks.

Paper analysis

6 questions; open one to read the full answer

  1. What problem does this paper attempt to solve?

    作者要比较三种LLM智能体能否筛掉SAST误报,以及准确性与成本取舍。

    作者要回答的问题是:SAST告警误报很多,不同LLM智能体能否把它们筛到可处置,以及会不会误伤真漏洞、成本差多少。

    • 场景:作者称SAST已接入IDE和CI/CD,但警告常只是语法上像漏洞、实际不可利用。噪声带来人工分诊和告警疲劳,开发者甚至整类抑制警告;作者引用的结果称50.8%的抑制并不压住任何警告,还可能掩盖以后的真漏洞。
    • 现有不足:作者称学习式分类,以及作者称为state-of-the-art的LLM4SA,主要靠一次性提示。这类方法不能翻代码库、补证据或迭代修正;作者认为只合并或调参现有扫描器也不足以大规模使用。
    • 观察:作者在OWASP Benchmark上称,多种SAST的并集几乎把非漏洞用例都标成可疑,且大量误报跨工具共享,更像相关的语义盲点。动机例子是HashMap按不同键存入污点与常量、再取出常量,扫描器仍报命令注入。
    • 本文:比较Aider、OpenHands和SWE-agent,骨干为Claude Sonnet 4、DeepSeek Chat、GPT-5。全交叉评测用OWASP Benchmark v1.2和Vul4J;作者再选剩余FPR最低的配置,在训练截止之后的OSS-Fuzz C/C++上做泛化与能力消融。
    • 任务设定:
      • 目标:给定静态告警和代码访问,判断是真漏洞还是误报。
      • 输入:SAST警告、被标记文件或仓库,以及要求核验该发现的提示。
      • 约束:评测中尽量关闭浏览器和网页工具,避免查到基准答案或修复提交。
      • 判定:对照基准标签或人工标注,同时记录真漏洞被标成FP的情况。
  2. What related research exists?

    作者把先前工作分成SAST误报、一次性LLM检查和仓库级智能体。
    • SAST与误报:查询式工具如CodeQL、Joern、Semgrep把代码收成关系库或图,用查询连接source与sink。作者称工业部署常为规模牺牲上下文和路径敏感,因而误报高;Hu等(2025)报告50.8%的抑制是无用的。
    • 一次性LLM检查:Guo等(2023)与Kang等(2022)用学习方法分类或排序静态警告;Kharkar等(2022)用Transformer区分FP和真漏洞。作者称LLM4SA(Wen等,2024)用告警加代码上下文提高精度;Du等(2025)做路径可行性,IRIS(Li等,2025)推断污点规格,LLMxCPG(Lekssays等,2025)用代码属性图做切片。作者认为这些工作大多把LLM当固定片段上的一次性分类器,不能自行核验或跨文件导航。
    • 仓库级智能体:ReAct(Yao等,2023)使用感知–推理–行动–观察循环;OpenHands(Wang等,2025)与SWE-agent(Yang等,2024)做仓库级工具交互。作者还提到程序修复等任务上的智能体,并称它们筛SAST误报的效果尚未被检验。
    • 基线与数据:主比较基线是同一骨干的零样本提示。RQ3另设LLM4SA风格提示、启发式跨文件上下文,以及把完整运行访问过的文件直接交给模型的oracle-context。数据为OWASP Benchmark v1.2、Vul4J和OSS-Fuzz。

    作者称本文是首次系统考察智能体推理、工具使用和环境交互能否提高SAST结果的可处置性,也是对这三种框架做误报过滤的首次比较性评测。

  3. How does the paper address this problem?

    统一告警核验任务下比较三套智能体与零样本提示,并消融跨文件和多轮能力。

    作者把Aider、OpenHands、SWE-agent放进同一告警核验任务,与零样本提示对比,再用单一配置做能力消融。

    告警从哪来

    • OWASP:用v1.2自带标签。Table 1共2,740条,正例1,415、负例1,325,覆盖11个CWE。默认规则扫描:CodeQL CLI v2.23.7、Semgrep v1.145.0、SonarQube Community v9.9.8、Joern v4.0.454。
    • 并集:至少一个工具报阳就进入候选。CodeQL以analyze的result为阳;Semgrep以scan的result为阳;SonarQube只计VULNERABILITY类issue,不计security hotspot;Joern以joern-scan的每一行Result为阳。
    • Vul4J:79个可复现分支,共6,786,406行,CodeQL得到3,426条告警。固定随机种子抽50条,覆盖26个项目、16条规则,占原扫描规则的37%。补丁按方法级匹配自动标出2条TP,其余48条由有6年经验的第一作者标注,约20人时;最终31条FP、19条TP。
    • OSS-Fuzz:从公开OSV记录回溯,修复提交比Claude Sonnet 4的已知训练截止晚10–12个月。滤掉测试、生成文件和非安全或无CWE标记后剩804条,seed=42抽50条,来自mpv、gpsd、libical、libhevc、quickjs。两名有6年以上经验的标注者原始一致43/50,Cohen's κ=0.725,讨论后22条FP、28条TP。

    智能体与提示

    • 框架:Aider v0.86.1偏结对编程,OpenHands Agent SDK v1.5.2提供编辑器、终端和浏览器式工作区,SWE-agent(commit 1d3cfb)做仓库级自主操作。骨干为claude-sonnet-4-20250514、deepseek-chat、gpt-5-2025-08-07。
    • 输入:每条任务给出SAST警告、测试代码或完整仓库,以及要求核验该发现是真漏洞还是误报的提示。零样本提示设定安全审查角色,给出仓库结构、被标记文件全文和原始发现,并要求只读。完整模板在复现包中,正文未列出全文。
    • 浏览器:能关则关,以免检索到记分卡、讨论或修复提交。作者用OpenHands配Claude,从已完成的关闭浏览器运行中按固定种子打乱并取前50条,再打开浏览器重跑。论文未给出该种子的数值。

    指标与消融

    • RQ1:对照基准标签计TP、FP、TN、FN。FPR是非漏洞实例中被至少一种SAST标成阳性的比例;过滤后报告剩余FPR。
    • RQ2/RQ3:把SAST的FP当作正类。四种结果是识别到的FP、漏掉的FP、把真漏洞标成FP、正确保留真漏洞。召回即FP识别率,精度是被标成FP的告警确实为FP的比例。
    • RQ3设计:只取RQ1中作者称为最强的配置,即Claude Sonnet 4配SWE-agent。去掉多轮交互、跨文件导航、工具核验(如算术检查)或配置文件读取。LLM4SA风格基线不复现其程序依赖上下文抽取,只套用任务说明和输出标签,把CodeQL JSON填入Bug Report、把被报告源文件填入Code Snippet。上下文增强使用调用图邻居、直接include和CodeQL代码流;oracle-context收到完整配置在成功运行中访问过的同样文件。

    轨迹编码

    • 样本:成功集是零样本判成TP、而SWE-agent配Claude Sonnet 4正确判成FP的256条轨迹,覆盖11个OWASP类别。失败集是漏掉FP的103条,含两套框架都失败的59条,以及作者点名的CWE-327与CWE-614。
    • 编码:记录步数、打开的文件和工具,再归成跨文件语义、常量折叠、配置核对、尝试执行,以及错误的CWE归因、过保守威胁模型、看到API就停止。
  4. What experiments did the paper conduct?

    SWE-agent配Claude在OWASP的剩余FPR为6.3%,正例漏报率22.25%。

    实验设置

    • 骨干:Claude Sonnet 4(claude-sonnet-4-20250514)、DeepSeek Chat(deepseek-chat)、GPT-5(gpt-5-2025-08-07)。三者都按各自结果被评测。
    • 框架与基线:Aider v0.86.1、OpenHands Agent SDK v1.5.2、SWE-agent commit 1d3cfb;对照为同一骨干的零样本提示。RQ3另有LLM4SA风格、上下文增强和oracle-context,仍用Claude Sonnet 4。
    • 数据:OWASP Benchmark v1.2共2,740条(正1,415、负1,325)。Vul4J为79个分支,CodeQL告警3,426条,分诊样本n=50(31 FP、19 TP)。OSS-Fuzz从804条中抽n=50(22 FP、28 TP)。
    • 初始扫描:四款工具使用默认规则。智能体看到的是告警并集;RQ2与RQ3的真实项目告警来自CodeQL。作者称误报大量共享:四工具共同36条,CodeQL、Semgrep与SonarQube共同710条。
    • 指标:RQ1为剩余FPR。RQ2/RQ3以SAST FP为正类,报告accuracy、precision、recall、F1;recall即FP识别率。另报真漏洞保留率与漏报率。
    • 判定与重复:OWASP用套件标签;Vul4J为补丁匹配加第一作者;OSS-Fuzz双人标注,原始一致86.0%(43/50),κ=0.725。§5.6称temperature设为0,但不保证确定。论文未报告重复次数,也未使用单独的LLM评审模型。

    主结果

    据Table 3,下表为OWASP Benchmark过滤后的剩余FPR,越低表示留下的误报越少。§4.1.2的并集基线为98.3%(1,303/1,325个非漏洞实例被至少一种SAST标出)。

    Swipe horizontally to read the table

    骨干Vanilla LLMAiderOpenHandsSWE-agent
    Claude Sonnet 423.0%14.3%14.9%6.3%
    DeepSeek Chat11.2%13.2%15.8%13.1%
    GPT-520.4%20.3%16.3%14.1%
    • 骨干差异:作者称Claude与GPT-5从智能体流程获益,DeepSeek没有稳定收益,其零样本剩余FPR低于三个智能体配置。
    • 类别不均:作者称注入类与CWE-330上SWE-agent更稳,策略和密码类会倒退。正文写Claude配SWE-agent在11个CWE中10个上升,CWE-330从51.6%到96.0%(+44.4个百分点),CWE-78从69.9%到98.4%;OpenHands在CWE-614从74.2%降到32.3%,在CWE-327从55.2%降到29.2%。DeepSeek配OpenHands、SWE-agent时,CWE-614下降67.7与80.6个百分点,CWE-327下降69.0与63.8个百分点。作者称GPT-5加上智能体后几乎没有退步。
    • 两种写法:摘要写初始FP检出率超过92%;§4.1.2写并集基线98.3%。Table 3对SWE-agent配Claude标注↓92.1%。

    真实Java的CodeQL告警

    • 测了什么:Vul4J抽样50条,初始FP精度62%。三套框架乘三个骨干,再对零样本。论文未说明各配置完成条数,下数为Table 4比例。
    • 结果:作者称Claude配Aider召回76.7%、精度85.2%;同模型OpenHands精度91.3%、召回67.7%。GPT-5配OpenHands召回93.3%、精度70.0%,Aider的F1为83.3%。DeepSeek配OpenHands精度100.0%、召回38.7%;其零样本召回67.7%、精度65.6%。
    • 作者解读:作者称Claude从智能体获益最清楚,GPT-5与零样本差距变小,DeepSeek在精度和召回之间交换;高识别率若靠误伤真漏洞则不够。

    截止后的C/C++与消融

    • 测了什么:只跑Claude Sonnet 4配SWE-agent,对照去掉多轮、跨文件、工具核验或配置读取的变体,以及零样本、LLM4SA风格、上下文增强和oracle-context。修复提交晚于该模型已知训练截止10–12个月。
    • 结果:Table 5中完整配置accuracy 96.0%,precision、recall、F1均为95.5%;零样本recall 36.4%、F1 51.6%。去掉跨文件后accuracy 44.0%、F1 62.5%;去掉多轮后F1 56.3%。oracle-context的recall仍为36.4%、F1 51.6%。LLM4SA风格recall 77.3%、F1 70.8%;上下文增强recall 54.5%、F1 66.7%。
    • 作者解读:作者认为增益主要来自跨文件导航和多轮取证,而不是上下文体积。去掉配置读取后accuracy为98.0%、F1为97.7%;作者称没有丢失full-correct案例,影响可忽略。

    真漏洞会被压掉多少

    • 设置:Claude Sonnet 4配SWE-agent,跑OWASP正例。1,415条中完成1,411,完成率99.7%。
    • 结果:314条真漏洞被标成FP,保留率77.7%,漏报率22.25%。作者给出的漏报率:CWE-78为2.38%,CWE-89为1.10%,CWE-79为0.41%,CWE-90与CWE-643为0%;CWE-327为77.17%,CWE-328为84.50%,CWE-501为77.11%,CWE-614为50.00%。
    • 作者解读:作者认为显式污点流上漏报低;密码学和策略类需要领域知识或威胁建模,智能体可能把告警当成规范建议,或推断出并不存在的缓解。

    其他消融与分析

    • 浏览器(OpenHands+Claude,50例):关闭86.0%(43/50),打开82.0%(41/50);作者称没有可测量优势。
    • 成本(Table 8):OpenHands+Claude平均20.5轮、219,299 token、0.1867 USD;SWE-agent+Claude为9.0轮、130,846 token、0.1501 USD;Aider+DeepSeek为1.0轮、0.0028 USD。
    • 污染检查:只给文件名时Claude 51.6%、GPT-5 51.0%、DeepSeek 49.8%;15,636条OWASP轨迹中没有声称见过基准的表述。
    • DeepSeek配对1,303次:145次零样本正确、SWE-agent把非漏洞改判为TP;作者认为循环从核验告警变成更广的漏洞搜寻。
    • 成功轨迹256条:中位11步、中位2个文件;51.2%读了非目标文件,25.0%的最终理由引用这些文件。view覆盖全部256条,共1,488次。
    • 初始SAST(Table 2):CodeQL的F1为74.4%、FPR为68.2%(904条FP);SonarQube的FPR为94.6%(1,254条FP);Joern召回8.2%、FPR 7.2%。
  5. What are some points that can be further explored?

    作者在效度威胁里写了复现、样本和判定口径,并计划做人在回路策略。

    作者指出的局限与后续方向

    • 非确定:作者称LLM的非确定性会在多步推理中累积,temperature设为0只是促进、并不保证可复现(§5.6)。
    • Vul4J样本:作者称因人工分诊容量只评了50条CodeQL告警,多数标签由第一作者在补丁匹配后给出;固定种子可复现抽样,但样本未必代表原始告警分布,规则组合也会影响测量(§5.6)。
    • OSS-Fuzz范围:作者称这是50条验证集,不是完整的C/C++基准;全交叉比较在OWASP与Vul4J上,OSS-Fuzz只测作者称为最强的配置,不应解读成全部智能体或骨干在C/C++上的完整排序(§5.6)。
    • 告警口径:作者写明,按被报告的那条告警判定有局限:智能体可以否定该告警的理由,同时指出同一路径上另一个真实安全问题,按现行指标仍算错,可能少计告警范围之外的安全效用(§5.6)。
    • 后续:作者计划开发感知CWE、按成本自适应的智能体策略和人在回路审计,以保持FP过滤并减少TP损失,并在更多编程语言和SAST工具上评测泛化(§6)。

    实验覆盖范围

    • 全交叉比较的骨干是Claude Sonnet 4、DeepSeek Chat、GPT-5,框架是Aider v0.86.1、OpenHands Agent SDK v1.5.2、SWE-agent commit 1d3cfb,基线是零样本提示(§3.2、§3.3)。
    • OWASP Benchmark v1.2有2,740条;初始工具为CodeQL CLI v2.23.7、Semgrep v1.145.0、SonarQube Community v9.9.8、Joern v4.0.454。Vul4J的智能体评测用50条CodeQL告警。
    • OSS-Fuzz评测使用Claude Sonnet 4配SWE-agent,含四项能力消融,以及LLM4SA风格、上下文增强和oracle-context;作者写明未复现LLM4SA单独的程序依赖上下文抽取流程(§3.4)。
    • 真漏洞保留只在OWASP正例上、用Claude Sonnet 4配SWE-agent测量,完成1,411/1,415(§5.2)。成本按任务报告了轮数、token和USD(Table 8)。
    • 成功判定使用基准标签或人工标注。OSS-Fuzz报告了κ=0.725;Vul4J未报告第二标注者。论文未报告重复实验次数。浏览器消融为OpenHands配Claude的50条配对运行(§3.2)。
  6. Summarize the main content of the paper

    智能体可去掉大量SAST噪声,但收益随骨干和CWE变化,并会把部分真漏洞标成误报。

    这是对三种LLM智能体框架过滤SAST误报的比较研究。

    • 问题:扫描器为了规模牺牲精度,误报造成告警疲劳和抑制警告。作者认为一次性提示缺少跨文件取证和多步修正。
    • 做法:任务是对照标签判断告警为真漏洞或误报。框架为Aider、OpenHands、SWE-agent,骨干为Claude Sonnet 4、DeepSeek Chat、GPT-5。数据为OWASP Benchmark v1.2、Vul4J的CodeQL告警,以及训练截止后的OSS-Fuzz。
    • OWASP:并集基线FP率为98.3%。Table 3中SWE-agent配Claude Sonnet 4的剩余FPR为6.3%,同模型零样本为23.0%。DeepSeek的零样本为11.2%,低于其智能体配置。
    • 真实告警与泛化:Vul4J的50条样本上,GPT-5配OpenHands的FP识别召回为93.3%、精度70.0%。OSS-Fuzz上SWE-agent配Claude的识别率与精度均为95.5%,零样本识别率为36.4%。作者认为增益主要来自跨文件导航和多轮交互。
    • 取舍:同一Claude配SWE-agent的配置在OWASP正例上把314条真漏洞标成FP,漏报率22.25%,保留率77.7%,密码学和策略类更高。Table 8中单任务成本从Aider配DeepSeek的0.0028 USD到OpenHands配Claude的0.1867 USD。
    • 作者结论:作者认为智能体可以去掉大部分SAST噪声,但收益取决于骨干和CWE,不适合无条件自动抑制警告。作者计划做感知CWE的成本自适应策略和人在回路审计。
Read originalarxiv.org