Как Егор Хомяков GitHub поломал

Сегодня у нас есть одна новость, не написать о которой мы просто не могли :)

Для описания полной картины, дам слово нашему техническому директору Диме Свиридову…

Акции и спецпредложения в нашем Telegram-канале
Подписаться

Вернувшись из соседнего помещения, обратил внимание, что в офисе стоит необычный гул… Сотрудники отдела разработок оживленно и шумно беседовали. Егор и Максим активно обсуждали что-то. Я небрежно плюхнулся в первое попавшееся свободное кресло и решил выступить слушателем =) В нашей компании всегда поощряются полемики на научные темы. Но на этот раз все ограничилось повествованием, Егор рассказал Максиму, нашему ведущему разработчику, о том, что похоже нашел странную дырку в рельсах, цитирую по памяти «если не указать attr_accessible, то кажется можно хешем пробрасывать в модель любые параметры…».

После этой фразы в офисе воцарилась тишина. Слышно было, как в соседней комнате руководитель отдела бронирования стучит по клавишам.

Далее как в фильмах про космический альянс: кто-то крякнул «нихрена себе», сотрудники с выпученными глазами ринулись к ближайшему компьютеру. Создали тестовый проект, проверили… и дружно начали ржать и гоготать =) Стало понятно, что теория верна (кстати, никому она не напоминает старинную дырку с директивой register_globals в PHP?=) ) Я пересел на диван, и начал молча наблюдать за рождением звезды. Уже через 5 минут Максим нависал над компом Егора, и они дружно пытались проверить свою теорию, постили где-то коммент с датой кажется 1400 года =)

С этого момента работа отдела разработок встала на 2 дня. Ребята носились с этой идеей в голове, все обсуждения постоянно переключались на этот баг. И вот 1-го марта Егор с улыбкой на лице зашел в офис и заявил «я запостил ишью в рельсы». Все выразили респект, включая меня. Лично мне было очень приятно, что наш молодой специалист проявляет ответственность, мы выбрали язык руби как наш корпоративный стандарт, все части системы пишутся на нем, и факты свидетельствующие о стремлении разработчиков повышать качество ПО не могут не радовать. Далее события развивались для меня стремительнее чем ожидалось. В понедельник Егор не вышел на работу =) от Валеры я узнал, что Егор не спал всю ночь, и сказал (цитирую по памяти) «вылези в инет, узнаешь что случилось».

А через 10 минут я уже читал свежий топик (habrahabr.ru/blogs/infosecurity/139399/) про нашего Егора =) резонанс превзошел  все ожидания. Возмущенный Егор был сильно задет тем, что разработчики рельсов не приняли его топик всерьез, и на выходных сорвался =) Он держал в руках РПГ, так почему бы не пальнуть по вертолету, может тогда воспримут всерьез… классика жанра (с)

А вот о случившемся со слов самого Егора Хомякова:

Мы с Максом спорили об уязвимостях в рельсах и выяснилось что он не был знаком с attr_accessible и его задачей. Это было странно и я сразу представил сколько других программистов разного уровня не знают или просто забивают на защиту своих атрибутов.

Вообще это совершенно тривиальный и давно известный баг. Я даже полагаю его много кто юзал но не на таком уровне. Например написать комментарий от лица другого прикольно а слить все приватные коды разных фирм зная лишь адреса репозитариев хуже.

Сначала был smoke-test чтобы узнать стоит ли вообще пытаться. Он прошел и я смог заменить created_at дату на свою. Это, как минимум, означало что атрибуты не защищены путем _accessible иначе бы все не перечисленные были бы недоступны. В лучшем случае они сделали attr_protected. Но случай был худший и защиты не было никакой. Модель Issue выглядела абсолютно «голой»

Но что модель Issue. Модель PublicKey выглядела куда веселей. Просто обновив поля ключа с user_id = Target_id я мог «подбросить» свой public-key жертве и пользоваться всеми его репозиториями.

Вот так бывает если игнорировать русских в багтрекере :)

Мое личное мнение такое:
Не сказать чтобы я одобрял такие методы привлечения внимания, но по сути своей эти действия можно сравнить с вырезанием опухоли. Операция это неприятно и больно, но лучше пусть это сделает врач, скальпелем, чем опухоль погубит твой организм. Егор сказал, что предварительно писал в github.com, однако ему и там не вняли.

Я считаю логин Егора Хомякова должен висеть здесь http://help.github.com/responsible-disclosure/. Ведь, фактически, покопай он глубже, и возможно мы сейчас читали бы исходники каких-то крупных проектов, хостящих репозитории на гитхабе? А если бы и в них нашли уязвимости? Сколько репутаций могло бы пострадать? А сколько людей слетело бы со своих постов?

Публично выражаю Егору респект, и как его непосредственный руководитель горжусь, что в нашей компании растут такие кадры. Обращаюсь к коллегам, при приеме сотрудника в компанию не всегда верно ставить на возраст.   

Дмитрий Свиридов
Технический директор

А вот и сам виновник :)

 

Хотите подобрать билеты в путешествие?
Подобрать билеты

Оцените статью: Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (2 голосов, средняя оценка: 3,00
Загрузка...