@IntCyberDigest: 最新研究显示,你可以将任何已签名的 GitHub 提交复制为另一个看起来完全相同的提交,而无需作者私钥,从而创建一个具有相同树结构、相同元数据、有效签名和 GitHub“已验证”徽章的不同提交。
摘要
卡内基梅隆大学的最新研究表明,可以创建一个与任何现有已签名提交外观完全相同的不同已签名提交,且具有有效签名和 GitHub“已验证”徽章,这破坏了提交哈希作为加密指纹的独特性。
查看缓存全文
缓存时间: 2026/07/07 21:38
突发: 新研究表明,你可以将任何已签名的 GitHub 提交复制到第二个外观完全相同的提交中,而无需作者的私钥,从而生成一个具有相同树、相同元数据、有效签名以及来自 GitHub 的“已验证”徽章的不同提交。
在 GitHub 上,绿色的“已验证”徽章本应表示两件事:可信作者签名,以及其 ID 是该确切代码的唯一指纹。Jacob Ginesin 在卡内基梅隆大学的一份预印本指出,第二个承诺,即唯一指纹,并不成立。
为何重要: 安全团队和包管理系统(如 Go、Nix 和 GitHub Actions 背后的工具)信任该 ID 作为代码的唯一标识。如果封锁或固定了“坏”版本,攻击者就能在全新的、仍被验证的 ID 下重新发布相同的已签名代码,从而绕过防御。作者称 Git 和 GitHub 尚未修复此问题。
概念验证: https://github.com/JakeGinesin/git-chain-malleator…
JakeGinesin/git-chain-malleator
来源:https://github.com/JakeGinesin/git-chain-malleator
Git 哈希链可变性
利用 Git 提交上的可变签名来篡改 Git 仓库中的哈希链!
本仓库提供了一个 Nix flake,其中包含 interactive-malleator.py 和 setup-ghost.py,并附带了每种算法的测试用例。每个测试都会创建一个 $GNUPGHOME(或自签名 X.509),生成一个签名提交,运行变形器,并断言预期的不可变属性。
目录结构
.
├── flake.nix
├── scripts/
│ ├── interactive-malleator.py # GPG: ECDSA / RSA / EdDSA
│ └── setup-ghost.py # S/MIME: CMS DER 长度重新编码
└── tests/
├── lib.sh # 共享:gpg 设置、密钥生成、签名仓库
├── test-ecdsa.sh # NIST P-256 -> 代数 s -> n − s
├── test-rsa.sh # RSA-2048 -> 结构 Tag 60
├── test-eddsa.sh # ed25519 -> 结构 Tag 60
├── test-smime.sh # CMS/X.509 -> DER 长度重新编码
└── run-all.sh
使用方法
nix develop # 开发 shell (python3, git, gnupg, openssl)
bash tests/run-all.sh # 运行所有测试
bash tests/test-ecdsa.sh # 单个算法
bash tests/test-rsa.sh
bash tests/test-eddsa.sh
bash tests/test-smime.sh
# 在你的仓库中交互式地篡改 GPG 签名提交!
python3 scripts/interactive-malleator.py \
--repo /path/to/your/repo
nix flake check 仅能识别 git 跟踪的文件,所以运行前请先执行 git add .。
预期结果
| 算法 | 变形方式 | 本地 git verify-commit | GitHub 已验证徽章 |
|---|---|---|---|
| ECDSA | 代数 (s → n − s) | 通过 | 通过 |
| RSA | 结构 (Tag 60) | 通过 | 通过 |
| EdDSA | 结构 (Tag 60) | 通过 | 通过 |
| S/MIME | DER 长度重新编码 | 失败 (通过 gpgsm) | 通过 |
每个测试验证上表中本地侧的行,以及:
- 变形后的哈希 != 原始哈希
- 树哈希不变(内容相同)
- 对于 S/MIME:字节差异仅限于
gpgsig头部
给维护者的说明
- Nixpkgs / 任何哈希固定系统:将
hash(commit)作为唯一标识的信任很可能不可靠;相同的签名内容会产生 n 个有效的“已验证”哈希。 git-verify-commit调用者:严格的本地验证可以捕获结构变形(RSA/EdDSA/S-MIME),但无法捕获 ECDSA 代数变形。建议在验证之后(而非之前)进行基于哈希的去重固定。- CI/CD、Go 代理、Docker 引用:同样的问题:在签名者被攻破或镜像恶意的情况下,提交哈希不能作为内容可寻址的主键。
相似文章
新研究:经过“验证”的GitHub提交并非唯一
Jacob Ginesin的一篇新预印本揭示,经过验证的GitHub提交可以被篡改,产生多个具有不同哈希值的有效签名,这破坏了唯一性的假设,并影响了供应链安全。
Git哈希链可塑性
一篇研究论文揭示,Git提交哈希可以被篡改,从而生成第二个具有不同哈希但内容相同且签名有效的有效提交,这破坏了提交哈希完整性和供应链安全性。
Megalodon:通过CI工作流大规模后门GitHub仓库
一项安全研究揭示了一种名为Megalodon的技术,通过利用CI工作流大规模后门GitHub仓库。
GitLost:我们诱骗GitHub的AI代理泄露私有仓库
Noma Labs发现GitHub的Agentic Workflows中存在一个严重的提示注入漏洞,允许未经身份验证的攻击者通过在同一组织的公共仓库中发布精心构造的GitHub Issue,从私有仓库中窃取数据。
我发现有1万个GitHub仓库在传播特洛伊木马
一位安全研究人员发现超过1万个GitHub仓库通过复制合法仓库并定期更新readme文件附带恶意zip压缩包来传播特洛伊木马。该研究人员开发了一种检测模式,并分享了该恶意软件如何逃避检测的细节。