Kwetsbaarheden
Van SQL injection tot SSRF: wat het is, hoe een aanval werkt en hoe u het oplost.
A01:2021Broken Access Control14 artikelen
- Broken access controlBroken access control uitgelegd: horizontale en verticale escalatie, forced browsing, en hoe u met deny by default serverzijdig autoriseert.
- Onvoldoende autorisatie op functieniveauEen beheerdersfunctie die alleen uit het menu is weggelaten, blijft bereikbaar via een direct verzoek. Lees hoe u autorisatie per functie afdwingt.
- Onvoldoende autorisatie op objectniveau in API'sEen API die alleen controleert óf u bent ingelogd en niet óf dit record van u is, geeft andermans gegevens prijs. Lees hoe u dat afdwingt.
- Privilege escalationPrivilege escalation uitgelegd: hoe een aanvaller via een role-veld of een onbeschermde adminroute beheerder wordt, en hoe u dat serverzijdig voorkomt.
- API-antwoorden bevatten te veel gegevensEen API die complete databaserecords teruggeeft en het filteren aan de frontend overlaat, lekt velden die niemand had mogen zien.
- Cross-site WebSocket hijackingEen WebSocket-verbinding valt buiten de same-origin policy. Zonder controle op de Origin kan een vreemde site meelezen en meesturen.
- Information disclosureInformation disclosure uitgelegd: hoe stack traces, .git-mappen, source maps en te ruime API-responses gegevens lekken, en hoe u dat voorkomt.
- Insecure direct object reference (IDOR)IDOR uitgelegd: hoe aanvallers via aanpasbare ID's in URL's of API's andermans gegevens inzien of wijzigen, en hoe u dit opspoort en voorkomt.
- IP-adres uit een header vertrouwdLeidt uw applicatie het IP-adres af uit een header, dan bepaalt de client dat adres. Lees hoe dat limieten en toegangsregels omzeilt.
- Mass assignmentMass assignment uitgelegd: hoe een ongefilterde request body velden als isAdmin of balance schrijfbaar maakt en hoe een allowlist dat voorkomt.
- Path traversal (directory traversal)Path traversal (directory traversal) uitgelegd: hoe aanvallers met ../ uit de bedoelde map breken en gevoelige serverbestanden lezen, en hoe u het voorkomt.
- Sessie blijft geldig na verwijderen van een accountEen geblokkeerd of verwijderd account met een actieve sessie houdt vaak gewoon toegang. Lees waarom dat gebeurt en hoe u het afdwingt.
- Cross-site request forgery (CSRF)Cross-site request forgery (CSRF) uitgelegd: hoe een aanvaller de browser van een ingelogde gebruiker misbruikt voor ongewenste acties, en hoe u het voorkomt.
- Open redirectOpen redirect uitgelegd: hoe een returnUrl-parameter bezoekers naar een phishingsite stuurt, welke bypasses werken en hoe u veilig doorverwijst.
A02:2021Cryptographic Failures5 artikelen
- Onveilige opslag van wachtwoordenMD5, SHA-1 en versleuteling zijn ongeschikt voor wachtwoorden. Lees welke algoritmen wél horen en hoe u migreert zonder gebruikers te hinderen.
- Cryptographic failuresCryptographic failures uitgelegd: MD5 voor wachtwoorden, ECB-modus, vaste IV's en eigen crypto, en waarom Argon2id en AES-GCM het wel goed doen.
- Onveilig transport en zwakke TLSOnveilig transport uitgelegd: plain HTTP, ontbrekende HSTS, verouderde TLS-versies en cookies zonder Secure, en hoe u HTTPS overal afdwingt.
- Ontbrekende HTTP Strict Transport SecurityZonder HSTS kan het eerste verzoek van een gebruiker onversleuteld vertrekken. Lees hoe een downgrade-aanval werkt en hoe u de header correct instelt.
- Zwakke DKIM-sleutelEen DKIM-sleutel van 1024 bits of korter is met moderne middelen te breken. Lees hoe u naar 2048 bits gaat en waarom roteren erbij hoort.
A03:2021Injection12 artikelen
- NoSQL injectionNoSQL injection uitgelegd: hoe aanvallers via een JSON-body MongoDB-operatoren als $ne meesturen, wat dat oplevert en hoe u het met validatie stopt.
- OS command injectionOS command injection uitgelegd: hoe shell-tekens in een systeemaanroep belanden, wat een aanvaller ermee kan en hoe argumentarrays het voorkomen.
- Remote code execution (RCE)Remote code execution (RCE) uitgelegd: hoe aanvallers via ongefilterde invoer eigen commando's of code op uw server draaien, en hoe u het voorkomt.
- Server-side template injection (SSTI)Server-side template injection (SSTI) uitgelegd: hoe invoer in de template-engine belandt en tot remote code execution leidt, en hoe u het voorkomt.
- SQL injectionSQL injection uitgelegd: hoe aanvallers via ongefilterde invoer uw database uitlezen of wijzigen, en hoe u het met prepared statements voorkomt.
- CRLF injection en HTTP response splittingCRLF injection uitgelegd: hoe een regeleinde in een HTTP-header een respons splitst of een Set-Cookie vervalst, en hoe u dat structureel voorkomt.
- Cross-site scripting (XSS)Cross-site scripting (XSS) laat aanvallers scripts injecteren die in de browser van uw bezoekers draaien. Zo werkt de aanval en zo voorkomt u het.
- Cross-site scripting via bestandsuploadEen geüploade SVG of HTML die vanaf uw eigen domein wordt getoond, voert scriptcode uit binnen uw origin. Lees hoe u dat afsluit.
- CSV-injectie in exportbestandenEen geëxporteerde CSV kan formules bevatten die Excel uitvoert op de computer van uw collega. Lees hoe dat werkt en hoe u het voorkomt.
- Host header injectionBouwt uw applicatie links op met de Host-header, dan bepaalt de aanvaller waar die naartoe wijzen. Lees hoe dat wachtwoordherstel kaapt.
- LDAP injectionLDAP injection uitgelegd: hoe aanvallers met filtertekens de inlogcontrole omzeilen en hoe u het voorkomt met RFC 4515-escaping en een echte bind.
- Prototype pollutionPrototype pollution uitgelegd: hoe __proto__ via een recursieve merge in Object.prototype belandt, wat een aanvaller ermee bereikt en hoe u het voorkomt.
A04:2021Insecure Design4 artikelen
- Onbeperkte bestandsuploadEen uploadfunctie zonder restricties kan tot code-uitvoering op de server leiden. Lees welke controles nodig zijn en welke niet volstaan.
- Invoervalidatie ontbreekt op de serverValidatie die alleen in JavaScript gebeurt, is met één direct verzoek te omzeilen. Lees waarom de server elke waarde opnieuw moet controleren.
- Uploaden van schadelijke bestanden mogelijkEen uploadfunctie zonder inhoudscontrole maakt uw platform tot verspreider van malware, met uw domeinnaam als geloofwaardigheid.
- Geen snelheidsbeperking op de APIZonder snelheidsbeperking kan een API onbeperkt worden bevraagd. Lees hoe dat leidt tot datadiefstal, misbruik van kosten en uitval.
A05:2021Security Misconfiguration23 artikelen
- Broncode publiek benaderbaarEen meegepubliceerde.git-map of back-upbestand geeft uw volledige broncode prijs, inclusief wachtwoorden uit oude commits. Lees hoe u dat voorkomt.
- Debugmodus ingeschakeld in productieEen actieve debugmodus of profiler toont configuratie, queries en soms een console. Lees hoe dat wordt misbruikt en hoe u het uitschakelt.
- Onnodige diensten bereikbaar vanaf internetDatabases, beheerpoorten en monitoringinterfaces die aan het internet hangen, worden binnen minuten gevonden. Lees hoe u dat oppervlak verkleint.
- Standaardbestanden van de webserver bereikbaarVoorbeeldpagina's, beheerconsoles en installatiebestanden die na installatie blijven staan, verraden uw platform en zijn soms misbruikbaar.
- E-mail versturen namens uw domeinZonder correcte SPF-, DKIM- en DMARC-records kan iedereen e-mail versturen namens uw domein. Lees hoe u dat sluit zonder post kwijt te raken.
- GraphQL-introspectie en onbeschermde veldenIntrospectie geeft uw volledige GraphQL-schema prijs, inclusief velden die de frontend nooit opvraagt. Lees hoe u dat afdekt.
- Mappenstructuur zichtbaarStaat directory listing aan, dan toont de webserver de inhoud van elke map zonder indexbestand. Lees wat een aanvaller daarmee vindt.
- Onveilige CORS-configuratieEen CORS-beleid dat elke herkomst weerspiegelt, geeft vreemde sites toegang tot uw API namens ingelogde gebruikers. Lees hoe u het goed instelt.
- Security misconfigurationSecurity misconfiguration uitgelegd: hoe standaardwachtwoorden, debug-modi en open cloud-buckets aanvallers binnenlaten, en hoe u dit voorkomt.
- Verouderde API-versies blijven bereikbaarEen oude API-versie die naast de nieuwe blijft draaien, mist de controles die later zijn toegevoegd. Lees hoe aanvallers die omweg gebruiken.
- XML external entity injection (XXE)XML external entity injection (XXE) uitgelegd: hoe aanvallers via een XML-parser bestanden lezen en interne systemen bereiken, en hoe u het voorkomt.
- ClickjackingClickjacking uitgelegd: hoe een aanvaller uw site onzichtbaar in een frame laadt en klikken van uw gebruikers afvangt, en welke headers dat blokkeren.
- CSP staat inline scripts en eval toeEen CSP met unsafe-inline of unsafe-eval houdt cross-site scripting niet meer tegen. Lees waarom, en hoe u met nonces en hashes van die uitzonderingen afkomt.
- Gedetailleerde foutmeldingenStacktraces en databasefouten verraden uw techniek, paden en queries. Lees wat een aanvaller eruit haalt en hoe u fouten netjes afhandelt.
- Gevoelige gegevens gedeeld met analysedienstenAnalytics- en foutrapportagescripts sturen paginatitels, URL's en soms formulierinhoud door. Lees wat er onbedoeld meegaat en hoe u dat beperkt.
- Metadata in gepubliceerde bestandenDocumenten en foto's dragen verborgen gegevens mee: namen, interne paden, software en soms locaties. Lees hoe u die verwijdert voor publicatie.
- MIME-sniffing niet uitgeschakeldZonder X-Content-Type-Options mag de browser zelf raden wat een bestand is. Lees hoe een geüploade afbeelding zo als script kan worden uitgevoerd.
- Ontbrekende Content Security PolicyZonder Content Security Policy mag de browser scripts van elke bron laden. Lees wat een CSP doet, hoe u er een opstelt en welke fouten hem waardeloos maken.
- Onveilige HTTP-methodes toegestaanTRACE, PUT en DELETE op een webserver zijn zelden nodig en soms misbruikbaar. Lees welke methodes u uitschakelt en waarom OPTIONS informatie lekt.
- Interne IP-adressen en hostnamen blootgesteldInterne adressen en servernamen in headers, foutmeldingen of redirects tekenen uw netwerk voor een aanvaller. Lees waar ze weglekken.
- Ontbrekend Permissions-PolicyMet een Permissions-Policy legt u vast welke browserfuncties uw site mag gebruiken. Lees hoe u camera, microfoon en locatie centraal uitschakelt.
- Ontbrekend Referrer-PolicyZonder Referrer-Policy geeft de browser de volledige URL van uw pagina door aan elke externe site. Lees welke gegevens daarbij weglekken en hoe u dat stopt.
- Versie-informatie in HTTP-headersHeaders als Server en X-Powered-By vertellen precies welke software u draait. Lees waarom dat gericht scannen vergemakkelijkt en hoe u ze weghaalt.
A06:2021Vulnerable and Outdated Components1 artikel
A07:2021Identification and Authentication Failures19 artikelen
- Broken authenticationBroken authentication uitgelegd: hoe aanvallers via brute force, gelekte wachtwoorden en voorspelbare sessietokens accounts overnemen, en wat u eraan doet.
- JWT-kwetsbaarhedenJWT-kwetsbaarheden uitgelegd: alg:none, algoritmeverwarring, ontbrekende controles en hoe u JSON Web Tokens veilig verifieert.
- Applicatie gebruikt Basic AuthenticationBasic Authentication stuurt het wachtwoord bij elk verzoek mee in een omkeerbare codering. Lees welke risico's dat oplevert en wat de alternatieven zijn.
- Brute force en credential stuffingBrute force en credential stuffing uitgelegd: hoe aanvallers wachtwoorden raden of gelekte inloggegevens hergebruiken, en hoe throttling en MFA dat stoppen.
- Geen herauthenticatie bij gevoelige wijzigingenEen e-mailadres of wachtwoord wijzigen zonder het huidige wachtwoord te vragen, maakt van elke gekaapte sessie een permanente overname.
- JWT blijft geldig na uitloggenEen JWT is geldig tot zijn vervaldatum en trekt zich niets aan van uitloggen. Lees hoe u tokens toch kunt intrekken zonder de voordelen te verliezen.
- Meerfactorauthenticatie ontbreektZonder tweede factor is een gelekt wachtwoord genoeg voor volledige toegang. Lees welke MFA-vormen bescherming bieden en welke niet.
- Meerfactorauthenticatie uitschakelen zonder verificatieEen tweede factor die met één klik kan worden uitgezet, beschermt alleen tegen aanvallers die daar niet aan denken. Lees hoe u dat afdekt.
- Meerfactorauthenticatie wordt niet afgedwongenMFA die beschikbaar is maar niet verplicht, wordt door weinig gebruikers ingeschakeld. Lees hoe u het afdwingt zonder uw gebruikers te blokkeren.
- Sessie-identificatie in de URLEen sessie-ID in de URL belandt in logbestanden, browsergeschiedenis en referrer-headers. Lees waarom dat sessies lekt en hoe u het oplost.
- Session fixationSession fixation uitgelegd: hoe een aanvaller vooraf een session id vastlegt, waarom die na het inloggen geldig blijft en hoe sessierotatie het stopt.
- Achterhalen van geldige gebruikersnamenVerschillende foutmeldingen bij inloggen verraden welke accounts bestaan. Lees hoe aanvallers dat misbruiken en hoe u de antwoorden gelijktrekt.
- Authenticatiecookie met te lange geldigheidEen sessiecookie die maanden geldig blijft, maakt van elk gestolen token een langdurige sleutel. Lees hoe u onthoud-mij veilig inricht.
- Onbeschermd authenticatiecookieEen sessiecookie zonder HttpOnly, Secure en SameSite is uitleesbaar, onderschepbaar en misbruikbaar. Lees wat elk attribuut precies afdekt.
- Sessie blijft geldig na uitloggenUitloggen dat alleen de cookie wist, laat het token aan serverzijde intact. Lees hoe een buitgemaakte sessie dan gewoon bruikbaar blijft.
- Sessies verlopen nietEen sessie zonder vervaltijd blijft eindeloos bruikbaar. Lees waarom dat gestolen tokens waardevol maakt en hoe u een verstandige timeout instelt.
- Zwakke eisen aan wachtwoordenComplexiteitsregels leveren zwakkere wachtwoorden op dan lengte en een blokkadelijst. Lees welke eisen wél werken volgens de huidige richtlijnen.
- SameSite-attribuut op Lax in plaats van StrictSameSite=Lax laat cookies meegaan bij navigatie vanaf externe sites. Lees wanneer dat een risico is en wanneer Strict de betere keuze is.
- Wachtwoordvelden worden automatisch aangevuldAutomatisch aanvullen van wachtwoorden is op een inlogformulier gewenst, maar niet op elk veld. Lees waar het wél om een instelling vraagt.