(musique douce) Les vulnérabilités logicielles sont des failles non intentionnelles ou faiblesses constatées dans un logiciel pouvant être exploité par un attaquant. Certaines vulnérabilités sont créées parce que de configurations de sécurité incorrectes ou d'erreurs de programmation. Une vulnérabilité zero-day est une faille de sécurité logicielle qui est connu du fournisseur du logiciel mais n'a pas de correctif en place pour corriger la faille. Le fournisseur fournit généralement des recommandations d'atténuation pour empêcher un exploit de la vulnérabilité jusqu'à ce qu'un patch soit développé. L'injection SQL est une vulnérabilité qui permet à un attaquant pour effectuer des requêtes SQL non autorisées qu'une application fait à sa base de données. Cela résulte dans l'accès non autorisé à des informations confidentielles. Voici un exemple de requête SQL normale. La chaîne du numéro de compte est transmise dans une instruction SQL. La base de données est recherchée pour récupérer le numéro de compte qui correspond au numéro saisi et renvoie toutes les données associées stockées dans la base de données sur le compte. Le code pourrait ressembler à ceci. Si un utilisateur saisit un numéro de compte dans le formulaire de page Web étiqueté, "Veuillez entrer votre numéro de compte," la requête SQL résultante ressemblera à ceci. Cette commande SQL renverra toutes les données associées avec le numéro de compte saisi. Cela fonctionne comme prévu. Voici un exemple de requête d'injection SQL. Un attaquant saisit une commande de requête SQL dans le champ de saisie. Cette fois, au lieu de chercher le numéro de compte, la requête recherche un numéro de compte ou un est égal à un. Un égal sera toujours vrai, donc toutes les données de compte de la table des numéros de compte seront retournés. Pour empêcher les attaques par injection SQL, tenez compte de ces pratiques recommandées. Effectuez la validation des entrées. Utiliser une liste blanche ou autoriser la liste qui inclut des valeurs autorisées spécifiques acceptées par le champ de saisie. Valider l'entrée par rapport à un jeu de caractères sûr connu et la longueur et utilisez des instructions préparées pour que l'entrée de l'utilisateur n'est pas traité comme une instruction SQL. Un autre type d'attaque de vulnérabilité logicielle courante est une injection de commande du système d'exploitation. Cela se produit lorsqu'un attaquant est capable pour exécuter des commandes système sur le système d'exploitation de l'appareil via une application vulnérable. Ces attaques sont causées par une validation insuffisante des entrées. Voici un exemple d'injection de commande OS publiée sur l'énumération des faiblesses communes ou la liste CWE, une liste développée par la communauté de faiblesses logicielles et matérielles. Dans cet exemple, la valeur d'entrée fournie dans la variable username n'est pas validé. Toutes les commandes système fournies dans l'entrée du nom d'utilisateur serait acceptée et la commande RM serait exécutée pour supprimer les fichiers dans le répertoire personnel. Une autre bonne pratique pour prévenir les attaques est pour éviter les erreurs de configuration dans les fonctions logicielles. Configurations non sécurisées des paramètres du logiciel peuvent rendre l'utilisateur vulnérable aux attaques exploitant cette application spécifique. Exemples d'erreurs de configuration logicielle des fonctionnalités inutiles sont-elles activées ou installées ? tels que les ports, services, pages, comptes inutiles ou privilèges, comptes par défaut avec leurs mots de passe toujours activés et inchangé, fonctionnalités de sécurité non implémentées, logiciel obsolète et non pris en charge par le fournisseur. En août 2021, mauvaise configuration de Microsoft Power Apps exposé 38 millions d'enregistrements de données. Selon UpGuard, les données sensibles dont les statuts vaccinaux COVID-19, les numéros de sécurité sociale et les adresses e-mail ont été exposés en raison aux configurations par défaut faibles pour Microsoft Power Apps qui sont des outils à faible code utilisés pour concevoir des applications et créer des sites Web publics et privés. La vulnérabilité a affecté American Airlines, organismes gouvernementaux, et d'autres clients dans de nombreux secteurs. Suite à l'exposition, Microsoft a mis à jour le logiciel avoir les permissions de table activées par défaut, suppression de la configuration par défaut qui permettait un accès anonyme. Un dernier type d'attaque de vulnérabilité logicielle est le dépassement de mémoire tampon. Un tampon est un espace de stockage temporaire en mémoire pour stocker les données. Le débordement de tampon est une vulnérabilité de programmation qui se produit lorsqu'une application stocke plus de données dans la mémoire tampon que la taille de la mémoire définie. Par exemple, disons un champ sur une page Web nécessite un numéro de compte. Le champ attend huit caractères mais vous entrez 10 caractères à la place, deux octets de plus que prévu. L'application accepte l'entrée et écrit la valeur de 10 caractères dans la mémoire qui dépasse la taille de mémoire tampon attendue de huit. L'application n'attribue pas un espace tampon de taille appropriée et ne parvient pas à effectuer un contrôle de validation pour confirmer la taille de champ attendu donc le débordement de buffer se produit. Certains langages de programmation tels que C ou C++ sont plus sensibles au débordement de tampon car ils n'ont pas de protection anti-débordement intégrée. Java et JavaScript sont moins vulnérables pour les vulnérabilités de débordement de mémoire tampon. La majorité des vulnérabilités de débordement de tampon sont causées par un codage non sécurisé. Pour éviter les vulnérabilités de débordement de tampon, envisager de mettre en place des contrôles de codage sécurisés effectués par les développeurs. Les considérations pour les développeurs incluent, éviter les fonctions de programmation risquées telles que STRCPY lorsque cela est possible dans des langages de programmation sensibles pour tamponner les débordements, définir la taille de tampon appropriée attendue, effectuer des contrôles de validation des entrées pour confirmer la longueur prévue du champ et attention aux avertissements du compilateur et des recommandations pour utiliser des alternatives sécurisées des fonctions de programmation utilisées.