网易首页 > 网易号 > 正文 申请入驻

一个分号击穿GitHub!少写一行过滤代码,亿级代码仓库差点被端

0
分享至

来源:市场资讯

(来源:新智元)


新智元报道

编辑:元宇

【新智元导读】一个小小的分号,能让任何有push权限的GitHub用户都可能在服务器后端执行任意命令,它撬开的不只是一次输入过滤失误,而是多租户云平台长期依赖的内部信任假设。

2026年3月4日,GitHub收到Wiz通过Bug Bounty提交的报告,报告描述的攻击入口极其简单:

一条构造过的git push,带一个push option,值里藏了一个分号。

40分钟内,GitHub内部复现了漏洞,从确认根因到云端修复上线总计约75分钟,不到2小时。

任何对某个仓库拥有push权限的已认证用户,理论上都能在处理这次git push的GitHub/GHES后端服务器上执行任意命令。

虽然GitHub官方博客写得很清楚:「没有任何客户数据被访问、修改或外泄。」

GitHub表示,由于该利用链会触发正常GitHub.com操作不会走的异常代码路径,他们据此查询遥测,未发现除Wiz测试外的触发记录。

Wiz自己也说:「我们没有访问任何其他租户的仓库内容。」

但这次事件,仍然撬开了那个被信了多年的内部信任假设。

一个分号

击穿三层信任

要看懂这次的漏洞链,得先看清GitHub内部那条push流水线长什么样。

你执行git push,请求进入GitHub内部的第一站叫babeld,它是GitHub自研的git代理,负责把你的连接往下转。

babeld先去问gitauth:这个用户有没有权限,这次push该遵守哪些规则?gitauth回来给一张清单:文件大小上限、分支命名规则、hook配置。

babeld把这张清单打包进一个叫X-Stat的内部请求头,往下传给gitrpcd。

gitrpcd是内部的RPC服务,它只认这个头,完全信任里面的每一个字段。

最后,负责最终检查的pre-receive hook拿到X-Stat,决定这次push能不能过。

整条流水线,X-Stat头就是通行证。


GitHub内部git push流水线:babeld → gitauth → gitrpcd → pre-receive hook

这个X-Stat头是一串以分号隔开的key=value,比如a=1;b=2;c=3。

解析的时候,系统把它们依次读进一个map。有个细节很关键:如果同一个key出现两次,后面那个会悄悄把前面那个覆盖掉。

问题出在哪?

git push有个正常功能,叫push option,允许你在推代码时顺带传一些自定义字符串给服务端。

babeld会把这些字符串原样编进X-Stat,比如你传了两个option,它就变成push_option_0=你传的内容;push_option_1=你传的内容。

babeld忘了一件事:没有过滤分号。

X-Stat里本来有个字段large_blob_rejection_enabled=bool:true,是文件大小限制的开关,默认开着。

攻击者构造一个push option,值里塞一个分号,后面跟上large_blob_rejection_enabled=bool:false。babeld原样写进去,X-Stat里同一个key就出现了两次。


X-Stat字段注入示意:攻击者构造的push option如何覆盖合法字段

map解析到重复的key,后写入的值覆盖前面那个。攻击者注入的false排在后面,赢了。文件大小限制,就这么被关掉了。

整个攻击的地基,就是babeld少写的那一行过滤代码。

这个漏洞背后的逻辑,在很多系统里都存在。

多个服务串在一条流水线上,每一站只管干自己的活,默认上一站传过来的数据是干净的、没有问题的。没有人在中间做二次检查。

结果就是:babeld没拦住分号,gitrpcd收到数据不验证,pre-receive拿到字段直接用。

每一站都默认上一站传来的是干净的、可信的。

三层信任叠在一起,一个分号全部击穿。

注入三个字段

GHES实例沦陷

绕过文件大小限制,只是Wiz用来验证注入可行的第一个测试。真正的目标,是拿到服务器的执行权限。

第一步,把沙箱关掉。

GHES允许管理员自定义一些hook脚本,在代码推送前自动运行。这些脚本默认在沙箱里跑,权限受限。

但Wiz逆向分析后发现,沙箱是否启用,取决于X-Stat头里一个叫rails_env的字段。值是production,进沙箱;填任何其他值,直接以git服务账户身份运行,没有任何隔离。

这个字段,可以注入。

第二步,把hook脚本的查找目录换掉。

注入custom_hooks_dir,把系统查找hook脚本的根目录,从默认位置改成攻击者能控制的地方。

第三步,指定一个恶意脚本来执行。

注入repo_pre_receive_hooks,在里面填一段路径穿越,让系统跳出正常目录范围,去执行服务器上任意一个二进制文件。

三步串起来,GHES服务器返回了这样一行输出:

remote: uid=500(git) gid=500(git) groups=500(git)

这行输出的意思是:代码已经在服务器上以git账户身份执行了。这说明研究员已经能以git服务账户身份在GHES服务器上执行命令。


Wiz研究员sagitz在X上展示的PoC:一条普通的git push命令,远端服务器返回了uid=500(git):代码在GitHub后端以git服务账户身份执行了。

Wiz把同样的攻击链对准GitHub.com,没成功。push走完了,hook没有触发,服务器什么都没返回。

继续逆向。

Wiz发现X-Stat里还藏着一个标志位,控制服务器是否以「企业模式」运行。GHES上这个标志默认开着,自定义hook一直可以跑;GitHub.com上默认关着,自定义hook根本不会被触达。

但这个标志,也在X-Stat里。也可以注入。

补上这第四步,整条链路打通了。Wiz在GitHub.com上执行了hostname,服务器返回了一个.github.net结尾的内部主机名。进去了。

GitHub在事后博客里坦承了一件事:那条非production的执行路径,本来就不应该出现在GitHub.com的生产环境里。

早期部署时专门把这段代码排除掉了,后来部署方式改了,排除的逻辑没有跟着迁移过来,这段代码就这么悄悄留在了镜像里,一直没人注意到。

漏洞利用之所以能贯通,正是因为这段「不该在那里」的代码恰好在那里。

Wiz枚举了两台被攻陷的节点,每台上都看到了百万级其他用户和组织的仓库索引项,他们表示:

没有读取任何其他用户的仓库内容。只是用自己的测试账户确认了一件事:git用户的权限,确实能访问这台节点上任何一个仓库。

GitHub的日志也印证了这一点。那条异常代码路径,所有触发记录全部指向Wiz自己的测试流量,没有其他账户出现过。

能访问,和真的去读了,是两件性质完全不同的事。这次是前者,不是后者。

但根本问题还是出在多租户平台的底层设计上。

GitHub.com把大量用户和组织的仓库放在同一批服务器上,统一交给同一个git服务账户管理,因为这个账户本来就需要处理所有人的数据。

任何人只要拿到这个账户的执行权限,该节点上的大量仓库都会进入权限视野。

共享底座带来了效率,也带来了这个去不掉的结构性脆弱点。

云端两小时打完补丁

本地可能要补半年

真正难收尾的,是自建的GHES。

Wiz公开披露时,数据显示88%的GHES实例还没打补丁。

按GitHub官方行动建议和NVD当前记录,管理员应升级到对应受支持分支的最新补丁版;NVD当前列出的修复版本为3.14.25、3.15.20、3.16.16、3.17.13、3.18.7、3.19.4,GitHub官方博客还列出3.20.0或更高版本。

GHES管理员需要做两件事。立刻升级,然后翻/var/log/github-audit.log,搜push options里含分号的记录,核查是否有未授权的注入痕迹。

这个漏洞的触发条件,是已认证用户加上对实例上某仓库有push权限。

门槛并不高。

任何拿到一个普通员工账号的攻击者,只要这个账号在公司GHES上能推代码,哪怕只是一个不起眼的内部项目,就能拿到整个GHES实例的执行权限。

而GHES上通常跑着公司全部的代码资产、CI配置、内部凭证。一旦失陷,后果很重。

这个漏洞,还不是GHES管理员当下补丁清单里的唯一一条。


GitHub Enterprise Server 3.19.5 Release Notes,单个版本同期修复多个HIGH级漏洞https://docs.github.com/en/enterprise-server@3.19/admin/release-notes

光看3.19.5这一个版本的更新说明,同期列出的HIGH级漏洞就还有四个:CVE-2026-5845、CVE-2026-5921、CVE-2026-4821、CVE-2026-4296。

用SaaS托管代码,补丁打好了自动生效,自建GHES,每一个补丁都要管理员自己跟上。

逆向太贵这条护城河

AI正在填平它

这次披露还有一个细节被忽视了,Wiz在技术博客里专门解释了这次为什么能找到。

他们说,GitHub内部的git流水线是大量编译后的闭源二进制,以前不是没想过审计,而是人工逆向的成本太高,做到一半放弃过。

这次回来重做,是因为工具变了。

过去很多闭源软件之所以「相对安全」,靠的不是代码本身有多严密,而是逆向分析的成本太高,没人愿意花那个时间。

代码不公开,不等于无法被审计,只是审计这件事过去在经济上划不来。

现在这笔账的算法变了。

过去需要资深逆向工程师投入数月的工作,用AI工具组合下来几周可以做完一轮。

Wiz自己也说,这是他们公开记录里第一批靠AI在闭源二进制里找到的关键级漏洞,用的是IDA Pro加MCP协议加LLM的组合。


Wiz Research博客认为:AI增强的逆向工程工具将在发现需要深入跨组件分析的漏洞类型方面,发挥越来越重要的作用。https://www.wiz.io/blog/github-rce-vulnerability-cve-2026-3854

AI不只在写代码,也在拆代码。

所有长期靠「闭源没人审」过日子的系统,都该重新估一遍自己真实的暴露面。

被分号撬开的信任假设

回到最初的问题。

CVE-2026-3854出现后,GitHub应急响应教科书级,补丁该有的全有,没有任何已知的真实攻击。

但这次事件留下了三件值得后端工程师认真思考的东西。

第一,系统设计上的隐患比单点漏洞更难察觉。

分隔符协议、跨服务隐式信任、last-write-wins解析语义,这三件事单独存在都不是什么大问题,组合在一起就是定时炸弹。任何用分号、竖线或换行传内部元数据的系统,今天就该翻一遍代码。

第二,多租户平台的风险是结构性的,不是GitHub一家的问题。

只要不同用户的数据放在同一台机器上、由同一个服务账户管理,这根敏感神经就一直在那里。攻击者一旦拿到执行权限,隔离能扛多少,取决于那个共享账户的权限边界设计得有多严。

第三,AI辅助逆向已经在重写攻防经济账。

AI辅助逆向正在改变攻防的成本结构。下一批被翻出关键漏洞的,大概率是那些长期靠「闭源没人审」撑着的企业级软件。

GitHub这次没出事,所以更应该认真讨论它。那个被信任了多年的X-Stat头,在一个分号面前,什么都没扛住。

参考资料:

https://www.wiz.io/blog/github-rce-vulnerability-cve-2026-3854%20

https://x.com/sagitz_/status/2049153195243372569?s=20

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
洗澡可能影响寿命!再次提醒:60岁以后,牢记洗澡"5不要"

洗澡可能影响寿命!再次提醒:60岁以后,牢记洗澡"5不要"

芹姐说生活
2026-10-11 22:55:47
订婚现场超吸睛!新娘美得像天仙般惊艳众人,新郎一现身却让全场愣住,这差距到底在哪呢

订婚现场超吸睛!新娘美得像天仙般惊艳众人,新郎一现身却让全场愣住,这差距到底在哪呢

蝴蝶花雨话教育
2026-10-12 01:10:07
狂丢17次球权!利物浦亿元水货惹众怒:浪射不传球 2队友气炸挥拳

狂丢17次球权!利物浦亿元水货惹众怒:浪射不传球 2队友气炸挥拳

我爱英超
2026-10-12 07:32:07
梅西还是C罗?卡西利亚斯:我选择C罗

梅西还是C罗?卡西利亚斯:我选择C罗

懂球帝
2026-10-12 11:40:38
官宣!弗格加盟宏远,陈老板签NBA首轮秀,4外援剑指CBA总冠军!

官宣!弗格加盟宏远,陈老板签NBA首轮秀,4外援剑指CBA总冠军!

体坛卡卡说
2026-10-12 20:59:42
佛山最新公告:将适时发射火箭弹增雨

佛山最新公告:将适时发射火箭弹增雨

珠江时报
2026-10-12 20:13:58
好特别的白色造型,太高级了

好特别的白色造型,太高级了

Yuki女人故事
2026-06-29 22:20:28
总统梦要碎了?特朗普曝出重磅丑闻,竞选对手痛批:他有精神疾病

总统梦要碎了?特朗普曝出重磅丑闻,竞选对手痛批:他有精神疾病

小莜读史
2026-10-12 13:03:08
日本教练亲口认了:王曼昱打碎的,是整代日本女乒的底气!

日本教练亲口认了:王曼昱打碎的,是整代日本女乒的底气!

曹老师评球
2026-10-11 21:41:42
陈梦、丁宁看台见证,王曼昱夺冠后国乒全队起立鼓掌!陈梦穿搭休闲低调,戴着帽子,十分低调

陈梦、丁宁看台见证,王曼昱夺冠后国乒全队起立鼓掌!陈梦穿搭休闲低调,戴着帽子,十分低调

开成运动会
2026-10-11 23:18:53
新华社消息|外交部:同“台独”势力绑在一起没有任何前途

新华社消息|外交部:同“台独”势力绑在一起没有任何前途

新华社
2026-10-12 17:09:35
别神化诺奖!中国科协发声,只能衡量基础科研深度,测不出一国科技整体厚度,网友:中国科协说得没错,诺奖有3个很大的缺点

别神化诺奖!中国科协发声,只能衡量基础科研深度,测不出一国科技整体厚度,网友:中国科协说得没错,诺奖有3个很大的缺点

火山詩话
2026-10-12 08:58:42
日本政客为何把制裁当勋章自我麻痹?

日本政客为何把制裁当勋章自我麻痹?

小眼睛小世界
2026-10-12 07:29:02
中国女排一夜4大消息,名帅之女突然解约,庄宇珊再轰全场最高分

中国女排一夜4大消息,名帅之女突然解约,庄宇珊再轰全场最高分

南海浪花
2026-10-12 16:39:35
中国开始战备动员,多地百姓申请参战,释放3重信号,会打日本吗

中国开始战备动员,多地百姓申请参战,释放3重信号,会打日本吗

霁寒飘雪
2026-10-12 09:55:46
美乌关系急剧恶化,欧洲盟友感到震惊,特朗普“换乌克兰总统”言论引发风波

美乌关系急剧恶化,欧洲盟友感到震惊,特朗普“换乌克兰总统”言论引发风波

环球网资讯
2026-10-12 06:32:12
纪委能不能查到微信语音通话录音?别急着删聊天记录!给你讲清楚

纪委能不能查到微信语音通话录音?别急着删聊天记录!给你讲清楚

职场资深秘书
2026-10-08 10:46:53
快讯!韩国瑜表态了!

快讯!韩国瑜表态了!

故事终将光明磊落
2026-10-12 06:52:21
男篮名宿张卫平近况曝光:定居美国,离婚后再婚,75岁仍未退休

男篮名宿张卫平近况曝光:定居美国,离婚后再婚,75岁仍未退休

娱圈办事处
2026-10-12 13:31:13
莫斯科四大机场关闭!普京机队无法降落,被迫飞往圣彼得堡

莫斯科四大机场关闭!普京机队无法降落,被迫飞往圣彼得堡

项鹏飞
2026-10-10 20:28:54
2026-10-12 22:03:00
新浪财经 incentive-icons
新浪财经
新浪财经是一家创建于1999年8月的财经平台
5019096文章数 9757关注度
往期回顾 全部

科技要闻

尊界:10月底确认制动踏板支架升级方案

头条要闻

8千元小狗遭仅退款 商家驱车600公里上门顾客称狗已死

头条要闻

8千元小狗遭仅退款 商家驱车600公里上门顾客称狗已死

体育要闻

一周吃6顿披萨的胖子,也能单防姆巴佩?

娱乐要闻

张艺谋身体状况曝光 陈婷不再顾及体面

财经要闻

尊界,是江淮的救命车还是失血引擎?

汽车要闻

小鹏G9L巴黎车展全球上市 法国市场售价74990欧元起

态度原创

时尚
本地
旅游
健康
军事航空

早秋穿衣别只认准黑色,看看这几款绿色单品,清新养眼又减龄

本地新闻

踏访沙县第一村,寻国民小吃本源

旅游要闻

【甘快看】甘肃敦煌:大漠胡杨醉金秋

孩子运动莫名晕倒?当心这类疾病

军事要闻

视频:沙特方面公布利雅得机场遭袭画面

无障碍浏览 进入关怀版