
Demonstração educacional de injeção SQL CVE-2017-17917 no Rails, com replicação passo a passo e mitigação de codificação segura usando consultas parametrizadas.
O projeto demonstra a replicação de uma vulnerabilidade de injeção de SQL no parâmetro id e, em seguida, fornece insights sobre como mitigar e resolver esse problema de segurança. 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

Selecionamos este CVE para destacar a ocorrência persistente desse problema nas versões mais recentes do Rails, reafirmando sua relevância para as boas práticas de desenvolvimento.

Requisitos:
docker
docker-compose
Passos para construir um projeto:
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

Acesse http://localhost:3000/


Parâmetro de injeção de SQL 1 OR id > 1

Com essa injeção de SQL, um atacante pode recuperar dados de usuários aos quais normalmente não teria acesso para visualizar.
grau de dificuldade de execução: fácil
O problema está no método do controller, especificamente ao invocar uma cláusula where da seguinte forma:
@clients = Client.where("id = #{params[:id_search]}")
Link para o código
O problema é resolvido usando a seguinte abordagem:
@clients = Client.where(id: "#{params[:id_search]}")
Link para o código
sudo docker-compose run web rspec
