PatchPilot: Diff-Gated Dependency Vulnerability Remediation with Deterministic Planning and Bounded Model-Assisted Source Repair
PatchPilot 是一款 Visual Studio Code 扩展程序,它通过将确定性的版本选择与构建裁定,与受限的、经许可的 LLM 辅助源码修复进行严格分离,从而通过可验证的不变量和回滚能力来提升依赖漏洞修复的安全性。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
现代软件很少是从零开始构建的。相反,它更像是像由成千上万不同的人制造的零件组装而成的复杂机器。一个典型的应用程序依赖于数百个预制组件(称为依赖项),而这些依赖项又进一步依赖于数以千计的其他组件。这创造了一个庞大且无形的网络,其中一个薄弱环节就可能危及整个系统。当其中一个部件发现缺陷时,开发者面临着一个艰难的选择:他们必须将该部件升级到更安全的版本,但新版本可能无法与机器的其余部分兼容,从而导致机器损坏。目前的工具擅长发现缺陷并指出新的部件,但它们在确保新部件确实能与现有代码协同工作方面通常表现得很差。它们经常建议的升级会引入新的漏洞或使软件彻底崩溃,让开发者不得不去收拾残局。
这就是 Sivaprakash J 及其在 Anand Institute of Higher Technology 的团队致力于通过名为 PatchPilot 的新工具来解决的问题。研究人员并没有试图实现整个修复过程的自动化(因为之前的尝试已被证明是危险且不可靠的),而是设计了一个系统,作为一个严格且透明的引导者。该工具将软件修复的工作分为三个截然不同的任务:选择新部件、修复连接部件的代码,以及测试机器是否仍能运行。在大多数现有系统中,一个人工智能代理试图同时完成这三项工作,往往会猜错版本或做出无法撤销的更改。PatchPilot 则拒绝让计算机做出最关键的决定:安装哪个版本的依赖项。
研究人员将 PatchPilot 构建为一个流行代码编辑器的扩展程序,使其能够直接在开发者编写代码的环境中工作。它支持三个主要的软件生态系统,即开发者管理其部件的标准方式:用于 Web 开发的 npm、用于 Java 的 Maven 以及用于 Python 的 PyPI。当工具扫描项目时,它会查找已安装部件中的已知安全缺陷。如果发现问题,它不会猜测解决方案。相反,它会咨询公共安全数据库和官方可用版本列表,以找到最新、最安全且保证不存在已知缺陷的版本。这个选择过程是完全确定性的,这意味着它遵循一套固定的规则,并且在给定相同信息的情况下始终会产生相同的答案。它从不依赖于人工智能模型的不可预测的猜测。
一旦工具确定了正确的版本,它就会准备一份详细的报告,展示究竟会发生哪些变化。它会显示旧代码与新代码的并排对比,突出显示将被修改的具体行。开发者必须审查这份报告并在进行任何更改之前给予明确许可。如果开发者批准,工具会对原始文件进行安全备份,应用更改,然后立即运行项目自身的测试,以查看软件是否仍然可以运行。这一步至关重要,因为它使用项目自身的安全性检查来判断升级是否成功,而不是依赖工具来猜测。
如果测试失败,工具并不会放弃,但它也不会接管控制权。它提供了一种受限且受控的方式来请求人工智能协助修复损坏的代码。这是 AI 被允许发言的唯一时刻,且其权限受到严格限制。AI 被禁止更改部件列表或版本号;它只能建议对导致测试失败的源代码文件进行编辑。此外,AI 不能编辑未被专门分配给它的文件,也不能进行影响整个项目的广泛更改。在 AI 发送其建议之前,开发者会被告知哪些文件将被发送给 AI、AI 被允许看到什么内容以及哪些文件是禁区。开发者必须每次都对这种特定的交换过程表示同意。
研究人员对该系统进行了严格测试,以确保其行为完全符合设计预期。他们创建了一系列单元测试,这些测试在没有互联网连接或人工干预的情况下运行,以验证工具在每种可能的情况下都能遵循其规则。他们还通过四个示例项目运行了该工具,以观察从头到尾的完整过程。结果表明,该工具成功实现了决策权的分离。它从未让 AI 选择版本,从未在没有明确备份的情况下编辑文件,也从未运行过可能被恶意脚本劫持的命令。当找不到安全版本或测试失败时,该工具会明确承认,而不是隐藏问题或假装问题已解决。
研究结论认为,虽然人工智能功能强大,但它目前还不具备独立对软件安全等高风险决策做出可靠判断的能力。作者发现,以往让 AI 代理选择版本的尝试往往会导致选择了已知具有危险性的部件。通过将版本选择权交给一个固定的、可审计的过程,并将 AI 限制在一个受监督的狭窄角色内,PatchPilot 提供了一条更安全的路径。该工具并不声称能解决所有问题;它承认自己无法验证新版本是否能与每一段代码完美配合,也不会尝试修复过于复杂或使用不支持系统的项目。相反,它专注于使修复过程透明、可逆且处于人类控制之下。研究人员认为,这并非最终解决方案,而是迈向一个可以信任自动化未来的必要步骤,通过确保最危险的决策绝不会留给偶然。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。