Skip to content
KitploitKITPLOIT
FerramentasBlog
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
Django-faille-CVE-2025-57833_test — # Prova de conceito educacional demonstrando injeção de SQL por meio de aliases dinâmicos nos métodos annotate() e alias() do Django (CVE-2025-57833). Inclui código vulnerável, exemplo de exploração e análise da correção. | Kitploit
Ferramentas/GitHubGitHub/loic-houchi/django-faille-cve-2025-57833_test
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoExploração de Aplicações WebAprendizado e EducaçãoSegurança de Banco de Dados
GitHubloic-houchi/django-faille-cve-2025-57833_test

Django-faille-CVE-2025-57833_test

# Prova de conceito educacional demonstrando injeção de SQL por meio de aliases dinâmicos nos métodos annotate() e alias() do Django (CVE-2025-57833). Inclui código vulnerável, exemplo de exploração e análise da correção.

Ver Repositório
23há 1 anoAinda 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

Teste da vulnerabilidade de injeção de SQL via alias no Django

Definição: O que é um alias?

Um alias é um nome dado a uma coluna ou a um resultado de agregação em uma consulta SQL.
No Django, os aliases são usados com os métodos annotate() ou alias() para nomear campos calculados.

Exemplo:

root@kitploit:~
from django.db.models import Count
books = Book.objects.annotate(book_count=Count('id'))

Aqui, book_count é um alias para o resultado de Count('id').
Isso permite obter um nome legível para uma coluna calculada.


Inserção de dados via shell

Para ir rápido, podemos inserir os dados via shell:

root@kitploit:~
python manage.py shell

Comandos a executar:

root@kitploit:~
from myapp.models import Author, Book

a = Author.objects.create(name=" houchi pierre")
Book.objects.create(title="Les belles filles", author=a)
Book.objects.create(title="Les baux arcons", author=a)

exit()

Contexto da vulnerabilidade

Antes do Django 4.2.23, era possível injetar SQL via aliases dinâmicos fornecidos pelo usuário.
Essa vulnerabilidade é conhecida como CVE-2025-57833.

Ela afetava as funções annotate() e alias() quando um dicionário com expansão (**kwargs) era usado com chaves não filtradas provenientes do usuário.


Exemplo de código vulnerável (myapp/views.py)

root@kitploit:~
import json
from django.db.models import Count
from django.http import JsonResponse
from .models import Author

def vulnerable_view(request):
    # Recupera o alias da URL
    alias_param = request.GET.get("alias", "{}")
    try:
        # ⚠️ Vulnerável: avaliação direta dos dados do usuário
        alias_dict = json.loads(alias_param)
        for key, value in alias_dict.items():
            alias_dict[key] = eval(value)  # perigoso! permite a execução de código arbitrário

        # Criação da queryset com anotação dinâmica
        qs = Author.objects.annotate(**alias_dict).values("name", *alias_dict.keys())

        # Retorno dos resultados
        return JsonResponse(list(qs), safe=False)

    except Exception as e:
        return JsonResponse({"error": str(e)})

Explicações:

  1. alias_param = request.GET.get("alias", "{}")
    Recupera o valor do parâmetro alias passado pelo usuário.

  2. alias_dict = json.loads(alias_param)
    Transforma a string JSON em um dicionário Python.

  3. alias_dict[key] = eval(value)
    ⚠️ Muito perigoso: eval() executa a string como código Python.
    O usuário poderia injetar SQL destrutivo.

  4. Author.objects.annotate(**alias_dict)
    Aplica dinamicamente as anotações com os aliases fornecidos.


Modelos (myapp/models.py)

root@kitploit:~
from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    def __str__(self):
        return self.title

Explicação:

  • Author e Book estão relacionados por uma relação ForeignKey.
  • As anotações dinâmicas são usadas em Author para calcular informações sobre seus livros.

Exemplo de exploração antes da correção

  • URL maliciosa:
root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"evil); DROP TABLE myapp_book;--":"Count('id')"}
  • Risco:
    • Execução de qualquer comando SQL, exclusão de tabelas ou modificação de dados.
    • Isso explora diretamente a vulnerabilidade por meio do alias injetado.

Correção no Django 4.2.23

  • O Django agora proíbe certos caracteres nos aliases:

    • Espaços
    • Aspas
    • Ponto e vírgula
    • Comentários SQL (--)
  • Se a URL contiver esses caracteres, o Django levanta um erro:

root@kitploit:~
Column aliases cannot contain whitespace characters, quotation marks, semicolons, or SQL comments.
  • Consequência: nenhuma injeção SQL destrutiva é possível.

Exemplo seguro

root@kitploit:~
http://127.0.0.1:8000/vuln/?alias={"books_count":"Count('book')"}
  • Isso não constitui uma falha.
  • A falha nas versões vulneráveis (CVE-2025-57833) só aparece se um usuário mal-intencionado puder injetar SQL via:
    • caracteres proibidos no alias (espaço, ponto e vírgula, aspas, comentários SQL)
    • ou eval() em valores provenientes do usuário.

Boas práticas para evitar essa falha

  1. Nunca usar eval() em dados de usuários.
  2. Validar os nomes de alias para aceitar apenas caracteres seguros.
  3. Limitar os valores de anotação às funções ou expressões permitidas.
  4. Manter o Django atualizado para usufruir das correções.

Conclusão

  • A vulnerabilidade CVE-2025-57833 permitia injetar SQL via aliases dinâmicos.
  • O Django 4.2.23 e superiores corrige essa falha.
  • A validação rigorosa dos dados do usuário continua sendo indispensável.

Autor: Loïc
Data: 06/09/2025

Baixar ferramenta