仅用于教育和授权安全研究目的。
未经明确书面许可,请勿对任何系统使用。
CVE-2026-3854 是 GitHub Enterprise Server(及 GitHub.com)git 推送管道中的一个远程代码执行漏洞。
当客户端提供推送选项(git push -o)时,GitHub 的内部 Ruby 代码会通过将每个选项值以分号作为字段分隔符拼接起来,构建一个 X-Stat 头。由于值被原样插入(未经清理),攻击者可以在推送选项中嵌入分号,向头中注入任意键值字段并覆盖安全关键设置——最终以 git 用户身份实现非沙箱 RCE。
X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0=<USER INPUT>
将 normal_value;rails_env=staging 作为推送选项值进行注入会变成:
...;push_option_0=normal_value;rails_env=staging
解析器会取每个键的最后一次出现,因此 rails_env 现在为 staging(非沙箱),覆盖了先前设置的合法 production 值。
list[str] / dict[str, str] 类型提示)python3 exploi-git.py
该脚本完全在内存中连续运行三个演示——无网络连接、无 shell 命令、无文件写入:
| Demo | What it shows |
|---|---|
| 1 | 覆盖 rails_env 的基本分号注入 |
| 2 | 完整的三步概念性 RCE 链 |
| 3 | 修复后的行为——分号被百分号编码,注入被中和 |
GitHub 通过在将推送选项值插入 X-Stat 头之前对分号进行百分号编码来修复该漏洞:
normal_value;rails_env=staging → normal_value%3Brails_env=staging
这使得分号成为值的字面组成部分,从而破坏了注入。
本仓库仅用于教育目的并支持授权安全研究。作者对滥用不承担任何责任。在针对任何非您所有的系统进行测试之前,务必获得明确的书面许可。