Vigil@nce : Ruby on Rails, injection SQL via limit ou offset
septembre 2008 par Vigil@nce
Un attaquant peut employer les paramètres :limit ou :offset afin
d’injecter une requête SQL via Ruby on Rails.
– Gravité : 2/4
– Conséquences : accès/droits privilégié
– Provenance : client intranet
– Moyen d’attaque : 1 attaque
– Compétence de l’attaquant : technicien (2/4)
– Confiance : confirmé par l’éditeur (5/5)
– Diffusion de la configuration vulnérable : élevée (3/3)
– Date création : 16/09/2008
– Référence : VIGILANCE-VUL-8111
PRODUITS CONCERNÉS
– Unix - plateforme
DESCRIPTION
Le framework Ruby on Rails peut employer une base de données
MySQL, PostgreSQL ou SQLite.
La méthode User.find() obtient la liste des utilisateurs, en
commençant à un offset et en limitant le nombre d’entrées. Par
exemple :
User.find(:all, :limit => 10, :offset => 5)
Cette fonction effectue une requête SQL de la forme :
select * from user LIMIT 10 OFFSET 5 ;
Dans un contexte web, les paramètres :limit et :offset proviennent
généralement de l’url.
Cependant, les valeurs :limit et :offset ne sont pas vérifiées. Un
attaquant peut par exemple employer :
User.find(:all, :limit => "10 ; requête_SQL ;", :offset => 5)
pour exécuter :
select * from user LIMIT 10 ; requête_SQL ; OFFSET 5
On peut noter que ce type d’injection ne fonctionne pas avec MySQL.
Un attaquant peut donc employer les paramètres limit ou offset
afin d’injecter une requête SQL via Ruby on Rails.
CARACTÉRISTIQUES
– Références : BID-31176, CVE-2008-4094, VIGILANCE-VUL-8111
– Url : https://vigilance.aql.fr/arbre/1/8111