Les 25 erreurs de programmation les plus dangereuses

Le CWE vient de publier sa liste annuelle des 25 erreurs de développement les plus graves. Des vulnérabilités qui couvrent tous les types de projet, du Web à l'applicatif.

Comme chaque année, le CWE vient de publier la liste des 25 erreurs de programmation les plus dangereuses pour l'intégrité de vos systèmes ou de vos applications. Si toutes ces vulnérabilités ne s'appliquent pas forcément au développement Web, elles sont tout de même intéressantes à étudier, ne serait-ce que pour se former aux bonnes pratiques de développement.

Mauvaises interactions entre les composants

Ces vulnérabilités concernent les manières dont les données sont envoyées et reçues par des composants, modules, programmes, processus, threads ou systèmes.

  1. Mauvais filtrage des données envoyées par les utilisateurs.
  2. Mauvais encodage ou échappement des données en sortie.
  3. Injections SQL.
  4. Cross Site Scripting (ou XSS).
  5. Injection de commandes directement exécutables par le système d'exploitation (system() ou exec()).
  6. CSRF (prononcez sea surf pour avoir l'air cool).
  7. Race conditions.
  8. Divulgation d'informations dans les messages d'erreur (comme le PATH dans lequel est installée votre application Web).

Mauvaise gestion des ressources

Ces vulnérabilités concernent la manière dont les applications ne gèrent pas correctement la création, l'utilisation, le transfert et la destruction des ressources systèmes.

  1. Buffer overflow.
  2. Modifications externes de données d'état.
  3. Modification externe des chemins d'accès ou des fichiers en lecture / écriture.
  4. PATH non limité.
  5. Injections de code (eval()).
  6. Téléchargement et exécution de code sans réel contrôle d'intégrité.
  7. Mauvaise libération de ressources (double free()?).
  8. Mauvaise initialisation.
  9. Erreurs de calcul (off by one, division par zéro).

Mauvaises protections

Il s'agit de modes de protection souvent mal utilisés, contournés, ou purement ignorés par les développeurs.

  1. Absence d'ACL.
  2. Utilisation d'un algorithme de chiffrement cassé.
  3. Mots de passes codés en dur dans les applications (!).
  4. Mauvaises permissions sur les ressources les plus critiques.
  5. Exécution de programmes avec des permissions trop élevées (le bonheur des CGI en root).
  6. Prise des mesures de sécurité côté client.

Voilà, c'est tout, avec, peut-être, à l'avenir, des articles distincts sur chacune de ces vulnérabilités, si vous êtes suffisamment nombreux à être intéressés.

Contenu publié par Frédéric de Villamil sous licence Créative Commons BY NC ND 2.