Krytyczna podatność SQL injection (CWE-89) w frameworku Django pozwala nieuwierzytelnionemu atakującemu na manipulację zapytaniami SQL poprzez spreparowany słownik z rozwinięciem i argumentem _connector. Umożliwia to nieautoryzowany odczyt oraz modyfikację danych w bazie danych aplikacji.
▸ Pokaż oryginał (EN)
An issue was discovered in 5.1 before 5.1.14, 4.2 before 4.2.26, and 5.2 before 5.2.8. The methods `QuerySet.filter()`, `QuerySet.exclude()`, and `QuerySet.get()`, and the class `Q()`, are subject to SQL injection when using a suitably crafted dictionary, with dictionary expansion, as the `_connector` argument. Earlier, unsupported Django series (such as 5.0.x, 4.1.x, and 3.2.x) were not evaluated and may also be affected. Django would like to thank cyberstan for reporting this issue.
Podatność dotyczy metod QuerySet.filter(), QuerySet.exclude() oraz QuerySet.get(), a także klasy Q(). Atakujący może przekazać specjalnie spreparowany słownik z rozwinięciem (dictionary expansion) jako argument _connector do jednej z wymienionych metod. Django nie waliduje prawidłowo tej wartości, co pozwala na wstrzyknięcie arbitralnego kodu SQL do generowanego zapytania. Atak nie wymaga uwierzytelnienia ani interakcji użytkownika, a wektor jest sieciowy.
Atakujący może uzyskać nieautoryzowany dostęp do poufnych danych przechowywanych w bazie danych (wysoki wpływ na poufność) oraz modyfikować lub usuwać dane (wysoki wpływ na integralność). Podatność nie wpływa bezpośrednio na dostępność systemu.
Należy niezwłocznie zaktualizować Django do wersji 5.1.14, 4.2.26 lub 5.2.8 (odpowiednio do używanej gałęzi). Szczegóły dostępne w oficjalnym wpisie bezpieczeństwa: https://www.djangoproject.com/weblog/2025/nov/05/security-releases/. Użytkownicy niewspieranych gałęzi (np. 3.2.x, 4.1.x, 5.0.x) powinni pilnie przeprowadzić migrację do wspieranej wersji.
Django w wersjach: 5.1 przed 5.1.14, 4.2 przed 4.2.26 oraz 5.2 przed 5.2.8. Starsze, niewspierane gałęzie (5.0.x, 4.1.x, 3.2.x) nie były analizowane i mogą być również podatne.
Podatność odkryta i zgłoszona przez badacza o pseudonimie 'cyberstan' — informacja pochodzi z oryginalnego opisu CVE. Dostępna jest publiczna analiza technyczna podatności pod adresem https://shivasurya.me/security/django/2025/11/07/django-sql-injection-CVE-2025-64459.html.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NDjangoproject Django
APPDjangoproject4.2 – 4.2.26 (bez)5.1 – 5.1.14 (bez)5.2 – 5.2.8 (bez)
Powiązane podatności
Django: brak walidacji uprawnień dodawania w GenericInlineModelAdmin
SQL Injection w Django przez HasKey lookup na bazie Oracle
In Django 3.2 before 3.2.19, 4.x before 4.1.9, and 4.2 before 4.2.1, it was possible to bypass validation when...
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. The Trunc() and Extract() database f...
An issue was discovered in Django 2.2 before 2.2.28, 3.2 before 3.2.13, and 4.0 before 4.0.4. QuerySet.annotat...