
Démonstration pédagogique de l'injection SQL CVE-2017-17917 dans Rails, avec réplication étape par étape et atténuation par codage sécurisé à l'aide de requêtes paramétrées.
Ce projet démontre la réplication d'une vulnérabilité d'injection SQL dans le paramètre id, puis fournit des informations sur l'atténuation et la résolution de ce problème de sécurité. https://www.cvedetails.com/cve/CVE-2017-17917/?q=CVE-2017-17917
Stack:
Ruby: 3.2.2
Rails: 7.0.8
Docker 24.0.5
Docker-Compose 1.29.2
PostgreSQL

Nous avons sélectionné cette CVE pour souligner l'occurrence persistante de ce problème dans les dernières versions de Rails, réaffirmant sa pertinence pour les bonnes pratiques de développement.

Prérequis :
docker
docker-compose
Étapes pour créer le projet :
sudo docker-compose build

sudo docker-compose run web bundle install

sudo docker-compose run web rails db:create db:migrate db:seed

sudo docker-compose up

Rendez-vous sur http://localhost:3000/


Paramètre d'injection SQL 1 OR id > 1

Avec cette injection SQL, un attaquant peut récupérer des données utilisateur auxquelles il n'aurait normalement pas accès.
degré de difficulté d'exécution : facile
Le problème se situe dans la méthode du contrôleur, précisément lors de l'appel d'une clause where comme suit :
@clients = Client.where("id = #{params[:id_search]}")
Lien vers le code
Le problème est résolu en utilisant l'approche suivante :
@clients = Client.where(id: "#{params[:id_search]}")
Lien vers le code
sudo docker-compose run web rspec
