Cracks in The Stack: Hidden Vulnerabilities and Licensing Risks in LLM Pre-Training Datasets

📄 arXiv: 2501.02628v1 📥 PDF

作者: Mahmoud Jahanshahi, Audris Mockus

分类: cs.SE, cs.AI

发布日期: 2025-01-05

备注: Accepted in the Second International Workshop on Large Language Models for Code (LLM4Code 2025)

DOI: 10.1109/LLM4Code66737.2025.00018


💡 一句话要点

提出自动化代码自校正技术,提升LLM预训练数据集质量,降低漏洞风险。

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: LLM预训练 数据清洗 漏洞检测 许可合规 代码安全 自动化校正 开源软件 版本控制

📋 核心要点

  1. 现有代码LLM预训练数据集质量参差不齐,包含大量未修复的漏洞和不合规的代码,影响模型生成代码的安全性。
  2. 提出一种自动化源代码自校正技术,利用开源软件版本历史识别并过滤掉包含漏洞和许可问题的代码片段。
  3. 在The Stack v2数据集上验证了该方法,发现大量代码存在漏洞和许可问题,表明该方法具有实际意义。

📝 摘要(中文)

代码补全系统的关键在于使用大量源代码和自然语言文本对大型语言模型进行预训练,但这些数据的来源和质量往往存疑,可能导致LLM生成的代码存在漏洞。虽然已经存在识别代码生成后漏洞的方法,但最好在预训练或微调阶段使用高质量且合规的数据集。为了满足对大量训练数据的需求,必须实现自动化数据校正,最大限度地减少人工干预。本文提出了一种自动化源代码自校正技术,利用开源软件项目的完整版本历史来提高训练数据的质量。该方法识别出在至少一个开源项目中被修改或发生变更的训练数据样本,并精确定位包含错误或漏洞修复的样本子集。在The Stack v2数据集上的评估表明,17%的代码版本有更新的版本,其中17%代表错误修复,包括2.36%解决了已知的CVE。去重后的Stack v2仍然包含易受6,947个已知CVE攻击的代码片段。此外,数据集中58%的代码片段在创建后从未被修改,表明它们可能代表使用极少或根本没有使用的软件。错误识别的代码片段来源带来了额外的挑战,因为它们会导致包含非许可代码,从而引发严重的合规性问题。通过解决这些问题,可以避免在训练新模型时延续有缺陷的代码模式或违反许可。我们期望我们的结果能够激发自动化数据校正的流程改进,从而提高AI工具生成输出的可靠性。

🔬 方法详解

问题定义:论文旨在解决LLM预训练数据集质量不高的问题,具体表现为数据集中包含大量未修复的漏洞(bugs and vulnerabilities)和潜在的许可违规(licensing risks)。现有方法主要集中在代码生成后的漏洞检测,而忽略了在预训练阶段就进行数据清洗的重要性。现有方法的痛点在于缺乏有效的自动化工具来大规模地识别和过滤掉这些问题数据。

核心思路:论文的核心思路是利用开源软件项目的版本控制历史(version history)来识别和过滤掉存在漏洞和许可问题的代码片段。通过分析代码的修改记录,可以定位到哪些代码片段被修复过漏洞,哪些代码片段的来源存在争议,从而有针对性地进行数据清洗。这样设计的目的是从源头上提高训练数据的质量,避免LLM学习到有缺陷的代码模式。

技术框架:该方法主要包含以下几个阶段:1) 数据收集:从开源软件项目中收集代码片段及其版本历史。2) 漏洞识别:分析版本历史,识别出包含漏洞修复的代码片段。具体来说,可以通过查找commit message中包含“fix”、“bug”、“vulnerability”等关键词的commit,以及关联到CVE(Common Vulnerabilities and Exposures)数据库的commit。3) 许可问题识别:分析代码片段的来源,判断其是否符合预期的许可协议。如果代码片段的来源不明,或者使用的许可协议与项目不符,则将其标记为存在许可问题。4) 数据过滤:根据漏洞和许可问题的识别结果,过滤掉不合格的代码片段,生成高质量的预训练数据集。

关键创新:该方法最重要的创新点在于利用开源软件的版本历史进行自动化数据校正。与传统的静态代码分析方法相比,该方法能够更准确地识别出代码中的漏洞和许可问题,并且能够大规模地处理数据。此外,该方法还能够识别出代码片段的演化过程,从而更好地理解代码的语义。

关键设计:论文中没有详细描述具体的参数设置、损失函数或网络结构,因为该方法主要关注的是数据预处理阶段。关键的设计在于如何有效地利用版本历史来识别漏洞和许可问题。例如,可以使用自然语言处理技术来分析commit message,从而更准确地判断commit是否与漏洞修复相关。此外,还可以使用代码相似度检测技术来识别代码片段的来源,从而判断其是否符合预期的许可协议。

📊 实验亮点

实验结果表明,The Stack v2数据集中17%的代码版本有更新的版本,其中17%代表错误修复,包括2.36%解决了已知的CVE。即使是去重后的Stack v2仍然包含易受6,947个已知CVE攻击的代码片段。此外,数据集中58%的代码片段在创建后从未被修改,表明它们可能代表使用极少或根本没有使用的软件。这些数据突出了预训练数据集质量的重要性,以及本文提出的自动化数据校正方法的必要性。

🎯 应用场景

该研究成果可应用于构建更安全、可靠的代码生成AI工具。通过使用高质量的预训练数据集,可以减少LLM生成包含漏洞代码的可能性,降低软件开发过程中的安全风险。此外,该方法还有助于确保AI工具生成的代码符合相关的许可协议,避免潜在的法律纠纷。未来,该方法可以推广到其他类型的AI模型训练数据清洗中,提高AI模型的整体质量。

📄 摘要(原文)

A critical part of creating code suggestion systems is the pre-training of Large Language Models on vast amounts of source code and natural language text, often of questionable origin or quality. This may contribute to the presence of bugs and vulnerabilities in code generated by LLMs. While efforts to identify bugs at or after code generation exist, it is preferable to pre-train or fine-tune LLMs on curated, high-quality, and compliant datasets. The need for vast amounts of training data necessitates that such curation be automated, minimizing human intervention. We propose an automated source code autocuration technique that leverages the complete version history of open-source software projects to improve the quality of training data. This approach leverages the version history of all OSS projects to identify training data samples that have been modified or have undergone changes in at least one OSS project, and pinpoint a subset of samples that include fixes for bugs or vulnerabilities. We evaluate this method using The Stack v2 dataset, and find that 17% of the code versions in the dataset have newer versions, with 17% of those representing bug fixes, including 2.36% addressing known CVEs. The deduplicated version of Stack v2 still includes blobs vulnerable to 6,947 known CVEs. Furthermore, 58% of the blobs in the dataset were never modified after creation, suggesting they likely represent software with minimal or no use. Misidentified blob origins present an additional challenge, as they lead to the inclusion of non-permissively licensed code, raising serious compliance concerns. By addressing these issues, the training of new models can avoid perpetuating buggy code patterns or license violations. We expect our results to inspire process improvements for automated data curation, with the potential to enhance the reliability of outputs generated by AI tools.