GitHub用户名重定向漏洞:如何通过链接劫持赚取4万美元赏金

本文详细分析了GitHub用户名重定向机制的安全漏洞,通过自动化脚本发现可劫持的旧用户名,实现依赖链劫持并获得高额漏洞赏金的实战经验与技术细节。

GitHub特性如何帮我通过漏洞赏金赚取4万美元+

GitHub在用户名重命名后会自动重定向旧链接——直到有人注册旧用户名。我构建了一个扫描器来发现并劫持这些链接。

本文建立在我早先关于使用Bash脚本和本地克隆扫描GitHub仓库中失效链接的文章基础上。如果还没看过,可以查看: 👉《如何通过GitHub仓库的失效链接劫持赚取2万美元+》

在GitHub仓库上运行我的失效链接扫描器时,我遇到了一个奇怪的情况。 像这样的链接:

1
https://github.com/olduser/oldrepo

会重定向到新用户名,例如:

1
https://github.com/newuser/oldrepo

但当我访问:

1
https://github.com/olduser

却返回404——表明旧用户名未被注册。

这时我意识到一个微妙但危险的细节: GitHub在用户名重命名后会重定向仓库链接——但仅当旧用户名保持未注册状态时成立。 如果有人注册了旧用户名,重定向会静默失效,旧链接将指向你自己的个人资料和仓库。

这意味着任何使用旧格式的仓库链接现在都可被劫持。

🧠 利用漏洞

这开启了一个隐蔽的攻击向量: 注册旧用户名,重建仓库名称,并托管自己的内容。 如果旧用户名和仓库仍被以下来源引用:

  • Helm或Docker安装命令
  • CI/CD流水线
  • 构建脚本
  • 第三方文档

你现在就控制了一个活跃的依赖链接。

🛠️ 自动化发现

我修改了早先基于Bash的扫描器来实现:

  • 从克隆的仓库中提取所有GitHub链接
  • 将其简化为用户名部分(github.com/username)
  • 检查个人资料是否返回404
  • 如果是→尝试注册用户名
  • 重建该用户名下之前引用的所有仓库

我使用这个简单的单行命令格式化GitHub URL:

1
cat urls.txt | grep github.com | awk -F[/] '{print $1"//"$3"/"$4}' | sort | uniq

“此仓库已被接管用于负责任披露。不提供恶意内容。”

这为我提供了安全、可重复的概念证明用于报告。

💰 赏金成果

这个方法帮助我发现并负责任地报告了多个流行组织中的可劫持GitHub用户名。有些是小项目,但其他包括:

  • 关键内部工具
  • 自动化中使用的安装脚本
  • 被数十个其他项目引用的依赖项

其中多个被认定为高严重性漏洞,赏金从500美元到10,000美元不等,具体取决于上下文。

如果你在GitHub搜索:

“Takeover by codermak”

仍然能找到当时这种技术的痕迹。

这种方法成为我最成功的策略之一——而这一切都始于一个本不该有效的重定向。

这种攻击向量至今仍然有效。许多GitHub仓库继续依赖与旧用户名绑定的URL,这些URL现在返回404或静默重定向。如果这些旧用户名被释放并被他人注册,就会为恶意代码注入、凭据收集和供应链攻击打开大门。即使到今天,多家公司仍然受到影响,这使得这成为一个值得持续监控的高影响问题——对于知道在哪里寻找的赏金猎人来说,这仍然是有利可图的。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计