Le OWASP Top 10 est une liste des vulnérabilités de sécurité les plus courantes dans les applications web, établie par l’Open Web Application Security Project (OWASP). Cette liste, régulièrement mise à jour, aide les développeurs à comprendre et à prévenir les failles de sécurité les plus dangereuses. Voici un aperçu des vulnérabilités les plus fréquentes et comment les éviter.
1. Injection
Description : L’injection, notamment l’injection SQL, se produit lorsque des données non sécurisées sont envoyées à un interpréteur (base de données, shell, etc.) via des requêtes malveillantes. Les attaques d’injection permettent aux attaquants d’exécuter des commandes ou d’accéder à des données non autorisées.
Exemple : Une application web permet à l’utilisateur de saisir son identifiant pour accéder à ses informations. Si cette entrée n’est pas correctement filtrée, un attaquant pourrait entrer une requête SQL malveillante, par exemple '; DROP TABLE users; --
, ce qui pourrait supprimer la table des utilisateurs.
Comment l’éviter :
- Utilisez des requêtes préparées (requêtes paramétrées) : Elles séparent les données utilisateur des instructions SQL, empêchant ainsi les injections.
- Évitez de construire des requêtes SQL dynamiques en utilisant directement les entrées utilisateur.
- Validez et filtrez toutes les entrées utilisateurs.
2. Rupture d’authentification
Description : Les failles dans les mécanismes d’authentification permettent aux attaquants de compromettre les mots de passe, les clés d’API, ou d’exploiter des sessions utilisateur.
Exemple : Si une application ne force pas l’utilisation de mots de passe complexes ou n’utilise pas de gestion sécurisée des sessions, un attaquant pourrait forcer des identifiants ou voler une session active via un vol de cookie.
Comment l’éviter :
- Implémentez une gestion sécurisée des sessions : Utilisez des jetons de session sécurisés (avec des cookies ayant l’attribut
HttpOnly
etSecure
). - Utilisez une authentification multi-facteurs (2FA) pour renforcer la sécurité.
- Stockez les mots de passe avec des algorithmes de hachage sécurisés comme bcrypt, Argon2, ou PBKDF2.
- Définissez des politiques strictes sur les mots de passe (longueur minimale, complexité, expiration).
3. Exposition de données sensibles
Description : Une mauvaise gestion des données sensibles comme les informations personnelles, les numéros de carte de crédit, ou les identifiants, peut permettre aux attaquants de voler ou manipuler ces informations.
Exemple : Si une application web n’utilise pas le chiffrement pour stocker les numéros de carte bancaire ou si les données sensibles sont transmises sans HTTPS, un attaquant peut intercepter ou accéder à ces données.
Comment l’éviter :
- Chiffrez toutes les données sensibles en transit et au repos (utilisez TLS/SSL pour les connexions HTTPS).
- Ne stockez jamais les données sensibles inutilement (ex : ne stockez pas les numéros de carte bancaire après le traitement).
- Utilisez des algorithmes de chiffrement modernes et mettez à jour régulièrement vos systèmes pour éviter les vulnérabilités connues.
4. Référence directe non sécurisée à un objet
Description : Cette vulnérabilité survient lorsque des identifiants d’objets (comme un ID de compte) sont exposés et manipulés directement par les utilisateurs. Cela permet à des attaquants d’accéder à des ressources non autorisées.
Exemple : Si un utilisateur peut modifier l’URL pour accéder à un compte qui ne lui appartient pas (ex : /account/1234
au lieu de /account/5678
), cela constitue une référence directe non sécurisée.
Comment l’éviter :
- Vérifiez les autorisations d’accès pour chaque ressource ou action avant d’autoriser une requête.
- Utilisez des identifiants opaques (ex : UUID) plutôt que des identifiants séquentiels.
5. Mauvaise configuration de sécurité
Description : Les erreurs dans la configuration des serveurs, bases de données, ou frameworks, comme l’oubli de désactiver les fonctionnalités non sécurisées ou l’utilisation des configurations par défaut, exposent les systèmes à des attaques.
Exemple : Des serveurs web laissant ouvertes les pages d’administration ou exposant des fichiers de configuration avec des informations sensibles.
Comment l’éviter :
- Désactivez les fonctionnalités non utilisées (comme l’accès distant, les pages de debug ou les scripts non nécessaires).
- Appliquez des configurations sécurisées et suivez des guides de bonnes pratiques comme les benchmarks de CIS.
- Effectuez régulièrement des audits de sécurité et des tests de pénétration.
6. Falsification de requête intersite (CSRF)
Description : Le CSRF se produit lorsqu’un utilisateur authentifié est incité à effectuer des actions non voulues sur une application où il est connecté, en suivant un lien malveillant.
Exemple : Un utilisateur est incité à cliquer sur un lien malveillant qui soumet une requête à un service bancaire pour transférer de l’argent, tout en étant déjà connecté à son compte.
Comment l’éviter :
- Utilisez des jetons CSRF pour toutes les requêtes à changement d’état (POST, PUT, DELETE).
- Vérifiez les en-têtes de requêtes pour s’assurer que la requête provient du bon domaine.
7. Scripts intersites (XSS)
Description : Le XSS permet à un attaquant d’injecter des scripts malveillants dans les pages web vues par d’autres utilisateurs. Ces scripts peuvent voler des informations sensibles, modifier le contenu de la page, ou rediriger l’utilisateur vers des sites malveillants.
Exemple : Un champ de saisie non validé permet à un attaquant d’insérer un script malveillant qui est ensuite exécuté par les autres utilisateurs visitant la page.
Comment l’éviter :
- Échappez correctement tous les contenus dynamiques avant de les afficher dans le navigateur.
- Validez et filtrez toutes les entrées utilisateur pour éviter les caractères spéciaux qui pourraient être interprétés comme du code.
- Utilisez des en-têtes de sécurité comme Content Security Policy (CSP) pour limiter l’exécution de scripts non autorisés.
8. Désérialisation non sécurisée
Description : La désérialisation non sécurisée se produit lorsque des données externes sont désérialisées sans validation. Cela peut permettre aux attaquants d’exécuter du code arbitraire ou de manipuler des objets pour exécuter des actions non autorisées.
Exemple : Si une application désérialise des données sans les valider, un attaquant peut injecter des objets malveillants pour compromettre le système.
Comment l’éviter :
- Évitez de désérialiser des données non fiables ou limitez les types de données qui peuvent être désérialisés.
- Utilisez des formats de sérialisation sécurisés comme JSON plutôt que des formats binaires.
9. Utilisation de composants vulnérables
Description : Les bibliothèques ou frameworks obsolètes ou vulnérables peuvent introduire des failles dans une application si elles ne sont pas mises à jour.
Exemple : Une application utilisant une version obsolète de la bibliothèque Struts, vulnérable à une faille critique, permet à un attaquant de compromettre le serveur.
Comment l’éviter :
- Mettez à jour régulièrement vos dépendances et utilisez des outils d’analyse de composition logicielle (SCA) pour vérifier les vulnérabilités connues.
- Utilisez des versions fiables et sécurisées de vos composants logiciels.
10. Journaux et suivi insuffisants
Description : Si les journaux d’audit sont insuffisants ou manquent d’informations pertinentes, il peut être difficile de détecter ou d’enquêter sur une attaque.
Exemple : Une application ne journalise pas correctement les tentatives de connexion échouées, ce qui permet à un attaquant de lancer une attaque par force brute sans être détecté.
Comment l’éviter :
- Implémentez des journaux complets et sécurisés pour les évènements critiques comme les tentatives de connexion, les accès aux données sensibles, ou les changements de privilèges.
- Surveillez et alertez en temps réel les évènements suspects ou malveillants.
Conclusion
Le OWASP Top 10 est une ressource essentielle pour identifier et corriger les vulnérabilités les plus courantes dans les applications web. En suivant ces bonnes pratiques, les développeurs peuvent renforcer la sécurité de leurs applications et réduire considérablement les risques d’attaques.