LINUX.ORG.RU

Обнаружена критическая уязвимость в Ruby on Rails

 , ,


0

2

В популярном фреймворке для создания веб-приложений Ruby on Rails обнаружена критическая уязвимость. Проблема выявлена в коде, обрабатывающем параметры HTTP-запроса. Из-за непродуманного автоматического приведения типов в обработчике формата XML у злоумышленника есть возможность обойти систему авторизации, выполнить внедрение SQL-кода, выполнить произвольный код и совершить DoS-атаку приложения.

Уязвимость устранена в следующих версиях: 3.2.11, 3.1.10, 3.0.19, 2.3.15. Во всех остальных версиях уязвимость присутствует, и всем пользователям рекомендовано обновиться. Также в сообщении об уязвимости указано несколько способов отключить проблемный обработчик.

Напоминаем, что совсем недавно (3-го января) в RoR была обнаружена другая критическая уязвимость, позволяющая выполнить внедрение SQL-кода.

Подробный анализ уязвимости

>>> Сообщение об обнаружении уязвимости (CVE-2013-0156)

★★★★★

Проверено: maxcom ()
Последнее исправление: tazhate (всего исправлений: 5)

Ответ на: комментарий от anonymous

а для руби/рельс надо покупать кластеры, чтобы обеспечить хоть какую-то производительность

Ну и остаётся PHP который может работать даже на shared hosting. То что PHP является самым распространённым языком для веба - это не потому что все заказчики глупее лоровских теоретиков а по той простой причине что адекватной альтернативы охватывающей данную область не существует.

tyler19
()
Ответ на: комментарий от special-k

а ведь он прав

Да нет, серьезно. Руби гораздо лучше позволяет создавать программные интерфейсы,

ты sqlalchemy в глаза видел?

И ничего этого в питоне нет))

полнейшее 4.2

pawnhearts ★★★★★
()
Ответ на: комментарий от special-k

Но учитывая, что на руби я могу легко сделать целый механизм расширения класса

в питоне есть метаклассы для этого

DataMapper

датамаппер есть на питоне и называется он sqlalchemy и вся эта хрень там есть

pawnhearts ★★★★★
()
Ответ на: комментарий от Binary

для алхимии есть elixir, чтобы описывать модель примерно как в django ещё она может сама генерировать классы на основе структуры бд

pawnhearts ★★★★★
()
Ответ на: комментарий от anonymous

Не подскажите как корректно обновить рельсы ?

можешь сделать как-то так

echo «ActionController::Base.param_parsers.delete(Mime::XML)» >> RAILS_DIR/config/environment.rb

pawnhearts ★★★★★
()
Ответ на: комментарий от special-k

Ахах, а это?)

слушай всё это элементрано делается на django. если ты не знаешь питон и django вообще, это не значит что там такого нельзя сделать.

pawnhearts ★★★★★
()
Ответ на: комментарий от Anatolik

Например, вот здесь tailgunner пытался разъяснить мне некоторые вещи, но я таки мало что понял.

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

с валидаторами в django - я дал ссылку на конкретную страницу документации, думаю там всё очевидно.

Что мне интересно до сих пор — где в Python находятся глобальные функции? Часто ли вы их используете?

в текущем модуле. более глобальных функций нет. вот, например, system функция в модуле os т.е. в файле os.py в другом модуле мы можем написать

from os import system

system('echo foo')

pawnhearts ★★★★★
()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

с валидаторами в django - я дал ссылку на конкретную страницу документации, думаю там всё очевидно.

Мне было бы проще, если бы там были аналоги коду из этого сообщения.

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

Спасибо. Например, какой модуль будет текущим при запуске REPL? Где можно кратко почитать о том, из чего состоит этот модуль?

Anatolik ★★
()
Ответ на: комментарий от Anatolik

Например, какой модуль будет текущим при запуске REPL?

имя текущего модуля лежит в переменной __name__, для repl(или если мы запускаем файл как скрипт т.е. python script.py) это будет '__main__'

Где можно кратко почитать о том, из чего состоит этот модуль?

встроенная функция globals() выдаст глобальный контекст текущего модуля в виде словаря. полный список встроенных функций можно посмотреть так dir(__builtin__)

pawnhearts ★★★★★
()
Ответ на: комментарий от Anatolik
ну, например

from django.core.exceptions import ValidationError
from django.db import models

def validate_words(min_words, max_words):
  def validate(value):
    words = value.split()
    if len(words) < min_words: raise ValidationError('must be at least %d words' % (min_words,))
    elif len(words) > max_words: raise ValidationError('must be at most %d words' % (max_words,))

class Essay(models.Model):
  content = models.TextField(validators=[validate_words(300,400),])


pawnhearts ★★★★★
()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

Прохладная история! Автор крут.

Однако это тоже оффтопик, я полагаю. Ведь автор рассказывает о совсем другой уязвимости. И не совсем ясно, при чем там Ruby. Дело ведь в админских косяках:

Скрипт было легко прочитать перебором названий директорий (были права -x на директорию с исходниками).
Сборка slug проводилась не в контейнере, а открыто на одной из мастер-ноде
Anatolik ★★
()
Ответ на: комментарий от Anatolik

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

pawnhearts ★★★★★
()

Что вы все верещите господа нытики..

Я вру о питоне.. но что-то никто и строчки кода не привел в опровержение, только эти ваши отсылки к доке: не надо залезать по пояс в болото, чтобы понять, что ты в болоте!

pawnhearts

в питоне есть метаклассы для этого

Это вот это-то http://habrahabr.ru/post/65625/

Слушайте, я не знаю как вам показать на сколько все это уродливо. Я не знаю как вам объяснить, что одна удачная парадигма лучше чем 100500 конструкций. Мне искренне жаль, что вы этого не понимаете, точно так же как жаль пхпшников, но что с вас возьмешь..

pawnhearts

Пример из джанго очень уродлив - в духе js. На руби я никогда не буду создавать метод висячий неизвестно где (я и на js не буду). Снова отчетливо видна отстойность (давайте уже называть вещи своими именами) синтаксиса питона.

Метаклассы напомнили мне паразитное наследование из js. Ваш питон такой же бедный как js, только в js существует 100500 способов инциализации объектов, в питоне один и мне он не понравился. js гибок, а питон топорен. Питонщикам я рекомендую переходить не на руби, а на js.

Рубисты пытались по-разному объяснить набигающим питонщикам на сколько отстоен их ЯП. Чтобы реализовать валидацию в джанго надо, либо наследовать поле (спасибо!), либо _явно_ создавая объект поля пропихнуть массив валидаторов в параметры (еще раз спасибо!) - и это нормально? - это красиво?! Хватит уже так безмерно тупить - это уродливо! Это никуда не годится! Питон ужасен! Инфраструктура ужасна, инструментов разработки меньше, инструменты разработки хуже. В руби так же можно запилить конфигурацию валидации через наследование класса поля, только почему так никто не делает? - наверно потому что не дураки (в отличии от питонщиков).

пс касаемо джанго, еще, на мой взгляд, плохо, что валидатор это метод, а не объект. Но вас это конечно не спасет.

ппс еще можно поиграть в игру: «на руби можно все то же, что и на питоне, только лучше». Можете спрашивать как сделать то или это (в плане конструкций).

special-k ★★★
()
Последнее исправление: special-k (всего исправлений: 2)
Ответ на: комментарий от special-k

Питонщикам я рекомендую переходить не на руби, а на js

под coffee пойдет на ура, я думаю.

special-k ★★★
()
Ответ на: комментарий от special-k

А ты всё крякаешь...

А зачем вообще куда-то переходить? Можно мы останемся с питоном, потому как умеем его готовить? Или ты ещё порассказываешь, как же мы страдаем, не разбираясь, по сути, вообще ни в чём?

Binary ★★★★★
()
Ответ на: комментарий от special-k

ты открыл мне глаза, с сегодняшнего дня начинаю изучать ruby манкипатчинг, изменение поведения встроенных типов - мне казалось что это плохо, но сейчас я понял какие огромные возможности это открывает спасибо тебе

pawnhearts ★★★★★
()
Ответ на: комментарий от Binary

вообще в django многое через жопу делается. делать свои field`ы например, особенно сложные всякие-то ещё удовольствие

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Везде много делается через жопу, просто надо понимать, что джанго не панацея и везде её не тянуть.

Binary ★★★★★
()
Ответ на: комментарий от Binary

да это понятно, просто если уж её используешь то от такой фигни никуда не деться(а ведь формы уже один раз переписывали нафиг-newforms). иначе получится что ты одновременно и их используешь и какие-нить wtforms

pawnhearts ★★★★★
()
Ответ на: комментарий от special-k

Слушайте, я не знаю как вам показать на сколько все это уродливо.

Никакие «уродливо» не скажут ничего и никому о качестве семантик и прагматик, что руби что пайтона. Неумение выразить свое собственное знание с помощью формальной терминологии, простым человеческим текстом означает отсутствие этого знания. Не врите окружающим и прежде всего себе.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.