В последние несколько дней во фреймворке Ruby on Rails («Руби на рельсах») обнаружены и закрыты критические уязвимости с обработкой параметров XML, которые позволяют злоумышленнику осуществить удалённое исполнение кода в любом приложении Ruby on Rails, без аутентификации.
Учитывая опасность последних уязвимостей, всем веб-мастерам рекомендуется срочно сделать апгрейд на последние версии 3.2.11, 3.1.10, 3.0.19 и 2.3.15.
По приблизительным оценкам, в интернете работает около 240 тыс. сайтов на Ruby on Rails.
Наиболее популярные тематические категории — интернет-магазины, бизнес, технологии. Очевидно, что за пару дней далеко не все успеют сделать апгрейд на новую версию Ruby on Rails, а появление действующего эксплойта очень вероятно.
Независимый специалист по безопасности Бен Мёрфи сказал, что уже написал PoC-эксплойт для версий Rails 3.x и Rails 2.x на Ruby 1.9.3, Ruby 1.9.2 и Ruby 1.8.7 и «нет причин полагать, что он не будет работать на других комбинациях Ruby/Rails, поскольку баг присутствует во всех из них.
Технический анализ уязвимости Ruby/Rails см. в статье Феликса Вильхельма, а также у HD Moore. Суть уязвимости в том, что XML-парсер можно обмануть, подсунув потенциально вредоносный объект под видом YAML или Ruby Symbol. В обоих случаях возможна SQL-инъекция или удалённое исполнение кода.
Вот пример, который наглядно демонстрирует уязвимость. Отправим серверу RoR следующий POST-запрос, указав заголовок Content-Type как "text/xml":
<?xml version="1.0" encoding="UTF-8"?>
<bang type="yaml">--- !ruby/object:Time {}
</bang>
На серверной стороне этот запрос декодируется как реальный объект Time:
Parameters: {"bang"=>1969-12-31 18:00:00 -0600}
HD Moore уже близок к написанию эксплойта и может выложить его в открытый доступ. В этом случае кто угодно сможет стянуть базы данных с одного из сотен тысяч сайтов на Ruby on Rails, поставить там бэкдор или осуществить иные модификации внутренней инфраструктуры компании.
Среди известных сайтов, которые работают на Ruby on Rails — Github, Yammer, Scribd, Groupon, Shopify и Basecamp. На Ruby написан известный фреймворк для пентестинга Metasplot, а на «рельсах» работают интерфейсы Metasploit Pro, Express и Community.