当前位置: 首页 > news >正文

GitHub 被分号击穿信任防线,AI 逆向工具敲响闭源系统安全警钟

GitHub 被分号击穿三层信任,AI 填平逆向护城河敲响闭源系统安全警钟

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 就出现了两次。

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 把同样的攻击链对准 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 管理员当下补丁清单里的唯一一条。光看 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 增强的逆向工程工具将在发现需要深入跨组件分析的漏洞类型方面,发挥越来越重要的作用。AI 不只在写代码,也在拆代码。

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

被分号撬开的信任假设

回到最初的问题。CVE-2026-3854 出现后,GitHub 应急响应教科书级,补丁该有的全有,没有任何已知的真实攻击。但这次事件留下了三件值得后端工程师认真思考的东西。

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

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

第三,AI 辅助逆向已经在重写攻防经济账。AI 辅助逆向正在改变攻防的成本结构。下一批被翻出关键漏洞的,大概率是那些长期靠「闭源没人审」撑着的企业级软件。GitHub 这次没出事,所以更应该认真讨论它。那个被信任了多年的 X-Stat 头,在一个分号面前,什么都没扛住。

http://www.jsqmd.com/news/800944/

相关文章:

  • 2026年中国靠谱的模具设计公司排名:寅动智能有实力吗? - mypinpai
  • 3步掌握NBTExplorer:从Minecraft数据恐惧到编辑专家的完整指南
  • NAND闪存市场演进:从消费电子到AI时代的技术博弈与产业洞察
  • 口碑好的无人机培训包就业公司推荐——华研科技 - 工业品牌热点
  • ARM A64指令集架构解析与优化实践
  • 别再傻傻分不清TPS和QPS了!性能测试新手必看的5个核心指标实战解读
  • 知识蒸馏与Koopman算子结合的神经网络线性化方法
  • 2026年宁波首饰黄金回收费用,宁波瑞谨奢侈品口碑不错 - mypinpai
  • 5分钟搞定Windows风扇控制:FanControl让你的电脑散热更智能更安静
  • 2026年浙江泰平主要做光缆配线架吗?口碑怎么样? - mypinpai
  • 终极maya-glTF导出攻略:从3D建模到Web 3D的无缝转换秘籍
  • 别再被异常值带偏了!聊聊机器学习中稳健回归的‘抗揍’算法:IRLS
  • 直播人力成本居高不下?2026十大AI数字人直播平台推荐实现长效运营
  • 苏皖江虎再生资源回收报废多联机组中央空调怎么样 - 工业品牌热点
  • 从2012年ACE奖看电子产业创新:Zynq、CMOS振荡器与混合域示波器的启示
  • 【 Godot 4 学习笔记】资源路径
  • 如何3分钟获取百度网盘提取码:智能工具实战指南
  • 北京智源联合多机构发布FlagSafe大模型安全体系,为AI发展保驾护航
  • Pro UI Engineering Skill:让AI生成专业级UI的工程化设计规范指南
  • RAG 检索查不准的工程归因:从向量对齐到分层召回的架构取舍
  • 高端Inconel625合金供应商推荐:2026年Inconel625合金厂商联系方式 - 品牌2026
  • 2026年鼎博智能满意度排名,其超声波发生器靠谱吗? - mypinpai
  • 大型螺杆机回收选哪家?苏皖江虎再生资源可信赖 - 工业品牌热点
  • 2026年4月耐磨粉品牌推荐,耐磨剂/润滑粉/PTFE超微粉/铁氟龙超细粉/耐磨粉/特氟龙耐磨粉,耐磨粉厂家哪家强 - 品牌推荐师
  • 从租用替身参会看机器人系统集成:FPGA与MCU在远程呈现中的应用
  • 基于MCP协议的AI智能体集成平台Metorial:一站式工具调用解决方案
  • 蓝牙信道探测技术:原理、应用与UWB对比全解析
  • 配置管理核心设计:从YAML、环境变量到安全实践与Kubernetes集成
  • BetterJoy实战指南:让Switch控制器在PC上完美运行的高效方案
  • 2026年知网降AI新指南:免费降AI技巧必备,教你论文降AIGC从90%直降10%! - 降AI实验室