Pull to refresh

Comments 140

Это действительно эпично. И печально.
Я правильно понимаю, об уязвимости теоретически кто-то мог знать давно?

Сам на Rails не пишу, но использую часто.
почти уверен что до 2013 о ней никто не знал. там эпичная цепочка генераторов и мы всем твиттером залезли в psych/params parser только когда искали очередной обход предыдущей CVE. И нашли МИФРИЛ В ГЛУБИНАХ МОРИИ АХАХА
Обновление до 3.2.11 решит проблемы?
Да. Обновление до django unchained решит уж точно
Я даже знаю, что открываю ящик Пандоры, но не могли бы знающие и знакомые с обеими технологиями люди обьективно прояснить по хардкору в чем рельсы принципиально лучше и хуже джанго?
Из чисто научного интереса спрашиваю.
Научный интерес не способен охватить вопросы предпочтений, иначе жизнь была бы сильно проще и лучше.

Лично мне очень не нравятся отступы и ряд других традиций в Python, вроде стиля именования приватных методов. Недавно видел, что Django ругают за то, что к нему сложно прикрутить поддержку нереляционных хранилищ и всякие CKEditor (не проверял эту информацию).

Ruby решает поставленные задачи, и решает их очень хорошо. Я говорю в первую очередь не о Web-разработке. Предлагаю закрыть тему, иначе начнётся ад и мусор.
ты не 'eveel' в тексте нету ни единого «бл*ть»!
А где ruby преуспел кроме веб разработки?
Можно подумать, что веб-разработка – это какая-то одна задача
Если перефразировать — Ruby без Rails редко используется.
Много чаще, чем вы думаете.
Ну я сам программист на Rails, не вижу просто ничего на ruby без rails, ни консольных утилит ни демонов/серверов, ни десктопных приложений. Может какие-то и есть, но не в таком количестве как python/perl.
Вообще-то Ruby задумался как альтернатива Perl в Unix-системах. То, что вы не видите, это еще не означает, что этого нет. Многие люди разрабатывают просто на Ruby — почитайте хотя бы официальный форум Ruby.
Факт в том, что в самом Ruby заложены очень мощные возможности как самостоятельного скриптового языка.
А то, что появился Ruby on Rails еще раз доказывает универсальность и гибкость языка Ruby.
И еще один момент. Сколько людей сейчас занимаются разработкой скриптов и демонов, а сколько веб-разработкой… почувствуйте разницу, как говорится.
Я вообще не рубист и не питонист. Ну то есть абсолютно и совсем, но видно, что питон явно используется чаще чем руби, «как альтернатива Perl в Unix-системах»
Всему свое время. Очень большую роль играет привычка как таковая. Я вот в свое время скрипты только на Perl писал и ни о каком python не думал.
Сейчас перешел на Ruby и для меня Perl уже не существует, а python как не было так и нет — я в нем АБСОЛЮТНО НИКОГДА не нуждался.
Один лишь раз посмотрел в сторону python ради научного интереса — увидел форматирование с помощью отступов — плюнул и сразу отвернулся.
Ну, наверное, вы — исключение. Я вот регулярно вижу какие-то утилитки на питоне. И никогда — на руби)
У меня вообще нет привычки рыться без надобности в системе и высматривать какие-то утилитки — бесполезная трата времени. Для меня ОС — это инструмент, которым я пользуюсь. Один раз правильно настроил и этого достаточно.
Возможно, на Ruby значительно меньше утилит, но он нашел себе более достойное и востребованное применение на просторах Интернет.
И могу сказать совершенно уверенно — Ruby on Rails — очень удобная и качественная система разработки веб-приложений, и я считаю, именно благодаря тому, что написана она на Ruby.

А насчет уязвимостей… покажите мне хоть одну систему, в которой ни разу было не найдено ни одной уязвимости.
Надежность системы характеризуется тем, как быстро реагируют разработчики и исправляют баги.
У меня вообще нет привычки рыться без надобности в системе и высматривать какие-то утилитки — бесполезная трата времени. Для меня ОС — это инструмент, которым я пользуюсь

Вы это сейчас к чему сказали то, а? Ну вот просто вообще не понимаю, при чём тут это.

Я лишь говорю о том, что руби нифига не популярный в качестве никсового языка в отличии от питона, а вы тут мне начинаете рассказывать, как вы ОС пользуетесь)
Я уже сказал, что дело времени…
Питон — 91й год, Руби — 95й. Правда думаете, что дело в этой разнице в 4 года?
Да, очень вероятно. Дело времени и дело привычки. Кто-то в свое время заметил python и понеслось, а Ruby совсем недавно «вынырнул», кстати, благодаря Rails. Язык должен быть замечен, опробован, тогда его начинают использовать.
Мне вот без разницы, какой язык используется чаще в никсах как скриптовый. Сейчас python, потом другой на смену придет… все так изменчиво в этом мире.
Ну возьмем, к примеру, Perl. Ведь сначала подавляющее большинство сайтов писалось именно на нем. И? Появился PHP и очень просто вытеснил Perl с этой ниши.
Я знаю весьма популярный homebrew например…
Про маковый homebrew не слышали?
Я не отрицаю, что приложения на руби есть. Я говорю о том, что Питон в качестве скриптового языка в никсах используется значительно чаще руби. Да щас уже Нод.жс используется, наверное, чаще руби.
Поддерживаю, ни Руби ни Скала не станут языками для разработки скриптов потому как они элементарно стартуют очень медленно. Никому не нужны такие мучения. А с Питоном таких проблем нету. Только нажал Enter, сразу ответ в консоли.
Ээмс. Объясните?

shock@notebook:~$ time python -c "print 123"
123
real    0m0.023s
user    0m0.016s
sys     0m0.004s

shock@notebook:~$ time ruby -e "print 123"
123
real    0m0.025s
user    0m0.020s
sys     0m0.000s

Ну, добавьте пару импортов стандартных гемов и почувствуйте разницу.
Я пробовал Selenium-тесты запускать под руби и под питоном, питон по-любому быстрее стартовал. Я уже не говорю про юнит-тесты для рейлс, без костылей ими пользоваться просто утомительно.
# time ruby -e «print 123»
123
real 0m0.037s
user 0m0.010s
sys 0m0.000s
# time python -c «print 123»
123

real 0m0.016s
user 0m0.000s
sys 0m0.010s
# time perl -e «print 123»
123
real 0m0.003s
user 0m0.000s
sys 0m0.000s

Какую ерунду вы говорите! Руби везде используется как скриптовый язык — и все со стартом там нормально.
везде используется как скриптовый язык

Везде — это где?
Да это индивидуально всё. Пишу веб приложения на rails, скрипты на perl, и делать наоборот нет никакого желания.
Эпическая управлялка portinstall/portupgrade пакетами/портами в FreeBSD написана полностью на руби.
Puppet, Chef тот же уже упоминали. Довольно много утилит, и главное, их очень удобно писать.
Итого насчитали 3 штуки.
А есть примеры демонов? Или того что можно запустить в цикле или а-ля xargs и оно будет работать быстро.
Как на счёт деплоя? Пакет ruby 1.8 не совместим с ruby 1.9 в моём дистре.

Про chef у меня подозрение что это отдельной статьёй идёт — DSL — на ruby любят писать DSL (с поводом и без повода), хотя он и в любом другом языке нормально реализуется.
Bluepill и God — управление демонами. Альтернатива — Monit на Perl.

В деплое — Chef, Puppet, Capistrano, Vlad the Deployer.

Даже для Git — Gitlab, git-commit-notifier, Gitorious.
Ну и касательно DSL, — все-таки на Ruby проще.

Пишут аналоги RSpec, Cucumber и других популярных Ruby DSL и на других языках, но получается многословнее.
> всякие CKEditor
оО
Это же яваскрипт-редактор, как его может быть сложно прикрутить к чему бы то ни было? (Прикручивал CKEditor и TinyMCE к джанге без каких-либо проблем)
Обновляемся до джанго и через месяц понимаем, что у нас теперь 5 критических уязвимостей.
В джанго никогда не было подобных дыр. С другой стороны сравнивать эти фреймворки по мощности я бы остерегся.
Вы представляете, о рельсах тоже так думали. До сего момента.
Да нет, тут место очевидно. В джанго нет такой гибкости, нет такого количества хелперов и такой заботы о времени программиста. В ней просто меньше возможностей получить дыру с одной стороны, и комьюнити больше думает о таких вопросах с другой.

Ну что ж, теперь у нас есть ребята, которые озаботились вопросом поиска дыр в RoR, спасибо.

А главное не теряйте фокус — я джанго не люблю, и не принижаю рельсы на фоне — ну нашли, пофиксили, работаем дальше. На джанго достаточно геморно решаются многие повседневные задачи, и админка ее мусор. И шаблоны. И формы. И ORM.
Это только постфактум стало очевидно. Через много лет.
На время, пока ты и до него не доберешься? %)
Хомяков! Хватит ломать интернет! :)
а чё я то, петька иванов charliesome первый начал. а серега белов ben murphy вообще под все платформы написал
хахах, всплыло это имя+фамилия))
Егор, мы знали, что без тебя это не могло обойтись! Ты большой молодец, что находишь эти дыры и репортишь разработчикам.

Скажи пожалуйста, у тебя только на Rail глаз наметан, или ты еще где-то проблемы ищешь? Интересуют Socket.io, Django и Express.
никаких Socket.io, Django и Express только Rails. Я — патриот
Решето... Комменты в оффициальном блоге доставляют.
я делаю `touch homakov_at_gmail_com_hire_me_plz_i_can_Fix_dat
Скрипткиддис — это мое второе имя
Оставил машину, возвращаешься, а там разбито окно и внутри кирпич с запиской: «homakov_at_gmail_com_hire_me_plz_i_can_Fix_dat».
Толи хулиганство, толи вымогательство.
Не понимал и не понимаю подобные выходки. Если приписываешь себя к экспертам по безопасности, подобное — это низко.

А по природе этого шума — все как обычно, в погоне за упрощением конфигурации в угоду новичкам, включили все ненужное и отключили все нужное. Было бы не так, таких ужасных масшабов у этой уязвимости бы не было. Но тогда быть может и о рельсах никто бы не слышал :)
мсье не распознал шутки? делать мне нехер скрипткидничать
Абсолютная уязвимость. Все версии. Все полномочия. Просто шедевр. Браво!
Не все. В RoR < 2.0 уязвимости нет :)
Простите — 2.3.10 — актуальна?
Я знаю, что в 2.3.10 уязвимость, я говорю, эта версия как фреймворк вообще актуальна сейчас?
Писать на вторых рельсах что-то новое никому не взбредет, разве что поддерживать уже готовый сайт.

Или вы вообще не в курсах?:) 8 января как раз таки 3.2.11 вышла, а четвертые рельсы в активной разработке.
Эм, простите, что возможно ввел вас в заблуждение своим вопросом. Я вкурсе. Я к тому, что половино, того что пишется под рельсы так сказать third-party уже под вторые не работает. Мой гем, которому уже 1 год примерно вообще не писался под вторые рельсы и впринципе там работать не может.
Она имеет место быть на продакшенах)
Мне кажется только ленивый еще не переехал.
Ну причины могут быть разными)) «Работает — не мучай»
Ну, вы знаете, Windows 98, Gentoo, Mac Os IX тоже ведь работают да?
Вы так говорите, будто это что-то плохое ;)
Перфокарты и накопители на магнитных дисках тоже были когда-то удобным изобретением и я с трепетом вспоминаю те дни, но их как-то уже не видно ведь правильно. Это не что-то плохое, просто есть что-то более новое и современное.
Это перечислены операционки из ночных кошмаров.
там что то типа 1.2.1 непомню. Уязвимость появилась 6 лет назад )

Браво? Я теперь отвожу глаза когда люди говорят про rails security. хотя еще пару недель назад я бы начал доказывать что XSS защита, CSRF защита блабла(
Ну и что? Все точно также говорили про самый защищенный форум IPB! А только я там нашел две 0day бреши.
Ошибки есть везде! Надо их только искать и то что в последнее время столько усилий уделяется Rails Security — это очень хорошо! Чем больше уязвимостей найдено, тем вероятнее меньше будет в продакшене.
Где это говорили про защищенность IPB? В каждой версии уязвимости.
Теперь можно делать тоже самое, но с поправкой на версию =)
Тут вспоминается предыдущая статья на эту тему, где было указано как отключить обработку всего кроме www-forms, так что думаю затронет большенство, но не пароноиков =)
А что эпичного в том, что эксплойт доступен 12 часов, если исправление выпущено 48 часов назад?
может в том что не все читают хакер ньюс и даже 50 процентов эппов сейчас не обновились? Я думаю кроме топовых рельс ресурсов никто особо не пошевелился
Не все, конечно. Но есть ведь ещё weblog.rubyonrails.org :)
Ни и плевать на эти 50%. Если в Windows находят что-то типа уязвимости в RPC dcom вам, как админу, не плевать на то, что остальные 90% не ваших пользователей подвержены риску? Мне было бы как-то абсолютно.
Если ты серьезный Developer — ты следишь за новостями. Меня вообще очень сильно поразило то, что для 2й ветки выпустили обновление.
Но, но! Я уже обновил половину своих приложений (самых выставленных в мир)!
Самое обидное — одновременно с такими важными обновлениями выходит обновление какого-нибудь гема (в данном случае whenever 0.8.1), которое ломает что-нибудь до кучи и начинаешь с весельем одно обновлять, другое откатывать, писать в багтрекер третьего :-)
рекомендую фиксировать в таких случаях версию гема через "~> version" пока он не доломан обновлением :)
а любой, самый застарелый сервачок с рельс эппчиком == шел. можно нафигачить кучу лома и продать
Эпично то, что люди узнают об этом на хабре.
Ссори, нет кармы, но, как вы правы!
Ой, ну простите, давайте вообще карму сольем, что бы я вообще никогда никому плюсков не понаставил не дай Бог. Неадекватная у вас реакция, простите!
В твиттере уже как 7-8 дней (в зависимости от пояса) весит.
И все уважающие себя компании давно залатались уже сами без ожидания апдейта рельсов. А потом сделали пул реквест на апдейт рельсов. То, что вы не в состоянии поправить уязвимость в, О Боже, OpenSource проекте совсем не делает вам чести.
Вчера мой хостер прислал письмо про это:
Вы получили это письмо, потому что один или несколько ваших проектов используют Ruby on rails.

В этом популярном фреймворке была найдена уязвимость, которая позволяет выполнить любой код в контексте вашего приложения простым POST-запросом. Например, удалить всю информацию из таблицы базы данных без какой-либо проверки прав доступа. Подробнее об этой уязвимости можно прочитать в статьях на open.net и в блогах metasploit. Уязвимость получила название CVE-2013-0156.

В качестве экстренной меры мы заблокировали отправку POST-запросов с XML-содержимым для всех Rails проектов, размещенных на наших серверах. Однако, такая блокировка не гарантирует безопасность ваших проектов, а лишь блокирует очевидный способ эксплуатации уязвимости.

Разработчики Ruby on rails оперативно выпустили обновление безопасности для всех версий RoR, начиная с 2.3. Вам следует незамедлительно обновить версию фреймворка до 3.2.11, 3.1.10, 3.0.19, 2.3.15 или старших, в зависимости от ветки, которую вы используете.

После обновления вы можете отключить блокировку CVE-2013-0156 на уровне прокси в настройках проекта.

Напоминаем вам, что вы несете персональную ответственность за любые данные, размещенные вами на наших ресурсах, в том числе и за регулярную проверку на уязвимости вашего кода.
Так самое ж интересное, имя хостера: где оно? :)
locum.ru — уже сказал им спасибо в твиттере.
Возможно, что доступно это много дольше уже.
Просто не все специалисты сторонники full disclosure.
Кто-то спокойненько в течение ряда лет сливал базы с разных сайтов.
Теперь дыра закроется.
Как вариант, вполне может быть, что эта дыра была введена в код намеренно :)
Новая теория заговора? :)
Ruby on Rails — фреймворк зла.
Ruby — само зло.
Rubyists — апологеты зла.
37signals — кузница зла!
Я лет 15 назад выкладывал дыры публично — отсылал к Касперскому и производителям. Потом один чел меня от этого отговорил — переубедил в другую политику безопасности. Некоторы зарепорченные мною дыры, в т.ч. у Каспера, до сих пор не пропатчены :) В общем, нечего делать бесплатную работу за тех, кто продает скареваре типа Каспера и других все равно нифига не помогающих пвсевдо-антивирусов. Максимум, если добрая душа, то писать производителю — без публичных эксплоитов.
Rails не зарабатывает на этом ничего…
Ну и бог с ним. Просто знаю примеры реальной жизни. Когда в репозитарий вводились дыры специально для последующих атак.
Блин, это то же самое, что писать:
eval params[:code]
Когда уже разрабы поймут, что писать секьюрно, это значит проверять валидность foreign input.
Без разницы каким способом. Всякие XSS/CSRF и со фильтры помогут в лучшем случае до следущей найденой vulnerability, типа приведенной в статье.
Сам на релсах пишу редко, но используя «чужой» xml в этом случае, либо поотключал бы нафиг все что может загрузить любой не предусмотреный мной класс (тот же yaml если оно не надо), либо использовал бы template для десериалезации (т.е. десериализируем в пустой инстанц класса/интерфейса, все что им не предусмотрено идет лесом или вылетает с исключением).
Простой parse xml делаем только если оно наше, или xml пришел из источника с уровнем доверия > 100500.
Никогда по запарке не оставляли ничего такого в коде?
И когда уже люди поймут, что Open Source он на то и Open Source, что — не нравится — измени. Ты же знаешь как лучше — помоги любимому проекту, не останься в стороне.
К foreign input отношусь всегда оч. серьезно. Думаю поэтому не оставлял (хотя 100% даже бог не даст:).
Насчет помоги, у меня таких проектов тьма, любимый Tcl и co, т. ч. с этим не ко мне.
Но ваш посыл в принципе верный. Еще бы знать, где рыть — а то шерстить несколько десятков тысяч строчек в поисках уязвимостей — то еще удовольствие. Вот тот кто коммитил это, мог бы и подумать насчет уязвимостей. И по запарке — это не оправдание для проъекта с огромной коммюнити и десятками разрабов.
Это к слову сказать не оправдание для комьюнити (меня в частности), а ошибаются все. И не все сразу становятся такими прям опытными программистами. К foreign input вы вероятно начали серьезно относиться с какого-то опеределенного времени. Не реально что бы вы сразу стали учитывать этот фактор в своих программах — на начальных этапах совсем об этом не задумываешься, а так как ошибка весьма и весьма старая, то могу сказать, что Rails тогда не набрала такой критической популярности как сейчас. Оттого и малый интерес со стороны хакеров к ней был.
И еще — если всегда отвлекаться на все сопутствующие вероятностные факторы, то можно улезть в такие дебри, так и не завершив свой проект.
И еще — если всегда отвлекаться на все сопутствующие вероятностные факторы, то можно улезть в такие дебри, так и не завершив свой проект.
Это да, очень знакомо…
/offtop
всегда было интересно, что заставляет людей сокращать слово «очень».
нехватка времени + невозможность интерпретировать это сложившееся сокращение по другому. Много раз замечал за собой и другими так же и произношение его.
Rails 4 при чем? Он то как раз выйдет секьюрным (от этой дыры как минимум).
Уже сейчас многие используют в продакшене 4-е рельсы.
Многие, это кто? Они ж вроде в глубокой бете ещё. Да и гемы не все их поддерживают. Я бы поостерёгся, наверное…
gist.github.com, 37signals новый basecamp на нём вроде пилят тоже. Сейчас поищу тот твит…

Вот: twitter.com/dhh/status/287223713252913152

И там же в комментариях говорят, что gist'ы тоже уже на 4-х рельсах.
Может пора мигрировать на другой Ruby фреймворк?
Самый популярный не обязательно значит самый лучший.
Use sinatra, luke! :) На самом деле, патч выпустили очень быстро, и это радует.
Неужели мир Ruby фреймворков настолько о г р а н и ч е н?
Спасибо, вопрос был риторическим…
А статья сильно отдаёт нафталином … :)
UFO just landed and posted this here
кстати баг [1,nil] я зарепортил и у него очень мало способов применения(только пост) поэтому имхо вообще зря фиксили
У меня есть сайт на rails 2.3.2, я так понимаю, на нем уязвимость отсуствует? (я не программист, поэтому могу не понимать тонкости)
Присутствует. Обновитесь до 2.3.15
echo "ActionController::Base.param_parsers.delete(Mime::XML)" >> RAILS_DIR/config/environment.rb
эм… если это способ решения проблемы — можно это сделаете вы, а я вам, например, какую-нибудь книжку с Озона отправлю?
UFO just landed and posted this here
Действительно. Во многих языка сборка/деплой пакета предполагает выполнение произвольного кода.
Руби ни при чём, но автор аццкая сотона ;)
UFO just landed and posted this here
IMHO автор комментария имел ввиду, что Ruby не есть Rails. Поэтому говорить что Ruby — решето, по крайней мере бред.
хероку уж точно решето. я в них находил CSRF вида aaa.heroku.com?rename=bbb надо было просто заставить владельца аппа посетить и его приложение переименуется
и вот вчера была статья на ХН про баг в востановлении пароля(можно любому юзеру восстановить)
heroku stuff? и даже никакого баунти? а вот деньги нанимать матза у них есть значит

и наконец мой друган и пендосии тоже секурянт по рельсам нашел интересную уязвимсть
titanous.com/posts/vulnerabilities-in-heroku-build-system
UFO just landed and posted this here
Очень интересно, но почему не отдельный пост?
UFO just landed and posted this here
Обновил рельсы, поймал уйму странных багов, в том числе undefined method `to_i`
В итоге замена в Gemfile
gem 'rails', '3.2.11'
на
gem 'rails', :git=>'git://github.com/rails/rails.git', :branch => '3-2-stable'
решила мои проблемы.
Sign up to leave a comment.

Articles