Beyond Single Bugs: Benchmarking Large Language Models for Multi-Vulnerability Detection
作者: Chinmay Pushkar, Sanchit Kabra, Dhruv Kumar, Jagat Sesh Challa
分类: cs.CR, cs.AI
发布日期: 2025-12-26
备注: Under Review
💡 一句话要点
提出多漏洞检测基准,揭示大语言模型在复杂代码安全场景下的性能瓶颈
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 多漏洞检测 大型语言模型 代码安全 基准测试 计数偏差
📋 核心要点
- 现有漏洞检测基准侧重于单一漏洞,忽略了真实软件中多漏洞共存的复杂性,无法有效评估LLM在实际场景中的表现。
- 构建包含多种语言和不同漏洞密度的代码数据集,系统评估LLM在多漏洞检测任务中的性能,并分析其计数偏差和选择偏差。
- 实验结果表明,随着漏洞密度增加,LLM性能显著下降,且不同语言的代码表现出不同的失败模式,揭示了LLM在复杂代码安全任务中的局限性。
📝 摘要(中文)
大型语言模型(LLM)在自动化软件安全,特别是漏洞检测方面展现出巨大潜力。然而,现有基准主要关注孤立的、单一漏洞样本或函数级分类,未能反映真实软件的复杂性,即多个相互作用的漏洞通常共存于大型文件中。最近的研究表明,LLM在多标签任务中存在“计数偏差”和“选择偏差”,但这一点尚未在代码安全领域得到严格量化。本文提出了一个全面的多漏洞检测基准,涵盖C、C++、Python和JavaScript四种主要语言。我们通过系统地将受控数量的漏洞(1、3、5和9个)注入到来自CodeParrot的长上下文代码样本(7.5k-10k tokens)中,构建了一个包含40,000个文件的数据库。我们评估了五个最先进的LLM,包括GPT-4o-mini、Llama-3.3-70B和Qwen-2.5系列。结果表明,随着漏洞密度的增加,性能急剧下降。虽然Llama-3.3-70B在单漏洞C任务上实现了接近完美的F1分数(约0.97),但在高密度设置中,性能下降高达40%。值得注意的是,与C/C++相比,Python和JavaScript表现出不同的失败模式,模型在复杂的Python文件中表现出严重的“欠计数”(召回率降至0.30以下)。
🔬 方法详解
问题定义:现有漏洞检测基准主要关注单个漏洞,忽略了真实软件中多个漏洞同时存在并相互影响的情况。这导致现有方法难以评估LLM在实际复杂代码环境下的漏洞检测能力,并且无法有效衡量LLM在多标签任务中存在的计数偏差和选择偏差。
核心思路:通过构建一个包含多种语言(C、C++、Python、JavaScript)和不同漏洞密度(1、3、5、9个漏洞/文件)的大规模代码数据集,系统地评估LLM在多漏洞检测任务中的性能。通过控制漏洞数量和类型,可以更精确地分析LLM在不同场景下的表现,并量化其计数偏差和选择偏差。
技术框架:该研究的核心是构建一个用于多漏洞检测的基准数据集。数据集构建流程包括:1) 从CodeParrot获取长上下文代码样本;2) 系统地向代码样本中注入不同数量的漏洞;3) 确保数据集包含C、C++、Python和JavaScript四种语言;4) 最终生成包含40,000个文件的数据库。然后,使用该数据集评估多个最先进的LLM,并分析其性能表现。
关键创新:该研究的关键创新在于构建了一个专门用于多漏洞检测的基准数据集,该数据集考虑了真实软件中多漏洞共存的复杂性。与现有基准相比,该数据集更具代表性,可以更有效地评估LLM在实际代码安全场景下的性能。此外,该研究还系统地分析了LLM在多漏洞检测任务中存在的计数偏差和选择偏差。
关键设计:数据集的关键设计在于控制漏洞的数量和类型,以便更精确地评估LLM的性能。具体来说,每个代码样本中注入的漏洞数量被设置为1、3、5和9个,以模拟不同的漏洞密度。此外,数据集还包含了C、C++、Python和JavaScript四种语言,以评估LLM在不同编程语言上的表现。评估指标主要采用F1分数和召回率,以衡量LLM的检测精度和完整性。
🖼️ 关键图片
📊 实验亮点
实验结果表明,Llama-3.3-70B在单漏洞C任务上F1分数接近0.97,但在高密度漏洞场景下性能下降高达40%。Python和JavaScript代码表现出与C/C++不同的失败模式,模型在复杂Python文件中出现严重的“欠计数”现象,召回率降至0.3以下。这些结果揭示了LLM在处理复杂代码安全任务时的局限性。
🎯 应用场景
该研究成果可应用于自动化代码安全审计、漏洞挖掘和软件质量保证等领域。通过使用该基准评估和改进LLM的漏洞检测能力,可以提高软件的安全性,降低安全漏洞带来的风险。此外,该研究还可以促进LLM在代码安全领域的进一步发展,例如开发更有效的多漏洞检测算法。
📄 摘要(原文)
Large Language Models (LLMs) have demonstrated significant potential in automated software security, particularly in vulnerability detection. However, existing benchmarks primarily focus on isolated, single-vulnerability samples or function-level classification, failing to reflect the complexity of real-world software where multiple interacting vulnerabilities often coexist within large files. Recent studies indicate that LLMs suffer from "count bias" and "selection bias" in multi-label tasks, yet this has not been rigorously quantified in the domain of code security. In this work, we introduce a comprehensive benchmark for Multi-Vulnerability Detection across four major languages: C, C++, Python, and JavaScript. We construct a dataset of 40,000 files by systematically injecting controlled counts of vulnerabilities (1, 3, 5, and 9) into long-context code samples (7.5k-10k tokens) sourced from CodeParrot. We evaluate five state-of-the-art LLMs, including GPT-4o-mini, Llama-3.3-70B, and the Qwen-2.5 series. Our results reveal a sharp degradation in performance as vulnerability density increases. While Llama-3.3-70B achieves near-perfect F1 scores (approximately 0.97) on single-vulnerability C tasks, performance drops by up to 40% in high-density settings. Notably, Python and JavaScript show distinct failure modes compared to C/C++, with models exhibiting severe "under-counting" (Recall dropping to less than 0.30) in complex Python files.