OWASP Top 10 expliqué avec des exemples pratiques
En tant que développeur web, vous avez probablement entendu parler de l'OWASP Top 10—la liste des risques de sécurité les plus critiques pour les applications web. Mais savez-vous comment ces risques se manifestent dans le code réel ? Dans cet article, nous allons parcourir chacun des OWASP Top 10 (édition 2021) avec des exemples pratiques et des défenses concrètes. À la fin, vous serez capable de repérer et de corriger ces vulnérabilités dans vos propres projets.
1. Contrôle d'accès défaillant
Le contrôle d'accès défaillant se produit lorsque les utilisateurs peuvent agir en dehors de leurs permissions prévues. Par exemple, un utilisateur pourrait accéder aux données d'un autre utilisateur en modifiant un paramètre d'URL.
Exemple : Une application web récupère les données utilisateur via /api/users/123. S'il n'y a pas de vérification que l'utilisateur connecté est bien 123, un attaquant peut simplement changer l'ID pour accéder aux données des autres.
Défense : Implémentez des contrôles d'autorisation appropriés sur chaque requête. Utilisez le contrôle d'accès basé sur les rôles (RBAC) et validez les permissions côté serveur.
2. Défaillances cryptographiques
Cette catégorie (auparavant « Exposition de données sensibles ») couvre les défaillances liées à la cryptographie, comme la transmission de données en clair ou l'utilisation d'algorithmes faibles.
Exemple : Stocker des mots de passe avec MD5 ou SHA-1 sans sel. Les attaquants peuvent facilement craquer ces hachages.
Défense : Utilisez des algorithmes de hachage forts et adaptatifs comme bcrypt, scrypt ou Argon2. Imposez toujours HTTPS.
3. Injection
Les failles d'injection, telles que l'injection SQL, NoSQL, OS et LDAP, se produisent lorsque des données non fiables sont envoyées à un interpréteur dans le cadre d'une commande ou d'une requête.
Exemple : Un formulaire de connexion qui concatène les entrées utilisateur dans une requête SQL :
SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'
Un attaquant pourrait saisir ' OR '1'='1 pour contourner l'authentification.
Défense : Utilisez des requêtes paramétrées ou des instructions préparées. Ne concaténez jamais les entrées utilisateur dans les requêtes.
4. Conception non sécurisée
La conception non sécurisée fait référence à des failles dans l'architecture et la conception d'une application, et non seulement à des bugs d'implémentation.
Exemple : Une fonctionnalité de réinitialisation de mot de passe qui utilise des questions de sécurité avec des réponses facilement devinables, ou qui manque de limitation de débit.
Défense : Modélisation des menaces lors de la conception, utilisez des modèles de conception sécurisés et implémentez la limitation de débit et le verrouillage de compte.
5. Mauvaise configuration de sécurité
Cela inclut les comptes par défaut, les pages inutilisées, les failles non corrigées, les fichiers et répertoires non protégés, etc.
Exemple : Laisser la liste des répertoires activée sur un serveur Nginx, exposant des fichiers sensibles.
Défense : Renforcez vos configurations : désactivez la liste des répertoires, supprimez les comptes par défaut, maintenez les logiciels à jour et utilisez des en-têtes de sécurité.
6. Composants vulnérables et obsolètes
L'utilisation de composants présentant des vulnérabilités connues peut compromettre l'ensemble de votre application.
Exemple : Utiliser une ancienne version d'une bibliothèque JavaScript comme lodash avec une vulnérabilité connue de pollution de prototype.
Défense : Analysez régulièrement les dépendances (par exemple, avec npm audit, OWASP Dependency-Check) et mettez-les à jour.
7. Défaillances d'identification et d'authentification
Ces défaillances permettent aux attaquants de compromettre des mots de passe, des clés ou des jetons de session, ou d'exploiter d'autres failles d'implémentation pour usurper l'identité d'autres utilisateurs.
Exemple : Autoriser des mots de passe faibles comme « 123456 » ou ne pas implémenter l'authentification multifacteur (MFA).
Défense : Imposez des politiques de mots de passe forts, implémentez la MFA et utilisez une gestion de session sécurisée.
8. Défaillances d'intégrité des logiciels et des données
Cette catégorie se concentre sur les hypothèses faites concernant les mises à jour logicielles, les données critiques et les pipelines CI/CD sans vérifier l'intégrité.
Exemple : Télécharger et exécuter des binaires provenant de sources non fiables sans vérifier les signatures.
Défense : Utilisez des signatures numériques, vérifiez les sommes de contrôle et sécurisez votre pipeline CI/CD.
9. Défaillances de journalisation et de surveillance de la sécurité
Une journalisation et une surveillance insuffisantes permettent aux attaquants de persister, de pivoter et de maintenir l'accès.
Exemple : Ne pas journaliser les tentatives de connexion échouées, rendant les attaques par force brute indétectables.
Défense : Journalisez les événements liés à la sécurité, configurez des alertes pour les activités suspectes et examinez régulièrement les journaux.
10. Falsification de requête côté serveur (SSRF)
Les failles SSRF se produisent lorsqu'une application web récupère une ressource distante sans valider l'URL fournie par l'utilisateur.
Exemple : Une fonctionnalité de webhook qui récupère une URL fournie par l'utilisateur. Un attaquant pourrait faire en sorte que le serveur demande des ressources internes comme http://169.254.169.254/latest/meta-data/ sur AWS.
Défense : Validez et nettoyez les URL, utilisez des listes blanches et restreignez le trafic sortant.
Étapes pratiques pour atténuer l'OWASP Top 10
- Implémentez le contrôle d'accès : Imposez des contrôles d'autorisation sur chaque requête, côté serveur.
- Utilisez une cryptographie sécurisée : Hachez les mots de passe avec bcrypt/Argon2, imposez HTTPS.
- Prévenez l'injection : Utilisez des requêtes paramétrées et échappez la sortie.
- Concevez de manière sécurisée : Modélisez les menaces, utilisez des modèles sécurisés et limitez le débit.
- Renforcez les configurations : Désactivez les fonctionnalités inutilisées, maintenez les logiciels à jour, définissez des en-têtes de sécurité.
- Gérez les dépendances : Analysez et mettez à jour régulièrement les composants.
- Renforcez l'authentification : Imposez des mots de passe forts, implémentez la MFA.
- Vérifiez l'intégrité : Utilisez des signatures et un CI/CD sécurisé.
- Journalisez et surveillez : Journalisez les événements de sécurité, configurez des alertes.
- Prévenez le SSRF : Validez les URL, utilisez des listes blanches, restreignez le trafic sortant.
FAQ
Qu'est-ce que l'OWASP Top 10 ?
L'OWASP Top 10 est une liste régulièrement mise à jour des risques de sécurité les plus critiques pour les applications web, publiée par l'Open Web Application Security Project (OWASP). Elle sert de référence aux développeurs pour sécuriser leurs applications.
À quelle fréquence l'OWASP Top 10 est-il mis à jour ?
Il est mis à jour environ tous les trois à quatre ans. La dernière version date de 2021, la précédente de 2017.
Puis-je me fier uniquement à l'OWASP Top 10 pour la sécurité ?
Non, c'est un point de départ. Vous devriez également consulter d'autres ressources comme l'OWASP Application Security Verification Standard (ASVS) et effectuer des tests de sécurité réguliers.
Vous voulez analyser rapidement vos journaux Nginx pour détecter des activités suspectes ? Essayez notre Analyseur de journaux Nginx pour identifier les attaques potentielles et surveiller la sécurité de votre serveur web.