Gemini CLI 爆路径穿越漏洞:构造 tag 可删除目录外任意文件

ManoharPaturi · ghdev · 2026-09-27

有开发者为 google-gemini/gemini-cli 提交修复 PR(#29521),指出旧版 checkpoint 回退路径存在路径穿越漏洞:getCheckpointPath 和 deleteCheckpoint 用原始 tag 拼接路径,而 path.join 会归一化 .. 片段,因此类似 x/../../secret 的 tag 可解析到 checkpoint 目录之外的文件——用 /chat delete <tag> 会直接删掉那个文件,checkpoint load 还会返回其内容。

修复方式:新增 isInsideCheckpointDir 辅助函数,旧 raw 路径只有在 path.resolve 后仍位于 checkpoint 目录内(前缀检查)时才被采用,穿越 tag 会以正常 ENOENT 语义落空。修复覆盖 load/exists 回退和向后兼容的 unlink 两处;历史扁平 tag 行为不变。这与此前修过的 #28699(a2a-server restore 路径)属同类漏洞,本次关闭 #29191。作者提供了回归测试验证步骤,修复后 logger 测试套件 43/43 通过。

原文链接 →

「编程与Agent」频道最新

更多「编程与Agent」频道 AI 资讯 →