TOP 25 errores más peligrosos en el desarrollo de software

TOP 25 errores más peligrosos en el desarrollo de softwareCWE (Common Weakness Enumeration) y la SANS han publicado un estudio donde enumeran los 25 errores de programación mas peligrosos en el desarrollo de software para el año 2011, en la lista encontraremos errores que mucha gente toma como inofensivos pero que realmente abren una brecha de seguridad en sus aplicaciones.

Desarrolladora revisando código en un monitor

El TOP 25 errores más peligrosos en el software es:

  • No filtrar propiamente las sentencias SQL (Inyección SQL) (Puntaje 93.8) (ID CWE-89)
  • No filtrar las llamadas al sistema de forma adecuada (Inyección en comandos del SO) (Puntaje 83.3) (ID CWE-78)
  • No chequear el tamaño de la memoria reservada a la hora de copiar datos (desbordamiento de memoria) (Puntaje 79.0) (ID CWE-120)
  • No detectar la inyección de scripting (XSS) (Puntaje 77.7) (ID CWE-79)
  • No autentificar en llamada a funciones críticas (Puntaje 76.9) (ID CWE-306)
  • No autorización (Puntaje 76.8) (ID CWE-862)
  • Usar credenciales estáticas en el código (Puntaje 75.0) (ID CWE-798)
  • No cifrado de datos sensibles (Puntaje 75.0) (ID CWE-311)
  • No restringir la subida de ficheros a ciertos formatos (Puntaje 74.0) (ID CWE-434)
  • Confiar en una fuente de datos no confiable a la hora de tomar una decisión de seguridad (Puntaje 73.8) (ID CWE-807)
  • Ejecución con privilegios innecesarios (Puntaje 73.1) (ID CWE-250)
  • Cross-Site Request Forgery (CSRF) (Puntaje 70.1) (ID CWE-352)
  • No limitar el acceso al sistema de ficheros a directorios restringidos (Puntaje 69.3) (ID CWE-22)
  • Descarga de código sin chequear la integridad del mismo (Puntaje 68.5) (ID CWE-494)
  • Autorización incorrecta (Puntaje 67.8) (ID CWE-863)
  • Permitir la integración de funcionalidades de fuentes no confiables (Puntaje 66.0) (ID CWE-829)
  • Asignación de permisos incorrecta a recursos críticos (Puntaje 65.5) (ID CWE-732)
  • Uso de funciones potencialmente peligrosas (Puntaje 64.6) (ID CWE-676)
  • Usar un algoritmo de cifrado que ha sido comprometido o roto (Puntaje 64.1) (ID CWE-327)
  • Cálculo incorrecto del tamaño de memoria (Puntaje 62.4) (ID CWE-131)
  • No restricción a un número de intentos fallidos de acceso (Puntaje 61.5) (ID CWE-307)
  • Redirección URL a sitios no confiables (‘Open Redirect’) (Puntaje 61.1) (ID CWE-601)
  • Formato de cadena no controlado (Puntaje 61.0) (ID CWE-134)
  • Desbordamiento de enteros (Puntaje 60.3) (ID CWE-190)
  • Aplicar una función hash sin usar la sal (Puntaje 59.9) (ID CWE-759)

Si cometes por lo menos uno de estos errores en el desarrollo de tus aplicaciones, no dudes en hacer click en su respectivo ID, donde encontraras toda la información necesaria para entender mejor el problema y corregirlo.

Puedes descargar todo el informe en PDF o verla online en la pagina oficial de la Common Weakness Enumeration.

Por qué una lista de 2011 sigue siendo útil

Esta es la edición 2011 del CWE/SANS Top 25, y su valor no está en el orden exacto ni en los puntajes: está en que los mismos errores encabezan las listas año tras año. La inyección SQL, la inyección de comandos, el XSS y los fallos de autenticación y autorización no son modas de 2011; son los patrones que siguen apareciendo en aplicaciones nuevas. Leer la lista como catálogo de patrones —no como ranking— es lo que la hace evergreen: si tu código tiene uno de estos 25, tienes un problema conocido, con nombre, descripción y corrección documentada en CWE.

CWE publica ediciones nuevas del Top 25 con regularidad; la edición vigente está en cwe.mitre.org/top25. La lista de 2011 y su informe en PDF seguían disponibles al verificarlos hoy.

Cómo usar la lista en tu proyecto

Recorre tu código buscando estos patrones, no estos nombres. Las comprobaciones que más retorno dan, mapeadas a la lista:

  • Entradas que llegan a un intérprete: consultas SQL parametrizadas (CWE-89), nunca construir comandos del sistema con datos del usuario (CWE-78) y codificar la salida que se muestra en el navegador (CWE-79).
  • Acceso: autenticación en funciones críticas (CWE-306), autorización en cada operación y no solo en la interfaz (CWE-862, CWE-863) y permisos mínimos para procesos y archivos (CWE-250, CWE-732).
  • Secretos y datos: ninguna credencial escrita en el código (CWE-798), cifrado de datos sensibles con algoritmos vigentes (CWE-311, CWE-327) y contraseñas con hash con sal (CWE-759).
  • Archivos y límites: restringir tipos de archivo subidos (CWE-434) y recorridos de directorios (CWE-22), y limitar intentos fallidos de acceso (CWE-307).

Si un solo ítem de esta lista aparece en tu revisión, ya tienes trabajo concreto: abre su ficha CWE, entiende el patrón y corrígelo antes de seguir añadiendo funcionalidades. Esa es la forma de usar el Top 25: como lista de verificación, no como lectura.