DNS Wildcard: когда твой домен открывает двери посторонним
Когда ваш домен становится песочницей для чужих: DNS wildcards и GitHub Pages
Вы в путешествии по Африке, связь нестабильная. Вдруг приходит уведомление от Google Search Console: кто-то зарегистрировал поддомен на вашем домене.
Ситуация реальная. Один разработчик разместил статический сайт на GitHub Pages — визуализатор 3D-точек. Пока он был оффлайн, кто-то занял kafka.immersivepoints.com и начал размещать там свой контент. Обнаружили проблему только спустя недели.
Как всё было настроено
GitHub Pages удобен тем, что не нужно настраивать серверы. Достаточно указать DNS-записи на IP-адреса GitHub, и сайт начинает работать.
Разработчик настроил wildcard-запись (*.immersivepoints.com), которая направляла весь трафик поддоменов на GitHub. Простое и элегантное решение, но с уязвимостью.
Предположение было простым: «Раз я владею доменом, значит, контролирую все его поддомены». Но GitHub Pages работает иначе.
Почему это стало возможным
GitHub принимает CNAME-файл из любого репозитория и начинает обслуживать его содержимое, если DNS-записи указывают на их сервера. Проверки владения доменом при этом нет.
Другой пользователь создал репозиторий с CNAME-файлом, указывающим на kafka.immersivepoints.com, 并开始托管他们的内容. 甚至从私密仓库操作, 开发人员无法直接发现和报告问题。
Wildcard-запись в DNS означает, что трафик на все поддомены направляется на один сервис. Это удобно, но удаляет тонкий контроль. В сочетании с отсутствием проверки на GitHub, это создает риск: каждый с аккаунтом на GitHub может «забрать» поддомен под вашей wildcard-записью.
本次事件中, 恶意用户托管了赌博网站, 导致域名在搜索引擎中被贬低.
Как обнаружили злоупотребление
Разработчик благодаря Google Search Console обнаружил проблему. 没有这个工具, 赌博站点可能会继续索引在他们的域名下 indefinitely.
这 illustrates 监控的重要性: 它是安全工具, 而不仅仅是性能 метрика.
GitHub's Half-Lösung
GitHub имеет feature 域名验证, 但它埋在账户设置中, 而不是在 репозиториях. 很少用户发现或了解需要它.
GitHub should:
- 显示警告在 репозиториях设置, 当域名不验证时
- 要求域名验证在允许CNAME文件服务之前
- 实现挑战机制, 如 DNS TXT records
开发人员报告了恶意仓库, 但没有确认响应. 响应时间和透明度不足.
Как защитить себя
Если вы используете GitHub Pages с custom domain, here's your checklist:
✓ Избегайте wildcard DNS records за исключением абсолютной необходимости. Используйте конкретные A records или CNAME records для exact subdomains.
✓ Verify your domain через GitHub's account settings.
✓ Используйте DNS TXT records для подтверждения ownership.
✓ Monitor your domain с Google Search Console или аналогичными сервисами. 设置 alerts для new pages.
✓ Regularly audit your GitHub Pages configuration.
✓ Consider not using GitHub Pages для production critical projects.
The Broader Lesson
这 incident illustrates 为什么开发人员需要理解 DNS configuration — не только设置, 而是为什么它 matters. A wildcard DNS record 像给予 GitHub a master key 至你的 entire subdomain structure. 它 convenient 直到它 isn't.
平台需要更好 security defaults. GitHub Pages 应改善 feature discoverability 和 security warnings. Burying 域名 verification 应在 front-and-center в repository setup flow.
The good news? 这 is all preventable. With proper DNS configuration 和 domain verification, 你的 GitHub Pages projects 保持 secure.
Just don't forget to set up monitoring.