内容提要
GitHub推出了代码扫描自动修复功能,利用人工智能为用户的代码库中的安全漏洞提供修复建议。自动修复通过AI生成的修复建议进一步加强了安全性。目前,它仅支持JavaScript和TypeScript中的CodeQL警报。自动修复提示通过提取警报中的信息构建,包括漏洞的一般示例和修复方法、代码位置和相关代码片段。该系统还包括预处理和后处理步骤,用于选择要显示给模型的代码、添加依赖项、指定代码编辑格式以及解决模型错误。该系统经过评估和迭代,以改进修复建议,并通过在代码扫描警报旁边显示建议修复来增强用户体验。后端基于现有的代码扫描基础设施构建,系统遵循安全和隐私程序。使用遥测和监控来衡量性能和影响,并收集用户反馈以改进系统。
延伸解读
自动修复的当前范围与限制
自动修复功能目前仅支持JavaScript和TypeScript中的CodeQL警报,且仅在拉取请求中启用。这意味着其他语言或非CodeQL警报的用户暂时无法使用。此外,系统专注于修复警报位置及相关数据流路径上的代码,可能不会覆盖测试套件等所有需要修改的地方。用户需注意这些限制,并理解自动修复是辅助工具,仍需人工审查。
AI修复建议的生成与后处理机制
系统通过提取CodeQL警报中的漏洞示例、修复方法、代码位置和片段构建LLM提示,并要求模型以严格格式输出修复说明和代码编辑。后处理步骤包括模糊匹配纠正代码差异、语法和语义检查,以及验证新增依赖的安全性。这些步骤旨在提高建议的准确性和可靠性,但模型仍可能出错,用户应仔细验证建议。
评估框架与性能优化
GitHub使用自动化测试框架评估修复建议,收集了超过1400个带有测试覆盖的警报,通过运行CodeQL和仓库测试套件验证修复是否消除警报、不引入新警报、无语法错误且不改变测试结果。通过迭代提示、编辑格式和后处理启发式方法,成功将修复成功率提高三倍,同时将LLM计算需求降低六倍。这体现了数据驱动开发的有效性。
隐私与安全考量
自动修复遵循严格的安全和隐私程序,不收集提示或模型响应以避免泄露用户代码,仅收集匿名聚合的遥测数据。系统还防范AI特定风险如提示注入攻击,并进行了红队测试以评估安全、有害内容和模型偏见风险。用户可放心使用,但需注意软件安全无法完全保证。
Q&A
GitHub的代码扫描自动修复功能是什么?
GitHub代码扫描自动修复功能利用人工智能为代码库中的安全漏洞提供修复建议。它基于CodeQL警报,在拉取请求中显示AI生成的修复方案,并允许开发者提交、忽略或编辑建议。
自动修复目前支持哪些编程语言?
自动修复目前仅支持JavaScript和TypeScript中的CodeQL警报。
自动修复如何构建LLM提示?
自动修复从CodeQL警报中提取信息来构建LLM提示,包括漏洞的一般信息、示例和修复方法、源代码位置和内容、相关代码片段以及期望的响应格式。
自动修复系统如何处理模型输出中的错误?
系统采用后处理启发式方法检测和纠正模型输出中的小错误,例如使用模糊搜索匹配原始代码、解析器检查语法错误、语义检查如名称解析和类型检查。如果无法修复,则标记建议为部分错误。
自动修复功能如何评估和迭代?
自动修复通过自动化测试框架进行评估和迭代,该框架包括数据收集管道和GitHub Actions工作流,运行自动修复并验证修复是否成功(移除警报、不引入新警报、无语法错误、不改变测试结果)。通过数据驱动开发,成功率提高了三倍,同时减少了六倍的LLM计算需求。
自动修复功能如何保护用户隐私?
自动修复遵循安全和隐私程序,不收集提示或模型响应,因为这些可能包含私有用户代码。相反,它收集匿名化的聚合遥测数据,如生成建议的百分比、提交建议的百分比等。