CVE-2025-48384 是 Git(广泛使用的分布式版本控制系统)中的一个严重漏洞。它涉及对配置值中回车(CR)字符的不当处理,这可能导致子模块检出期间出现路径遍历问题。该缺陷允许在特定条件下执行任意代码。该漏洞于 2025 年 7 月 8 日公开披露,并于 2025 年 8 月 26 日最后一次修改。它于 2025 年 8 月 25 日被添加到美国网络安全和基础设施安全局(CISA)的已知被利用漏洞(KEV)目录中,表明该漏洞已在野外被积极利用,修复截止日期为 2025 年 9 月 15 日。
该问题的根源在于 Git 处理配置值的方式:
这种差异可能导致子模块在路径包含末尾 CR 时被检出到错误的位置。如果攻击者设置一个符号链接,将该改动后的路径指向子模块的 hooks 目录——并且该子模块包含一个可执行的 post-checkout 钩子——则该钩子脚本可能在检出后被无意执行,从而导致任意代码执行。
该漏洞利用了 Git 配置解析中的解释冲突:
submodule/path<CR> 的子模块路径在 CR 丢失后可能被解释为 submodule/path。.git/hooks/post-checkout)的符号链接,从而在 git submodule update 或 git clone --recurse-submodules 等操作期间执行恶意钩子。其分类如下:
攻击向量基于网络(AV:N),复杂度高(AC:H),所需权限低(PR:L),需要用户交互(UI:R),且影响范围发生改变(S:C),对机密性、完整性和可用性造成高度影响(C:H/I:H/A:H)。
该漏洞影响以下已修补版本之前的 Git 版本:
它影响各种平台上的 Git,包括 Linux、macOS 和 Windows,但在开发人员环境、CI/CD 流水线(例如 GitHub Actions、GitLab CI)以及任何从不受信任的仓库克隆 Git 子模块的场景中尤为相关。
--recurse-submodules 克隆仓库。CVSS 细节尚未在 NVD 中完全评分(CVSS 4.0 待定),但根据公告中的 CVSS 3.1 指标,它符合严重级别(估计 CVSS 8.8,正如之前更广泛的 CVE 列表中所述)。
--recurse-submodules)。该漏洞凸显了版本控制系统中安全处理的重要性,尤其是涉及子模块时。如果您在生产或开发环境中使用 Git,鉴于其已被积极利用的状态,请优先立即更新。
.gitmodules 指向 https://github.com/s41r4j/CVE-2025-48384-submodule.git,但 PoC 会将其重写为本地副本以进行离线测试。运行:
bash scripts/poc.sh
它的作用:
$HOME/flag.txt 处创建一个 flag。malicious-submodule-repo/ 复制到容器内的 /tmp。post-checkout 钩子。/tmp/flag.txt。说明:
sub^M(CR),以 gitlink 形式存储;净化后的路径 sub 通过符号链接解析到 .git/hooks,因此子模块所追踪的 post-checkout 会作为实际的钩子落地并运行。bash scripts/update-gitlink.sh。