ZAP Security Test - Toelichting¶
Deelvraag 3: "Welke datalekken en injectie-aanvallen zijn daadwerkelijk mogelijk op de draaiende applicatie van buitenaf?"
Wat heb ik gedaan?¶
Ik heb de draaiende applicatie getest met OWASP ZAP, een tool die automatisch zoekt naar beveiligingsproblemen. ZAP heeft de applicatie gescand op http://host.docker.internal:3000 en gekeken naar response headers, configuratie en mogelijke kwetsbaarheden.
Wat zijn de belangrijkste resultaten?¶
De scan heeft geen kritieke problemen gevonden. Wel zijn er een aantal issues gevonden die allemaal te maken hebben met ontbrekende security headers:
| Severity | Aantal | Wat betekent dit? |
|---|---|---|
| High/Critical | 0 | Geen ernstige kwetsbaarheden gevonden |
| Medium | 3 | Security headers ontbreken (moet worden opgelost) |
| Low | 2 | Best practices ontbreken (optioneel) |
| Informational | 1 | Informatieve waarschuwingen (geen probleem) |
De drie belangrijkste problemen (Medium)¶
1. CSP Header ontbreekt¶
Wat: De applicatie heeft geen Content Security Policy header. Dit is een header die helpt om XSS aanvallen te voorkomen door te bepalen welke scripts de browser mag laden.
Waar: Op 6 endpoints (/, /customers, /dashboard, /invoices, /products, /settings)
Oplossing: Installeer @nuxtjs/security module in nuxt.config.ts. Deze voegt automatisch een CSP header toe.
Waarom belangrijk: Zonder CSP is de applicatie kwetsbaarder voor XSS aanvallen waarbij kwaadaardige scripts kunnen worden geïnjecteerd.
2. CORS staat alles toe¶
Wat: De CORS configuratie staat alle websites toe om data op te vragen (*). Dit betekent dat elke website cross-origin requests kan maken naar de API.
Waar: Op 6 endpoints, voornamelijk /_nuxt/* development assets
Oplossing: Wijzig CorsConfig.java en vervang allowedOriginPatterns("*") door alleen specifieke origins zoals localhost:3000 en het productie domein.
Waarom belangrijk: Met de huidige configuratie kan elke website ongewenst data opvragen van de API, wat kan leiden tot datalekken.
3. Anti-clickjacking header ontbreekt¶
Wat: Er is geen X-Frame-Options header. Zonder deze header kunnen anderen de applicatie in een iframe laden.
Waar: Op 4 endpoints (/customers, /dashboard, /invoices, /products)
Oplossing: @nuxtjs/security module voegt dit automatisch toe.
Waarom belangrijk: Zonder deze header kunnen aanvallers de applicatie in een iframe laden en gebruikers misleiden om acties uit te voeren zonder dat ze het doorhebben (clickjacking).
Andere gevonden issues (Low)¶
X-Powered-By header: De server stuurt X-Powered-By: Nuxt mee, wat onthult welke technologie gebruikt wordt. Dit is niet erg maar kan in productie beter worden weggehaald.
X-Content-Type-Options header ontbreekt: Dit is vooral belangrijk voor oudere browsers. De @nuxtjs/security module voegt dit ook automatisch toe.
Injectie-aanvallen getest¶
Ik heb ook getest of SQL injection en XSS aanvallen werken:
- SQL Injection: Werkt niet - de applicatie gebruikt parameterized queries en input validatie
- XSS: Werkt niet - Vue.js escaped automatisch alle gebruikersinvoer
Conclusie: De code zelf is goed beschermd tegen injectie-aanvallen. Het probleem zit vooral in de configuratie (security headers).
Conclusie¶
Belangrijkste bevindingen:
- Geen kritieke kwetsbaarheden gevonden - de applicatie heeft geen High severity issues
- Security headers ontbreken - alle Medium issues zijn gerelateerd aan ontbrekende security headers
- Injectie-aanvallen werken niet - SQL injection en XSS zijn succesvol afgeweerd
- CORS te permissief - de huidige configuratie staat alle origins toe, wat een datalek risico vormt
Wat moet er gebeuren:
- Installeer
@nuxtjs/securitymodule om CSP, X-Frame-Options en X-Content-Type-Options headers toe te voegen - Beperk CORS configuratie in
CorsConfig.javatot alleen specifieke origins
Voor het volledige technische rapport met alle details: → ZAP Report HTML