Programmation : 5 erreurs à éviter pour la sécurité des logiciels

mitre-securite

MITRE vient d’actualiser sa liste des erreurs de programmation susceptibles d’engendrer les failles de sécurité les plus graves.

Qu’éviter absolument quand on code un logiciel ?

MITRE répond à cette question sous l’angle des « erreurs de programmation les plus dangereuses ». Dangereuses au sens où elles peuvent entraîner de graves failles.

L’organisation américaine à but non lucratif se fondait jusqu’alors sur des témoignages recueillis au sein de la communauté de la sécurité informatique.

Changement de méthodologie cette année : place à l’analyse des « vulnérabilités réelles ». En l’occurrence, celles compilées dans la base de données NVD (National Vulnerability Database) du gouvernement américain.

Sur cette base, MITRE a attribué un score aux erreurs de programmation selon deux critères. D’un côté, le volume de failles qu’elles ont engendré. De l’autre, la sévérité de ces failles.

Scriptage et débordements

La première place revient, avec un score de 75,56, à la classe de vulnérabilités CWE-119. Dites de « débordement de tampon », elles se traduisent par la lecture ou l’écriture dans un emplacement de mémoire au-delà de la limite prévue. Les logiciels codés en C et en C++ y sont particulièrement exposés.

Les vulnérabilités CWE-79 pointent au deuxième rang avec un score de 45,69. On les connaît sous l’acronyme XSS (scriptage intersite). Liées à une mauvaise validation des données avant leur inclusion dans une page HTML, elles permettent d’exécuter du script dans des navigateurs. Tout langage de programmation pris en charge constitue une cible potentielle.

Autre défaut de validation des entrées avec les vulnérabilités CWE-20, qui obtiennent un score de 43,61. Suivent les CWE-200 (divulgation d’informations à un tiers non explicitement autorisé à y accéder) et les CWE-125 (lecture de données hors de la zone mémoire attendue).

cwe-tableau

Le précédent classement de MITRE remontait à 2011. L’injection SQL (CWE-89 ; exposition d’une base de données à laquelle se connecte une application web)le dominait. Suivaient les injections shell (CWE-78 ; exécution de commandes sur un serveur d’application).
Le XSS figurait déjà dans la liste, en 4e position, derrière un dépassement de capacité (CWE-120) et l’authentification faible pour des fonctionnalités critiques (CWE-306).

Photo d’illustration via VisualHunt