lysophavin18/CVE-2026-3854-PoC

GitHub: lysophavin18/CVE-2026-3854-PoC

CVE-2026-3854 的概念验证脚本,演示了通过 git push option 中的分号注入实现 GitHub 远程代码执行的完整攻击链。

Stars: 2 | Forks: 0

# CVE-2026-3854 PoC — 通过 X-Stat Push Option 注入实现 GitHub RCE ## 概述 **CVE-2026-3854** 是 GitHub Enterprise Server(以及 GitHub.com)`git push` 管道中的一个远程代码执行漏洞。 当客户端提供 push option(`git push -o`)时,GitHub 的内部 Ruby 代码会通过将每个选项值与分号作为字段分隔符进行拼接来构建 `X-Stat` header。由于这些值被**直接按原样**插入(未经清理),攻击者可以在 push option 中嵌入分号,从而向 header 中注入任意的键值字段并覆盖安全关键设置——最终实现以 `git` 用户身份运行的非沙箱化 RCE。 ### 漏洞根本原因 ``` X-Stat: repo_id=12345;user_id=alice;rails_env=production;...;push_option_0= ``` 将 `normal_value;rails_env=staging` 作为 push option 的值注入后会变成: ``` ...;push_option_0=normal_value;rails_env=staging ``` 解析器会提取每个键**最后一次**的出现位置,因此 `rails_env` 现在变成了 `staging`(非沙箱化),从而覆盖了先前设置的合法 `production` 值。 ## 要求 - Python 3.10 或更高版本(使用内置的 `list[str]` / `dict[str, str]` 类型提示) - 无需第三方包 ## 用法 ``` python3 exploi-git.py ``` 该脚本完全在内存中运行三个连续的演示——没有网络连接,没有 shell 命令,也没有文件写入: | 演示 | 展示内容 | |------|---------------| | **1** | 覆盖 `rails_env` 的基础分号注入 | | **2** | 完整的 3 步概念性 RCE 攻击链 | | **3** | 已修补的行为 — 分号被百分比编码,注入被中和 | ## 补丁 GitHub 通过在将 push option 值插入 `X-Stat` header 之前对其中的分号进行百分比编码,修复了该漏洞: ``` normal_value;rails_env=staging → normal_value%3Brails_env=staging ``` 这使得分号成为值的一个字面部分,从而破坏了注入。 ## 参考 - [Wiz Research 博客文章](https://www.wiz.io/blog/github-rce-vulnerability-cve-2026-3854) - [GitHub 安全博客](https://github.blog/security/securing-the-git-push-pipeline/) - [NVD — CVE-2026-3854](https://nvd.nist.gov/vuln/detail/CVE-2026-3854) ## 免责声明 本仓库仅出于**教育目的**提供,并用于支持**授权的安全研究**。作者对任何误用不承担责任。在对您不拥有的任何系统进行测试之前,请务必获得明确的书面许可。
标签:CISA项目, CVE-2026-3854, Git Push选项, PoC, RCE, Ruby, X-Stat注入, 企业版, 参数注入, 命令注入, 安全修复, 数据展示, 暴力破解, 概念验证, 漏洞分析, 知识库, 红队, 编程工具, 网络安全研究, 路径探测, 远程代码执行