社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

#一个回车符造成Git漏洞##Git曝出严重RCE漏洞#Git最-20250710172019

量子位 • 2 月前 • 65 次点击  

2025-07-10 17:20

#一个回车符造成Git漏洞##Git曝出严重RCE漏洞#

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`文件;

- 尽快更新到修复版本,补丁已发布。

有时候,一个古老的字符,就像打字机上遗留的机关,轻轻一碰,整个程序就会偏离轨道。别让这样的“历史遗产”,成为你的安全漏洞。
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/184201
 
65 次点击