NIS2 & DORA in force. EU AI Act next — book a demo

Testy penetracyjne Django: ORM injection, bezpieczeństwo admina i Python dla enterprise

Django to najbardziej dojrzały framework Pythona (od 2005), szeroko używany do portali rządowych, CMS-ów uczelni i enterprise systemów rezerwacji. Najnowsze podatności obejmują CVE-2024-45230 (strip_tags DoS), CVE-2024-39614 (denylist bypass), CVE-2023-43665 (truncatechars_html DoS). Matproof Sentinel wykonuje ukierunkowane pentesty Django z raportami gotowymi do audytu od 149 EUR.

Rozpocznij darmowy skan
MW
Written by Malte Wagenbach
Founder of Matproof Security. Specialized in AI-driven penetration testing and EU compliance (DORA, NIS2, ISO 27001, SOC 2).
Last reviewed: May 17, 2026

Dlaczego Django wymaga specjalistycznej wiedzy pentestowej

Django to najbardziej dojrzały framework Pythona, szczególnie używany w: portalach rządowych, CMS-ach uczelni, systemach enterprise ze złożonymi backendami. Jego dojrzałość to zaleta (bezpieczeństwo domyślnie, type-safe ORM), ale wielkość frameworka wprowadza specyficzne powierzchnie ataku: ekspozycja Django Admin to wektor ataku #1 (enumeracja użytkowników, brute-force), wyciek SECRET_KEY przez DEBUG=True powoduje fałszowanie sesji, ORM dopuszcza raw queries z konkatenacją umożliwiające SQL injection, a template tags mogą umożliwiać SSTI w określonych wzorcach. Dla organizacji z Django (rząd, uczelnie, enterprise) udokumentowany pentest Django jest niezbędny dla zgodności GDPR art. 32.

  • CVE-2024-45230 (Django < 4.2.16/5.0.9): DoS przez filtr template strip_tags na dużym wejściu, wykorzystywalny w każdym templacie z {{ user_input|striptags }}.
  • CVE-2024-39614 (Django < 4.2.14/5.0.7): denylist bypass w filtrze safestring, umożliwia XSS w templatach używających safestring dla zawartości, która powinna być escapowana.
  • CVE-2023-43665 (Django < 4.2.6): DoS przez filtr template truncatechars_html, wykorzystywalny w templatach truncających HTML dostarczany przez użytkownika.
  • Enumeracja Django Admin: /admin/login/ umożliwia enumerację użytkowników przez timing-side-channel, brute-force bez domyślnego rate limitingu.
  • Wyciek SECRET_KEY: DEBUG=True w produkcji eksponuje SECRET_KEY na stronach błędów, wyciek umożliwia fałszowanie cookie sesji, fałszowanie URL podpisanych.
  • Django Templates SSTI: custom template tags z eval() lub exec() na wejściu użytkownika, custom safestring z obejściem auto-escape.
  • Dla aplikacji objętych GDPR, NIS2 lub DORA pentest Django jest wymaganym dowodem zgodności.

Co konkretnie testujemy w aplikacji Django

  • Detekcja CVE: Django < 4.2.16/5.0.9 (CVE-2024-45230), < 4.2.14/5.0.7 (CVE-2024-39614), < 4.2.6 (CVE-2023-43665).
  • Django Admin: enumeracja użytkowników przez timing, ochrona przed brute-force (django-axes lub równoważny), wymuszanie 2FA, whitelista IP.
  • Ekspozycja SECRET_KEY: detekcja DEBUG=True w produkcji (antywzorzec), SECRET_KEY w plaintexcie w commitowanym settings.py.
  • ORM injection: zapytania raw() z konkatenacją stringów, extra() z select, RawSQL, obiekty Q z SQL injection.
  • Template SSTI: custom template tags z eval/exec, obejście safestring auto-escape, filtr |safe stosowany do wejścia użytkownika.
  • Django REST Framework (DRF): permissions per ViewSet, pola serializera, które nie powinny być eksponowane, DRF Browsable API eksponowane w produkcji.
  • Uwierzytelnianie: django.contrib.auth ze słabym password hasherem (legacy PBKDF2 z niską liczbą iteracji), bezpieczny session_engine (DB vs cache vs signed cookie).
  • CSRF: nadużycie csrf_exempt, token CSRF w API JSON bez walidacji nagłówka Origin.
  • File upload: walidacja typu MIME po stronie serwera (nigdy nie ufaj klientowi), path traversal w upload_to, wykonanie pliku Pythona w MEDIA_ROOT.
  • Composition Analysis: requirements.txt i Pipfile.lock pod kątem CVE w Django i zależnościach (psycopg, Pillow, requests itd.).

Sample finding

Critical

Django DEBUG=True w produkcji, czyli wyciek SECRET_KEY przez stronę błędu 500

Aplikacja Django ma DEBUG=True w produkcji (wykryte przez wizytę nieistniejącego URL jak /thispagedoesnotexist123). Strona Django 500 z DEBUG=True eksponuje: (1) kompletne settings w tym SECRET_KEY, konfigurację DATABASE z plaintextowymi poświadczeniami, EMAIL_HOST_PASSWORD; (2) stack trace ze ścieżkami plików wewnętrznych; (3) środowisko Pythona; (4) zmienne lokalne każdej ramki stosu w tym wszystkie dane żądania. SECRET_KEY jest szczególnie krytyczny: umożliwia fałszowanie cookie sesji, podpisanych URL (reset hasła, potwierdzenie email), tokena CSRF. Test umożliwił: fałszowanie cookie sesji dla dowolnego użytkownika, generowanie URL resetu hasła dla dowolnego emaila, odczyt wszystkich konfiguracji.

Fix: Działanie natychmiastowe (priorytet 1): ustaw DEBUG=False w produkcji i przebuduj kontenery. Poprawna konfiguracja w settings.py:\n\nDEBUG = os.environ.get('DJANGO_DEBUG', 'False').lower() == 'true'\nALLOWED_HOSTS = ['matproof.com', 'www.matproof.com']\n\nDziałania uzupełniające: natychmiastowa rotacja SECRET_KEY (wymuszone ponowne zalogowanie wszystkich użytkowników, unieważnienie wszystkich linków resetu hasła); rotacja DATABASE_PASSWORD, EMAIL_HOST_PASSWORD; konfiguracja zgłaszania błędów przez Sentry/Rollbar do obsługi 500 bez eksponowania detali; audyt logów dostępu dla wszystkich wejść na nieistniejące URL z ostatnich 90 dni.

Reference: CWE-489 Active Debug Code · CWE-200 Information Exposure · OWASP A05:2021 Security Misconfiguration · Django Security Documentation

Porównanie opcji pentestu Django

Free scanMatproof SentinelTraditional consultancy
Automated scan engine✓ (3-min preview)✓ Full scan✗ Manual only
OWASP Top 10 coveragePartial✓ Complete✓ Complete
Proof-of-exploit evidence✓ Per finding✓ Per finding
Regulatory mapping (DORA/NIS2/ISO 27001)✓ Automated✓ Manual
Audit-ready PDF report✓ Instant✓ 2–4 weeks delivery
Continuous / recurring scans✓ Per deploy✗ Annual engagement
Time to first result~3 min~30 min full scan2–4 weeks
Price€0From €149€8,000–€25,000
Source code review (SAST)✓ On Growth plan✓ Scoped engagement
API testing (REST/GraphQL)✓ Automated✓ Manual

Pakiety pentestów Django

Single Run
€149 one-time
  • 1 full pentest scan
  • AI-prioritized findings with CVSS 3.1
  • Proof-of-exploit per finding
  • Audit-ready PDF report
  • Regulatory mapping (DORA, NIS2, ISO 27001)
Buy single run
Recommended
Starter
€299 / month
  • Unlimited scans (up to 3 domains)
  • Continuous monitoring
  • CI/CD integration (GitHub, GitLab)
  • All regulatory mappings
  • Priority support
Start Starter
Growth
€799 / month
  • Unlimited scans + domains
  • Authenticated / White-Box testing
  • API & cloud infrastructure tests
  • Dedicated security account manager
  • 24h SLA response time
Contact for Growth

Najczęściej zadawane pytania o pentest Django

Jak testujecie Django Admin konkretnie?

Django Admin to cel ataku #1 dla aplikacji Django. Testujemy: enumerację użytkowników przez timing side-channel, ochronę przed brute-force (django-axes / django-ratelimit), wymuszanie 2FA, whitelistę IP na /admin/, audit log dostępu admin, CSRF na akcjach admina.

Czy testujecie też Django REST Framework / Django Ninja / Django Async?

Tak. DRF ma specyficzny audyt permissions, throttle_classes, walidację pól serializera. Django Ninja (w stylu FastAPI) dzieli ryzyka z FastAPI. Django Async views wymagają specyficznych testów race conditions.

Jak obsługujecie Django z celery / Redis background tasks?

Taski Celery z wejściem użytkownika mogą tworzyć code injection. Testujemy: pickle serialization (antywzorzec, umożliwia RCE), task chain ze stanem współdzielonym, ekspozycję Redis (Redis bez AUTH, eksponowany port).

Czy testujecie integracje rządowych aplikacji Django?

Tak. Przepływy SSO mają specyficzne wymagania walidacji (podpis SAML, whitelista URL AssertionConsumerService). Testujemy te przepływy pod kątem błędnej konfiguracji, która mogłaby umożliwić przejęcie konta.

Jak długo trwa kompletny pentest Django?

60-90 minut dla typowej aplikacji Django. Dla złożonych aplikacji multi-tenant: 2-3 godziny.

Czy raport jest akceptowany dla audytów GDPR?

Tak. Jednoznaczne mapowanie do GDPR art. 32 i krajowych przepisów o ochronie danych. Dla aplikacji z wrażliwymi danymi raport wykazuje regularne testowanie ochrony i śledzenie remediation.

Related

Go deeper — related blog articles

Zabezpiecz swoją aplikację Django już teraz

Pierwszy skan w 3 minuty, kompletny pentest Django w 60-90 minut. Raport gotowy do audytu GDPR / DORA od 149 EUR.

Rozpocznij darmowy skan