Git 的 --end-of-options:参数注入攻击的终极防线
来源:nesbitt.io — 2026-07-21
📋 概述
作者在阅读一个包管理器 CVE 修复时发现了 git 的 --end-of-options 标志。由于 git 早已将 -- 重新定义为分隔版本和路径的标记,无法兼作选项终止符。--end-of-options(2019 年引入)专门终止选项解析,防止未受信字符串被当作命令选项执行。
🔑 核心要点
- 大多数 Unix 工具用 -- 终止选项解析,但 git 已将 -- 用于分隔版本和路径
- --end-of-options(git 2.24.0,2019)是 git 专用的选项终止符
- 不安全用法示例:git log "$rev" 中如果 $rev 以 - 开头,会被解析为恶意选项
- git clone --upload-pack 和 -c core.sshCommand 等特性本身就能被利用为攻击原语
- 安全用法:git log --end-of-options "$rev" -- "$path",两个标记各司其职
💡 金句
这是 CWE-88,参数注入攻击——它不同于命令注入,因为没有 shell 参与。--end-of-options 就是为此而生的。
👍 0👎 0
← 返回 Lobsters 首页