W Django 3.2 przed wersją 3.2.14 oraz 4.0 przed wersją 4.0.6 funkcje bazodanowe Trunc() i Extract() są podatne na SQL injection, jeśli do parametrów kind/lookup_name trafiają niezaufane dane. Podatność otrzymała ocenę CVSS 9.8 (CRITICAL), co odzwierciedla możliwość jej zdalnego wykorzystania bez uwierzytelnienia.
▸ Pokaż oryginał (EN)
An issue was discovered in Django 3.2 before 3.2.14 and 4.0 before 4.0.6. The Trunc() and Extract() database functions are subject to SQL injection if untrusted data is used as a kind/lookup_name value. Applications that constrain the lookup name and kind choice to a known safe list are unaffected.
Funkcje Trunc() i Extract() w warstwie ORM Django nie sanityzują odpowiednio wartości przekazywanych jako parametry kind oraz lookup_name. Jeśli aplikacja pozwala na przekazanie tych wartości bezpośrednio od użytkownika bez weryfikacji względem dozwolonej listy, atakujący może wstrzyknąć złośliwy kod SQL, który zostanie wykonany przez silnik bazodanowy. Aplikacje, które samodzielnie ograniczają dopuszczalne wartości kind/lookup_name do z góry zdefiniowanej, bezpiecznej listy, nie są podatne.
Atakujący może odczytać, zmodyfikować lub usunąć dane w bazie danych, a w zależności od konfiguracji serwera bazodanowego — potencjalnie uzyskać pełną kontrolę nad systemem (naruszenie poufności, integralności i dostępności).
Należy zaktualizować Django do wersji 3.2.14 lub nowszej (dla gałęzi 3.2) albo do wersji 4.0.6 lub nowszej (dla gałęzi 4.0). Jako środek zaradczy w kodzie aplikacji należy ograniczyć wartości przekazywane do parametrów kind i lookup_name funkcji Trunc() i Extract() wyłącznie do z góry zdefiniowanej, bezpiecznej listy dopuszczalnych wartości.
Django w wersjach 3.2.x przed 3.2.14 oraz 4.0.x przed 4.0.6
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HDjangoproject Django
APPDjangoproject3.2 – 3.2.14 (bez)4.0 – 4.0.6 (bez)
Powiązane podatności
Django: brak walidacji uprawnień dodawania w GenericInlineModelAdmin
SQL injection w Django via argument _connector w QuerySet i Q()
SQL Injection w Django przez HasKey lookup na bazie Oracle
Pominięcie walidacji przy wielokrotnym przesyłaniu plików w Django
SQL injection w metodach QuerySet Django przez aliasy kolumn