A01 — Broken Access Control
Accès à des ressources non autorisées.
Exemples :
- Modification d'URL :
/api/users/123→/api/users/456 - Accès admin sans vérification de rôle
- IDOR (Insecure Direct Object Reference)
Protection :
- Vérifier les permissions côté serveur à chaque requête
- Utiliser des tokens opaques au lieu d'IDs séquentiels
- Deny by default — tout est interdit sauf autorisation explicite
A02 — Cryptographic Failures
Données sensibles exposées par manque de chiffrement.
Exemples :
- Mots de passe en clair dans la base de données
- HTTP au lieu de HTTPS
- Algorithmes obsolètes (MD5, SHA1, DES)
Protection :
- TLS 1.3 pour tout le trafic
- Bcrypt ou Argon2 pour les mots de passe
- AES-256-GCM pour le chiffrement au repos
- Ne jamais stocker de secrets en dur dans le code
A03 — Injection
Données non validées interprétées comme du code.
SQL Injection
-- Vulnerable
SELECT * FROM users WHERE email = 'input';
-- Attaque
' OR '1'='1' --
-- Protection : requêtes paramétrées
SELECT * FROM users WHERE email = $1;Command Injection
# Vulnerable
os.system("ping " + user_input)
# Attaque
; rm -rf /
# Protection : ne jamais construire de commandes avec des inputsProtection :
- Requêtes paramétrées (prepared statements)
- ORM pour les requêtes SQL
- Validation et sanitisation des entrées
- Principe du moindre privilège pour les comptes DB
A04 — Insecure Design
Failles architecturales, pas juste des bugs d'implémentation.
Protection :
- Threat modeling dès la conception
- Security requirements dans les user stories
- Revue de design sécurité avant l'implémentation
A05 — Security Misconfiguration
Mauvaise configuration des serveurs, frameworks ou cloud.
Exemples :
- Ports ouverts inutilement
- Headers de sécurité manquants
- Pages d'erreur qui exposent des stack traces
- Comptes par défaut non désactivés
Headers de sécurité essentiels :
Content-Security-Policy: default-src 'self'
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Strict-Transport-Security: max-age=31536000; includeSubDomains
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
A06 — Vulnerable Components
Dépendances avec des vulnérabilités connues.
Protection :
Vérifier les vulnérabilités dans les dépendances Node.js
Scanner une image Docker
- Dependabot ou Renovate pour les mises à jour automatiques
- Software Composition Analysis (SCA) dans le pipeline CI
A07 — Authentication Failures
Failles dans l'authentification et la gestion de session.
Protection :
- MFA obligatoire
- Rate limiting sur les endpoints de login
- Tokens JWT avec expiration courte
- Sessions invalidées à la déconnexion
- Politique de mots de passe robuste (longueur > complexité)
A08 — Software and Data Integrity Failures
Code ou données modifiés sans vérification.
Protection :
- Vérification d'intégrité des packages (checksums, signatures)
- CI/CD sécurisé avec revue de code obligatoire
- Subresource Integrity (SRI) pour les CDN
A09 — Security Logging and Monitoring Failures
Absence de logs ou monitoring insuffisant.
A logger :
- Tentatives de connexion (succès et échecs)
- Changements de permissions
- Accès à des données sensibles
- Erreurs d'autorisation
Ne PAS logger :
- Mots de passe
- Tokens d'authentification
- Données personnelles sensibles
A10 — Server-Side Request Forgery (SSRF)
Le serveur effectue des requêtes vers des URLs contrôlées par l'attaquant.
Protection :
- Valider et filtrer les URLs côté serveur
- Bloquer les requetes vers les réseaux internes (169.254.x.x, 10.x.x.x)
- Utiliser une allowlist d'URLs autorisées