GitHub特性如何帮我通过漏洞赏金赚取4万美元+
GitHub在用户名重命名后会自动重定向旧链接——直到有人注册旧用户名。我构建了一个扫描器来发现并劫持这些链接。
本文建立在我早先关于使用Bash脚本和本地克隆扫描GitHub仓库中失效链接的文章基础上。如果还没看过,可以查看: 👉《如何通过GitHub仓库的失效链接劫持赚取2万美元+》
在GitHub仓库上运行我的失效链接扫描器时,我遇到了一个奇怪的情况。 像这样的链接:
|
|
会重定向到新用户名,例如:
|
|
但当我访问:
|
|
却返回404——表明旧用户名未被注册。
这时我意识到一个微妙但危险的细节: GitHub在用户名重命名后会重定向仓库链接——但仅当旧用户名保持未注册状态时成立。 如果有人注册了旧用户名,重定向会静默失效,旧链接将指向你自己的个人资料和仓库。
这意味着任何使用旧格式的仓库链接现在都可被劫持。
🧠 利用漏洞
这开启了一个隐蔽的攻击向量: 注册旧用户名,重建仓库名称,并托管自己的内容。 如果旧用户名和仓库仍被以下来源引用:
- Helm或Docker安装命令
- CI/CD流水线
- 构建脚本
- 第三方文档
你现在就控制了一个活跃的依赖链接。
🛠️ 自动化发现
我修改了早先基于Bash的扫描器来实现:
- 从克隆的仓库中提取所有GitHub链接
- 将其简化为用户名部分(github.com/username)
- 检查个人资料是否返回404
- 如果是→尝试注册用户名
- 重建该用户名下之前引用的所有仓库
我使用这个简单的单行命令格式化GitHub URL:
|
|
“此仓库已被接管用于负责任披露。不提供恶意内容。”
这为我提供了安全、可重复的概念证明用于报告。
💰 赏金成果
这个方法帮助我发现并负责任地报告了多个流行组织中的可劫持GitHub用户名。有些是小项目,但其他包括:
- 关键内部工具
- 自动化中使用的安装脚本
- 被数十个其他项目引用的依赖项
其中多个被认定为高严重性漏洞,赏金从500美元到10,000美元不等,具体取决于上下文。
如果你在GitHub搜索:
“Takeover by codermak”
仍然能找到当时这种技术的痕迹。
这种方法成为我最成功的策略之一——而这一切都始于一个本不该有效的重定向。
这种攻击向量至今仍然有效。许多GitHub仓库继续依赖与旧用户名绑定的URL,这些URL现在返回404或静默重定向。如果这些旧用户名被释放并被他人注册,就会为恶意代码注入、凭据收集和供应链攻击打开大门。即使到今天,多家公司仍然受到影响,这使得这成为一个值得持续监控的高影响问题——对于知道在哪里寻找的赏金猎人来说,这仍然是有利可图的。