Git最近曝出高危漏洞(CVE-2025-48384),竟和回车符的历史遗留问题

量子位来谈科技 2025-07-10 17:30:31

Git最近曝出高危漏洞(CVE-2025-48384),竟和回车符的历史遗留问题有关? 事情要从打字机说起。【图1】 以前的老式打字机,每打完一行,得手动把滚轴“咔哒”扳回到最左边,这个动作就叫“回车”(Carriage Return)。 后来,电脑世界也保留了这个符号,用`␍`表示,对应的就是我们熟悉的`\r`。同时还有另一个动作叫“换行”(Line Feed),是让指针跳到下一行,用`␊`或`\n`表示。 虽然今天电脑都能智能换行了,但这两个字符还是被保留下来,比如Windows系统习惯用`\r\n`组合,Unix系统只用`\n`。 回车符听起来不起眼,但它在Git里悄悄留下了漏洞。 Git的配置文件,比如`.gitmodules`,其实跟Windows早期的`.ini`文件很像,用的是类似“键=值”的格式。 而Git在处理这些文件时,有一个老规矩——如果一行末尾有`\r`,它就会“默默”删掉,认为这只是多余的格式残留。 问题就出在这儿。 攻击者只需要`.gitmodules`里加上一点点“奇怪”的路径,比如`path = foo^M`(这个`^M`其实就是`\r`),Git在第一轮读取时会接受它,但在后面写入配置文件时,实际用的却是另一个路径,安全检查被绕过了。 再加上某些系统(比如macOS)允许控制字符出现在文件名里,攻击者就能把恶意内容“悄悄”放进Git内部关键位置,比如`.git/hooks`,等你下一次操作Git时,恶意脚本就自动跑起来了。 可怕的是,这个漏洞利用起来非常“安静”,不需要你点开某个文件,甚至不需要你跑任何代码,只要一个递归clone,就可能触发。 好消息是,这个问题已经修复了,Git官方打了补丁,只是多加了一行判断:只要发现有`\r`,就老老实实地用引号包起来,别再让它“偷偷溜走”。 所以再次提醒: - 拉陌生项目前,尽量不要用`--recursive`; - GitHub Desktop等图形工具用户,最好先看下`.gitmodules`文件; - 尽快更新到修复版本,补丁已发布。 有时候,一个古老的字符,就像打字机上遗留的机关,轻轻一碰,整个程序就会偏离轨道。别让这样的“历史遗产”,成为你的安全漏洞。

0 阅读:3
量子位来谈科技

量子位来谈科技

感谢大家的关注