受信任的钩子仍然可以运行代理的代码
摘要
一篇文章表明,信任 Git 的 pre-commit 钩子文件,并不意味着它启动的代码也值得信任——钩子可以调用 package.json 中的 npm 脚本,而这些脚本可能已被智能体修改,从而使代码能够在智能体环境之外执行。该演示使用普通的 Git for Windows,未直接测试任何智能体沙箱。
在 DEV 上题为“你的代码仓库不是可信上下文”的讨论中,Carlos(Bloqarl)问道,如何让智能体提交代码,同时不赋予它对共享 Git 配置的写入权限。这场讨论揭示了另一个问题:选择一个可信的钩子文件,并不意味着它启动的代码也可信。pre-commit 钩子可以位于检出目录之外,却仍然运行 npm test。该命令从检出目录中的 package.json 获取测试脚本,而智能体可能已经修改了脚本和测试。因此,将提交操作移到智能体环境之外,也可能会将这些改动的执行移到该环境之外。我们发布的文章使用原版 Git for Windows 2.52.0 和 2.56.0 报告了这一问题。测试脚本代替了智能体;我们没有测试任何编程智能体沙箱。讨论还纠正了此前的一项说法,即使用 main 分支的钩子就能解决这个问题。我不会把对钩子文件的成功检查视为对它所调用的一切内容的检查。当你审查智能体的代码差异时,你会沿着提交钩子追踪到软件包脚本和可执行配置,还是只检查钩子本身?利益披露:我在 Mnemoverse 工作。本文由 AI 根据我们公开发布的文章和相关讨论改编,并非一项新实验。
相似文章
无需在编程代理环境中放置密钥,为其提供SSH访问真实服务器的权限 - 信任模型解析
作者提出了一种安全方法,通过一个持有密钥并签名命令的中介客户端,为编程代理提供SSH访问真实服务器的权限,并支持按主机策略、实时监控和审计日志,同时讨论局限性并寻求反馈。
本周一个代理自主运行了完整的git工作流程:初始化、提交、推送,在几秒钟内完成。有趣的问题是提交记录上的署名是谁。
本文讨论了一个AI代理自主执行git工作流程的演示,重点突出了归因、身份和合规性的关键问题,提出了加密代理身份的概念,同时对问责模型提出疑问。
是什么让你真正信任本地编码代理,能放心让它无人值守运行?
本文探讨了哪些因素使开发者信任本地编码代理能无人值守运行,强调了权限、检查点和测试等辅助机制,而非模型性能。
赋予编程代理 shell 访问权限感觉太疯狂了。大家是如何处理机密的?
作者对授予编程代理 shell 访问权限表示担忧,指出它们可以读取 .env、凭据等敏感文件,并希望在让代理接触真实仓库之前,向社区请教实用的机密处理模式。
@LangChain:让代理具备编写代码的能力,能让它们变得极其强大。这也使得安全性问题变得更加棘手。在L…
LangChain的Deep Agents允许不受信任的代理编写的代码通过基于WebAssembly的代码解释器安全运行,提供执行和能力隔离,无需传统沙盒。