Проект GitHub уведомил [2] пользователей об инциденте, в результате которого произошло неавторизированное внедрение кода в репозиторий проекта Ruby On Rails. Уязвимость, из-за которой стал возможен взлом, уже устранена и начато расследование возможных последствий атаки. В настоящее время все факты свидетельствуют о том, что атака была лишь демонстрацией новой уязвимости, проведённой в открытую одним из исследователей, после того как GitHub и разработчики Ruby On Rails проигнорировали сообщение о наличии проблемы с безопасностью.
Проблема была выявлена и продемонстрирована Егором Хомяковым [3] из Санкт-Петербурга. Уязвимость вызвана особенностью обработки массового присваивания данных форм в популярном web-фреймворке Ruby on Rails [4] и может наблюдаться в различных приложениях, не ограничиваясь GitHub. При помощи бреши в Rails стало возможным внесение изменений и отправка данных в репозиторий любого проекта GitHub, без наличия явных полномочий на выполнение данных операций. За два дня до инцидента Егор оставил уведомление [5] о найденной им уязвимости для разработчиков проекта Ruby on Rails, но это уведомление было закрыто с комментарием, что ошибка находится в зоне ответственности конечных разработчиков приложений на Ruby on Rails. Тогда Егор решил продемонстрировать эту уязвимость в действии и внёс изменения в первичный репозиторий проекта Ruby on Rails, размещённый на GitHub.
Для привлечения внимания разработчиков Егор сначала создал уведомление о проблеме [6], для заметности установив дату создания, смещенную на 1001 год в будущее. После чего он добавил свой публичный ключ в список коммитеров проекта Ruby on Rails и внёс коммит [7] с комментарием в мастер-репозиторий. После того как GitHub устранил уязвимость Егор Хомяков опубликовал в своём блоге подробный рассказ [8] с описанием метода атаки на GitHub.
Представители GitHub сообщили [2], что проект инициировал проведение полного аудита используемого кода. В своем сообщении они признали, что Хомяков сообщил им об этой уязвимости двумя днями ранее, но потом без предупреждения осуществил внедрение своего публичного ключа и провёл демонстрационную атаку. "После проведенного анализа действий Хомякова, никакой зловредной активности с его стороны не обнаружено" – сообщил GitHub. По сообщению [9] GitHub, заблокированный после инцидента аккаунт Хомякова теперь восстановлен [10].
Проблема, известная как уязвимость массового присвоения [11] появилась в Rails с тех пор, как была добавлена возможность устанавливать сразу несколько атрибутов в рамках одного вызова. Эта проблема детально описана в официальном руководстве Rails Security Guide [12], в том числе, там описано и как с ней бороться, но, к сожалению, функциональность необходимая для этого по-умолчанию отключена в стандартной инсталляции Ruby on Rails. И хотя в данном конкретном случае эта проблема в GitHub уже устранена, множество Rails-приложений по всему миру по-прежнему подвержены этой уязвимости.
Коварность ситуации в том, что эта уязвимость не только хорошо известна, но и в том, что бороться с ней часто нет никакой технической возможности при неправильно выполненной установке. Хорошая новость заключается в том, что после столь демонстративного взлома, разработчики Rails внесли изменения [13] в ветку, на базе которой будет сформирован релиз Ruby on Rails 3.2, активировав белый список атрибутов по-умолчанию в стандартной установке, что даёт возможность бороться с этой уязвимостью. Всем текущим пользователям Ruby on Rails разработчики рекомендуют незамедлительно провести аудит кода, чтобы убедиться в том, что их система не была скомпрометирована сторонними лицами.
Ссылки:
[1] http://htfl.ru/cat-news-novosti-po
[2] /out.php?link=https://github.com/blog/1068-public-key-security-vulnerability-and-mitigation
[3] /out.php?link=http://homakov.blogspot.com/
[4] /out.php?link=http://rubyonrails.org/
[5] /out.php?link=https://github.com/rails/rails/issues/5228
[6] /out.php?link=https://github.com/rails/rails/issues/5239
[7] /out.php?link=https://github.com/rails/rails/commit/b83965785db1eec019edf1fc272b1aa393e6dc57
[8] /out.php?link=http://homakov.blogspot.com/2012/03/how-to.html
[9] /out.php?link=https://github.com/blog/1069-responsible-disclosure-policy
[10] /out.php?link=https://twitter.com/#!/homakov/status/176465129796407296
[11] /out.php?link=http://blog.mhartl.com/2008/09/21/mass-assignment-in-rails-applications/
[12] /out.php?link=http://guides.rubyonrails.org/security.html#mass-assignment
[13] /out.php?link=https://github.com/rails/rails/commit/06a3a8a458e70c1b6531ac53c57a302b162fd736