Pull to refresh

Comments 23

Отличная находка! Я думаю, что гитхабу плевать на безопасность пользователей. Тем более, после того, как он продался Microsoft.
Свои проекты перетащил на gitlab. Github остался только для обратной совместимости…
Думал написать свои мысли по этому поводу в статье, но не стал. Отпишу таки тут.

Не думаю, что тут виноват майрософт. У меня к нему давняя нелюбовь, но в последнее время они очень хорошо маскируются под хороших ребят. Прям хочется верить. Даже дико популярный в последнее время vscode чего стоит.

Скорее причина кроется в том, из-за чего собственно гитхаб отошёл майрософту. У них банально не хватало ресурсов ни на какие нововведения и фиксы. А сейчас они много новых плюшек выкатывают. Хотя странно видеть «реовлюционное нововведение» в виде встроенного в клиент гитхаба способа разрешения конфликтов, который уже есть в любой IDE… Но надо же с чего-то начинать, чтобы догонять.

Да и, хотя я пеняю в этом посте на их безопасность, основные важные вещи у них таки покрыты программой bug bounty. Есть у меня ощущение, что более адекватный человек из поддержки понял бы суть проблемы сломавшегося механизма (я думаю, он был, но сломался) — но мне не повезло. Писать ещё один репорт бесполезно, поэтому решил вынести это наружу.
Если не хватает ресурсов на «работу над ошибками», то что можно говорить о «новых фичах»?
Такую же «уязвимость» можно представить и на любом shared-хостинге. Ищем домены направленные на площадки хостеров, но не отдающие сайт. Создаем vhost и «угоняем» сайт.

Верно подмечено, однако аналогия некорректна в силу толстых нюансов:


1) У большинства хостингов или выделенные IP, или есть некоторый разброс адресов. Придётся искать конкретные хостинги, которые имеют только один IP. Довольно геморройное занятие.
2) Хостинги не бесплатны, в отличие от репозиториев на гитхабе. Поэтому занятие резко становится менее интересным. Да ещё и надо входить в каждую отдельную панель, закачивать файлы сотней разных способов… Совсем неинтересно.
3) Хостинги не заинтересованы в защите доменов, и не имеют возможности связаться с предыдущим владельцем хостинга. Видимо, гитхаб тоже не заинтересован, что печально, однако средство связи (узнать, у кого было привязано это имя ранее) у них есть.
4) Опять же, можно хотя бы проверять факт, был ли ранее привязан куда-то домен, и на основании этого запрашивать проверочную NS запись.

CNAME-запись не является средством аутентификации, а служит для удобства идентификации принадлежности привязанного домена к репозиторию, что-то вроде заметки или комментария. Веб-сервер Github Pages, отдающий страницу, не занимается DNS-проверками, он просто отдает страницу того домена, Host которой он знает.

Формально да. Но в таком случае зачем в руководстве указано ставить именно CNAME своего репозитория? Всё же есть явное ощущение, что в планах было использовать его для аутентификации, благо технически это легко (они и так на этапе привязки проверяют, есть ли CNAME на гитхаб, так что ничего сложнее не станет) — но то ли забыли, то ли сломали.

Я не знаю, чем руководствовался Github (возможно, действительно планировалось делать проверку по cname), но мне кажется, что это просто пометка. Представьте, что у вас 100 доменов, привязанных к Github Pages, и из-за уникальных CNAME вы можете понять, к какому репозиторию конкретный домен имеет отношение, просто из DNS-записи. Это визуально удобней, чем если бы у всех доменов был CNAME на github.io.
Вы, возможно, будете удивлены, но я терпеть не могу git и всё, что с этим связано.

Причина этому — моё прошлое в качестве айти-безопасника, скажем так, попроще.
Да, это удобно. Это очень удобно — проектики ваши, синхронизация, профиль, все дела.
Но вы никогда не думали о том, что в один прекрасный момент кто-то это всё сломает?

Куда потекут ваши «закрытые» данные?

Поэтому, я считаю, всё, что представляет интеллектуальную ценность, просто обязано храниться на ваших же ресурсах. Физически ваших ресурсах. И устраивайте себе на ваших ресурсах всё, что угодно, сейчас возможностей масса.

А плохо и небезопасно всё то, над чем вы лично не имеете контроля. Будь то страничка в vk, профиль в git, облачко… и так далее. Задумайтесь.
Вы немного перепутали git и github.

К тому же, когда мы говорим про github, то редко подразумеваем закрытые данные — основной смысл эта площадка имеет при совместной работе над open source. А открытый код никуда не утечёт.
предлагаете каждому купить по серверной стойке? ) дороговато выйдет.
Git сервер не обязательно должен занимать целую стойку. Им может быть старый компьютер с Linux или даже одноплатный микро компьютер на ARM размером с пачку сигарет. Ещё вариант — поднять на VPS. Если нужна вэбморда — GitLab есть в репозиториях под многие сборки Linux.
Вы, наверное, всё же имеете в виду github. Собственно git к этому сервису никак не привязан.
Проблема известна довольно давно (как минимум 4 года) labs.detectify.com/2014/10/21/hostile-subdomain-takeover-using-herokugithubdesk-more

И гитхаб не единственный, кто этим страдает. По сути вся индустрия сейчас движется в таком же направлении, к сожалению. Есть даже тулза tko-subs, которая парсингом ответа сервера проверяет на возможность его (домена) захвата. Можете посмотреть примерный масштаб трагедии (там далеко не все уязвимые сервисы, их гораздо больше): github.com/anshumanbh/tko-subs/blob/master/providers-data.csv
Печально как. Я немного гуглил, но навскидку ничего этого не нашёл.
То есть… github pages небезопасен от слова совсем?

Ну смотря с какой стороны посмотреть. И гитхаб и другие провайдеры не считают это своей уязвимостью, они считают это уязвимостью тех, кто коряво настраивает свои поддомены в их сервисах, даже если это было сделано неявно, как в этой статье. И даже майкрософт тут не причем, это было задолго до него :)
Могу подлить лишь масла в огонь, сказав что та самая тулза tko-subs умеет автоматически захватывать домены (в т.ч. на github pages), если запустить ее с ключом -takeover. То есть, скорее всего, атакующие даже не видят какие именно поддомены захватывают, ведь за них все делает скрипт.

Черт возьми. Слушайте, я не настоящий сварщик. Как мне защитить мой домен на github pages? Не заводить его совсем?
Ну если в данный момент у вас домен привязан верно, то все хорошо, никто не сможет перехватить контроль над вашим доменом. Просто если вы случайно отключите привязку хотя бы на несколько минут, то есть риск, что скрипты злобных хакеров успеют его захватить. Но даже в этом случае вы либо просто удаляете CNAME запись, либо пишите в поддержку гитхаба. Проблема в том, что вы можете не заметить этого сразу, как автор публикации. Таковы современные реалии…
О, с привязкой как раз возникли проблемы :(

Дело в том, что я хочу привязать к своему домену 3 уровня github-pages, которые репозиторий в организации. И пляски с бубном очень неочевидные :(
Пляски с SSL-сертификатом чтоли? Если у вас есть контроль над DNS зоной, то просто привязать домен — это указать его в настройках как Custom domain и добавить CNAME запись на YOUR-GITHUB-USERNAME.github.io

Или у вас проблема в том, чтобы перенести репозиторий на отдельный аккаунт?
До сертификата даже дело не дошло :(
Force SSL не работает.
Пойдемте в личку, что ли?
Логично, что это не уязвимость — ведь это автор сам умудрился открыть дырку к себе. Это как дроплеты на ДО, которые создают с доступом без пароля к руту «на время, пока не настроят» — а потом удивляются, чего это их дроплеты с китайских IP кто-то вайпнул.

Правильный способ:

1. Добавляешь в репо CNAME

2. Добавляешь в DNS домена IP github pages

Неправильный способ:

1. Добавляешь в DNS домена IP github pages

*. Кто-то может добавить CNAME в свой репо быстрее тебя

2. Добавляешь в репо CNAME

Нужно действовать правильным способом, тогда проблем и не будет. А то начнем называть пароли типа 123456 проблемой сервиса, а не пользователя.
Sign up to leave a comment.

Articles