La NSA identifie 25 erreurs classiques à la source de failles de sécurité
Ce sont des erreurs de programmation courantes, et elles ouvrent des failles de sécurité béantes dans les logiciels : la NSA (National security agency), agence fédérale américaine de sécurité, a mis en oeuvre un programme pour déterminer les 25 plus courantes. Ce top 25 se divise en trois catégories : les interactions non sécurisées entre composants (9 erreurs), une gestion hasardeuse des ressources (9 erreurs) et des défenses poreuses (7 erreurs). D'après les responsables du projet, deux seulement de ces erreurs ont provoqué en 2008 quelque 1,5 million de failles dans les sites Web, et se sont répercutées dans les PC visitant ces sites, les transformant en zombies. Le projet, initié par la NSA et la division cyber-sécurité du ministère américain de la Sécurité intérieure, a vu la collaboration de plusieurs instituts (Sans, Mitre, Secunia...) et éditeurs (Microsoft, Oracle, RSA, Symantec...). Le chef du projet explique que si les débats ont été parfois chauds, il y a eu un plutôt large consensus pour établir ce top 25 des erreurs de programmation les plus courantes ouvrant des failles de sécurité. Les agences fédérales américaines espèrent, en publiant la liste des erreurs et la façon de les empêcher, faire prendre conscience aux développeurs des conséquences en matière « de cyber-espionnage et de cyber-crime ». Car étonnamment, poursuit Bob Martin, du Mitre (organisme à but non lucratif travaillant à la sécurisation des systèmes gouvernementaux américains), « la plupart de ces erreurs ne sont pas bien connues des développeurs ; le moyen de les éviter peu enseigné par les écoles ; et leur présence rarement testée par les éditeurs de logiciels commerciaux ». La liste des 25 erreurs de programmation : Le top 25 des erreurs de programmation 1. Improper input validation 2. Improper encoding or escaping of output 3. Failure to preserve SQL query structure (SQL injection) 4. Failure to preserve Web page structure (cross-site scripting) 5. Failure to preserve operating system command structure (OS command injection) 6. Cleartext transmission of sensitive information 7. Cross-site request forgery 8. Race condition 9. Error message information leak 10. Failure to constrain operations within the bounds of a memory buffer 11. External control of critical state data 12. External control of file name or path 13. Untrusted search path 14. Failure to control generation of code (code injection) 15. Download of code without integrity check 16. Improper resource shutdown or release 17. Improper initialization 18. Incorrect calculation 19. Porous defenses 20. Use of a broken or risky cryptographic algorithm 21. Hard-coded password 22. Insecure permission assignment for critical resource 23. Use of insufficiently random values 24. Execution with unnecessary privileges 25. Client-side enforcement of server-side security Pour une analyse approfondie de ces 25 erreurs de programmation, on peut se reporter aux sites web du The SANS Institute et de MITRE Corp. à www.sans.org ou www.mitre.org