Leo en MITRE una lista donde detallan los 25 errores más peligrosos de la programación y creo que es una buena referencia que puede tomarse como una checklist, una lista a comprobar cuando los desarrolladores están realizando su trabajo.
Como dicen en su introducción, esa lista puede servir también de referencia a los educadores y profesores de programación, ingeniería del software, … para que los alumnos conozcan también estos típicos errores que generan vulnerabilidades peligrosas y tópicas.
Una breve enumeración:
- No validar las entradas. (CWE-20)…
- … y no formatear (o escapar) adecuadamente las salidas. (CWE-116).
- Cuidado con la inyección de SQL. (CWE-89).
- Cuidado con el Cross-site scripting (XSS). (CWE-79).
- Atención a la ejecución de comandos. (CWE-78).
- Falsificaciones de peticiones en sitios cruzados. (CWE-352).
- Transmisión de información sensible en claro. (CWE-319).
- Race conditions la expresión en español típica (condición de carrera) no es una traducción que me guste en exceso. (CWE-362).
- Cuidado con la información de los mensajes de error, que no den más información de la cuenta. (CWE-209).
- Desbordamientos de buffer. (CWE-119).
- Cuidado con el almacenamiento de datos críticos, no sea que están accesibles. (CWE-642).
- Cuidado con las rutas y ficheros, exposición de más información de la cuenta o acceso a rutas no necesarias. (CWE-73). Este me parece a mi un error más de configuración de sistemas que de desarrollo puro y duro pero es interesante. Es sencillo encontrar ejemplos de máquinas potencialmente vulnerables.
- Control sobre el directorio de búsqueda de recursos. (CWE-426).
- Generación de código. (CWE-94). Veo este error muy relacionado con los de validación de entradas y salidas… pero bueno, así comprobamos dos veces. 🙂
- Cuidado con la reutilización. (CWE-494). ¡Para qué volver a reinventar la rueda…? pero eso sí, asegurémonos de que la rueda es redonda antes de ponerla.
- La basura de un hombre es el tesoro de otro. (CWE-404).
- Inicializa correctamente las variables y objetos. (CWE-665).
- Cálculos incorrectos. (CWE-682). También relacionada con la validación de las entradas y el desbordamiento de buffer.
- Control de acceso ineficaz. (CWE-285).
- Utilización de algoritmos criptográficos débiles o rotos. (CWE-327).
- No incluir contraseñas en el código. (CWE-259).
- Asignación de permisos inseguros para recursos críticos. (CWE-732). ¿No es esto demasiado parecido al control de acceso ineficaz del que hablaban antes?
- Aleatoriedad previsible. (CWE-330).
- Utilización de más permisos de la cuenta. (CWE-250). Este también es un problema habitual. Muchos desarrolladores se acostumbran a desarrollar con usuarios privilegiados y generan código que requiere esos privilegios para ejecutarse cuando no hay necesidad real.
- Confiar la seguridad del servidor al clientes. (CWE-602).
Se trata de una lista, unas recomendaciones muy útil para mejorar el desarrollo seguro y generar herramientas y programas con menos vulnerabilidades.
No tenemos por qué estar de acuerdo con todas las cosas que aquí dicen… pero desde luego que son cosas interesantes a tener en cuenta por los desarrolladores.
1 Comments.