Penetratietest Django: ORM Injection, Admin Beveiliging en Python Enterprise Security
Django is het meest volwassen Python framework (2005+), in Nederland veel gebruikt voor: overheidsportalen (DigiD integraties), universitaire CMS, enterprise booking systemen. Recente kwetsbaarheden zijn CVE-2024-45230 (strip_tags DoS), CVE-2024-39614 (denylist bypass), CVE-2023-43665 (truncatechars_html DoS). Matproof Sentinel voert gerichte Django pentests uit met proof-of-exploit en audit-klaar rapport vanaf €149.
Waarom Django specifieke pentest vereist
Django is het meest volwassen Python framework, in Nederland veel gebruikt voor: overheid portalen (DigiD), universitaire CMS, enterprise systemen, applicaties met complexe backends. Zijn volwassenheid is een voordeel (security by default, type-safe ORM), maar de vastheid van het framework introduceert specifiek aanvalsoppervlak: Django Admin blootgesteld is attack vector #1 (user enumeration, brute-force), SECRET_KEY leak via DEBUG=True veroorzaakt session forgery, ORM staat raw queries met concatenation toe die SQL injection veroorzaken, en template tags kunnen SSTI mogelijk maken in bepaalde patronen. Recente CVE's illustreren risico's. Voor Nederlandse organisaties met Django (overheid, universiteiten, enterprise), is gedocumenteerde Django pentest essentieel voor AVG Art. 32 compliance.
- CVE-2024-45230 (Django < 4.2.16/5.0.9): DoS via strip_tags template filter op grote input — exploitable in elk template met {{ user_input|striptags }}.
- CVE-2024-39614 (Django < 4.2.14/5.0.7): denylist bypass in safestring filter — staat XSS toe in templates die safestring gebruiken voor content die geëscaped zou moeten worden.
- CVE-2023-43665 (Django < 4.2.6): DoS via truncatechars_html template filter — exploitable in templates die user-provided HTML truncaten.
- Django Admin enumeration: /admin/login/ staat user enumeration toe via timing-side-channel, brute-force zonder default rate limiting.
- SECRET_KEY leak: DEBUG=True in productie exposeert SECRET_KEY in error pages — leak staat session cookie forgery, signed URL forgery toe.
- Django Templates SSTI: custom template tags met eval() of exec() op gebruikersinvoer, custom safestring met auto-escape bypass.
- Voor Nederlandse PA applicaties (DigiD, e-Herkenning), is Django pentest prerequisite voor Logius compliance.
Wat we specifiek testen in een Django applicatie
- CVE detection: 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: user enumeration via timing, brute-force protection (django-axes), 2FA enforcement, IP whitelist.
- SECRET_KEY exposure: DEBUG=True detection in productie (anti-pattern), SECRET_KEY in plaintext in settings.py committed.
- ORM injection: raw() queries met string concatenation, extra() met select, RawSQL, Q objects met SQL injection.
- Template SSTI: custom template tags met eval/exec, safestring auto-escape bypass, |safe filter toegepast op gebruikersinvoer.
- Django REST Framework (DRF): ViewSet permissions, serializer fields blootgesteld die niet zouden moeten, DRF Browsable API in productie blootgesteld.
- Authentication: django.contrib.auth met weak password hasher, session_engine secure (DB vs cache vs signed cookie).
- CSRF: csrf_exempt overmatig gebruik, CSRF token in JSON API zonder Origin header validation.
- File upload: server-side MIME type validatie, path traversal in upload_to, Python file execution in MEDIA_ROOT.
- Composition Analysis: requirements.txt + Pipfile.lock voor CVE in Django + dependencies (psycopg, Pillow, requests).
Voorbeeldbevinding
Django DEBUG=True in productie — SECRET_KEY leak via 500 error page
De Django applicatie heeft DEBUG=True in productie (gedetecteerd door bezoek aan niet-bestaand URL). Django 500 pagina met DEBUG=True exposeert: (1) volledige settings inclusief SECRET_KEY, DATABASE configuratie met credentials in plaintext, EMAIL_HOST_PASSWORD; (2) stack trace met interne file paths; (3) Python environment; (4) local variables van elk stack frame inclusief alle request data. SECRET_KEY is bijzonder kritiek: staat session cookie forgery, signed URLs forgery (password reset, email confirmation), CSRF token toe. Test maakte mogelijk: session cookie forgery voor elke user, password reset URL generation voor elk e-mailadres, lezen van alle configuraties.
Oplossing: Onmiddellijke actie (prioriteit 1): zet DEBUG=False in productie en herbouw containers:\n\nDEBUG = os.environ.get('DJANGO_DEBUG', 'False').lower() == 'true'\nALLOWED_HOSTS = ['matproof.com', 'www.matproof.com']\n\nAanvullende acties: roteer onmiddellijk SECRET_KEY (force re-login alle users, invalideer alle password reset links); roteer DATABASE_PASSWORD, EMAIL_HOST_PASSWORD; configureer error reporting via Sentry/Rollbar om 500s te beheren zonder details te exposeren; audit access log van alle accesses naar niet-bestaande URLs van laatste 90 dagen.
Referentie: CWE-489 · CWE-200 · OWASP A05:2021 · Django Security Documentation
Pentest Django: opties vergeleken
| — | Gratis scan | Matproof Sentinel | Traditionele consultancy |
|---|---|---|---|
| Geautomatiseerde scan-engine | ✓ (3-min preview) | ✓ Volledige scan | ✗ Alleen handmatig |
| OWASP Top 10 dekking | Gedeeltelijk | ✓ Volledig | ✓ Volledig |
| Proof-of-exploit bewijs | ✗ | ✓ Per bevinding | ✓ Per bevinding |
| Regulatorische mapping (DORA/NIS2/ISO 27001) | ✗ | ✓ Geautomatiseerd | ✓ Handmatig |
| Audit-geschikt PDF-rapport | ✗ | ✓ Direct | ✓ 2–4 weken levertijd |
| Continue / terugkerende scans | ✗ | ✓ Per deploy | ✗ Jaarlijkse opdracht |
| Tijd tot eerste resultaat | ~3 min | ~30 min volledige scan | 2–4 weken |
| Prijs | €0 | Vanaf €149 | €8.000–€25.000 |
| Broncode-review (SAST) | ✗ | ✓ Growth-plan | ✓ In scope |
| API-tests (REST/GraphQL) | ✗ | ✓ Geautomatiseerd | ✓ Handmatig |
Pentest Django pakketten
- 1 volledige penetratietest-scan
- AI-geprioriteerde bevindingen met CVSS 3.1
- Proof-of-exploit per bevinding
- PDF-rapport (geschikt voor audit)
- Regulatorische mapping (DORA, NIS2, ISO 27001)
- Onbeperkt scannen (tot 3 domeinen)
- Continue monitoring
- CI/CD-integratie (GitHub, GitLab)
- Alle regulatorische mappings
- Prioriteitsondersteuning
- Onbeperkt scannen + domeinen
- Geauthenticeerde / White-Box tests
- API- en cloud-infrastructuurtests
- Dedicated security account manager
- SLA responstijd 24u
Veelgestelde vragen over Django pentest
Hoe testen jullie Django Admin specifiek?
Django Admin is attack target #1 voor Django apps. Wij testen: user enumeration via timing side-channel, brute-force protection (django-axes), 2FA enforcement, IP whitelist op /admin/, audit log van admin access, CSRF op admin actions.
Testen jullie ook Django REST Framework / Django Ninja / Django Async?
Ja. DRF heeft specifieke permission audit, throttle_classes, serializer fields validation. Django Ninja (FastAPI-style) deelt FastAPI risico's. Django Async views vereisen specifieke race conditions testing.
Hoe gaan jullie om met Django + Celery / Redis background tasks?
Celery tasks met gebruikersinvoer kunnen code injection veroorzaken. Wij testen: pickle serialisatie (anti-pattern, enables RCE), task chain met shared state, Redis publieke exposure.
Voor Nederlandse PA Django applicaties (DigiD, e-Herkenning), testen jullie integratie?
Ja. DigiD OAuth2 flow heeft specifieke validatie eisen (SAML signature, AssertionConsumerService URL whitelist). e-Herkenning heeft eIDAS-based authentication. Wij testen beide flows voor misconfiguraties.
Hoe lang duurt een volledige Django pentest?
60-90 minuten voor typische Django applicatie. Voor complexe multi-tenant applicaties: 2-3 uur.
Is het rapport geaccepteerd voor AVG / Logius audits in Nederland?
Ja. Expliciete mapping naar AVG Art. 32 + UAVG + Logius richtlijnen voor PA security. Voor DigiD/e-Herkenning applicaties dekt het rapport specifieke Logius security questionnaire.
Gerelateerde onderwerpen
Meer lezen — gerelateerde blogartikelen
Bescherm uw Django applicatie nu
Eerste scan in 3 minuten, volledige Django pentest in 60-90 minuten. Audit-klaar rapport AVG / DORA vanaf €149.
Start gratis scan