Las 25 vulnerabilidades más peligrosas en ciberseguridad
La CWE (Common Weakness Enumeration) es una lista elaborada por las comunidades de desarrolladores y profesionales que enumera las debilidades de software y hardware más habituales relacionadas con la ciberseguridad.
Como se puede apreciar en esta lista, la mayoría de las vulnerabilidades mas graves y peligrosas pecan de ser muy antiguas, como por ejemplo el SQL injection, descubierta nada mas y nada menos que en 1998 y que a día de hoy sigue siendo uno de las vulnerabilidades más peligrosas que existen a nivel de base de datos.
Como se puede apreciar en esta lista, la mayoría de las vulnerabilidades mas graves y peligrosas pecan de ser muy antiguas, como por ejemplo el SQL injection, descubierta nada mas y nada menos que en 1998 y que a día de hoy sigue siendo uno de las vulnerabilidades más peligrosas que existen a nivel de base de datos.
- Neutralización inadecuada del input durante la generación de la página web (Scripting entre sites XSS). El software no neutraliza (o lo hace incorrectamente) el input del usuario, y un atacante es capaz de inyectar un script en el output de una aplicación web de forma que se ejecuta en el navegador del cliente.
- Escritura fuera de límites. El software escribe datos antes o después del búfer previsto, lo que puede llevar a la corrupción de los datos o a un bloqueo o ejecución de un código.
- Validación de entrada incorrecta. La aplicación recibe entradas o datos, pero no es capaz de validarlos o lo hace de modo incorrecto. Esta validación de entrada se usa como verificación de entradas potencialmente peligrosas para garantizar que éstas se procesen de forma segura dentro del código o al comunicarse con otros componentes.
- Lectura fuera de límites. El software lee datos antes o después del búfer previsto. Esto puede permitir que los delincuentes lean información confidencial en memoria o provoquen un bloqueo.
- Restricción incorrecta de operaciones dentro de los límites de un búfer de memoria. Habitualmente, el software realiza operaciones en un búfer de memoria, pero puede pasar que se lean o escriban en una ubicación que esté fuera del límite previsto del búfer, por lo que puede haber operaciones de lectura o escritura en ubicaciones de memoria asociadas con otras variables, estructuras de datos o datos internos del programa.
- Neutralización incorrecta de elementos especiales utilizados en un comando SQL (Inyección SQL). Se trata de un tipo de ataque a una aplicación web que permite insertar sentencias maliciosas SQL en la aplicación web, permitiendo acceso a datos sensibles en la base de datos o destruyendo directamente estos datos. La inyección SQL se ha convertido en un problema común en los sitios web basados en BBDD, y el fallo se detecta fácilmente pero también es fácil de explotar.
- Exposición de información confidencial a un usuario no autorizado. La gravedad de este error es variable y depende del contexto en el que opera la aplicación, del tipo de información confidencial expuesta y de los beneficios que puede proporcionar a un atacante.
- Uso de memoria liberada (use after free). Hacer referencia a la memoria liberada puede conseguir que un programa se bloquee, que utilice valores inesperados o que ejecute un código. Las consecuencias van desde la corrupción de datos válidos, hasta la ejecución de código arbitrario.
- Falsificación de solicitud entre sitios (CSRF). Cuando un servidor web está diseñado para recibir la solicitud de un cliente pero no tiene mecanismos para verificar que fue enviada intencionalmente, un atacante puede engañar a dicho cliente para que haga una solicitud al servidor web a través de una URL, una carga de imágenes, XML… que será tratada como una petición auténtica.
- Neutralización incorrecta de elementos especiales utilizados en un comando del sistema operativo (Inyección de comando del SO). Un atacante podría ejecutar comandos peligrosos directamente en el SO. Además, si la vulnerabilidad se da en un programa con privilegios, podría permitir que se especificaran comandos que no son accesibles o llamar a comandos alternativos con privilegios que el atacante no tiene.
- Desbordamiento de enteros (Wraparound). Cuando un valor entero se incrementa a un valor que es demasiado grande para almacenarlo en la representación asociada, se produce un desbordamiento de enteros que puede resultar crítico para la seguridad cuando se usa para controlar un bucle, para tomar una decisión de seguridad o para determinar el desplazamiento o el tamaño en comportamientos como la asignación de memoria, la copia, la concatenación, etc.
- Limitación incorrecta de un nombre de ruta a un directorio restringido (Ruta transversal). El software implicado utiliza una entrada externa para construir un nombre de ruta destinado a identificar un archivo o directorio que se encuentra debajo de un directorio principal restringido, pero el software no neutraliza adecuadamente los elementos especiales dentro del nombre de ruta. Así, un atacante puede escapar de la ubicación restringida para acceder a archivos o directorios que se encuentran en otras partes del sistema.
- Desreferenciar el puntero nulo (NULL). Ocurre cuando una aplicación elimina la referencia de un puntero que se espera que sea válido, pero es nulo, lo que causa un bloqueo o una salida. Estos problemas pueden ocurrir por una simple omisión de programación.
- Autenticación incorrecta. Cuando un usuario afirma tener una identidad determinada y el software asociado no prueba, o prueba de manera insuficiente, que esta afirmación es correcta.
- Carga de archivos peligrosos sin restricciones. El software permite al atacante que se cargue o se transfieran archivos peligrosos que pueden procesarse automáticamente dentro del entorno del producto.
- Asignación incorrecta de permisos para recursos críticos. El software en cuestión especifica permisos para un recurso crítico de seguridad de una forma que permite a terceras personas leer o modificar ese recurso; exponiendo información confidencial o que ese recurso se modifique en zonas no deseadas. Algo muy peligroso cuando el recurso está relacionado con la configuración, la ejecución o el uso de datos confidenciales del usuario.
- Control inadecuado de la generación de código (Inyección de código). El software construye código de un componente ascendente utilizando entradas controladas externamente, pero no neutraliza elementos que podrían modificar la sintaxis o el comportamiento del segmento de código previsto. Hay que tener en cuenta que la ejecución del proceso puede alterarse enviando código a través de canales legítimos de datos, sin utilizar ningún otro mecanismo.
- Credenciales protegidas de forma insuficiente. La aplicación transmite o almacena credenciales de autenticación, pero utiliza un método poco seguro y susceptible de ser interceptadas por usuarios no autorizados.
- Restricción incorrecta de la referencia XML. Al enviar un archivo XML, que pueda contener entidades XML con URI, un atacante puede hacer que la aplicación de procesamiento lea el contenido de un archivo local, lo que puede obligar a la aplicación a realizar solicitudes salientes a servidores a los que el atacante no puede acceder directamente y que pueden usarse para eludir las restricciones del firewall o para ocultar la fuente de los ataques.
- Uso de credenciales codificadas. El fallo de credenciales codificadas en un software puede crear una entrada que permita al atacante eludir la autenticación que ha sido configurada por el administrador del software.
- Deserialización de datos no confiables. La aplicación deserializa los datos que no son de confianza sin verificar suficientemente que los datos resultantes son válidos. Éstos se pueden modificar si no se utiliza la criptografía como modo de protección.
- Gestión inadecuada de privilegios. El software no asigna, modifica, rastrea ni verifica correctamente los privilegios de un usuario, lo que crea un ámbito que está fuera de control de ese usuario.
- Consumo incontrolado de recursos. El software implicado no controla adecuadamente la asignación y mantenimiento de un recurso limitado, lo que permite que se pueda influir en la cantidad de recursos consumidos, lo que finalmente conduce al agotamiento de los disponibles.
- Ausencia de autenticación para función crítica. El programa no realiza ninguna autenticación para las funcionalidades que requieren una identidad de usuario demostrable, o consume una cantidad significativa de recursos.
- Autorización desaparecida. El software no realiza las verificaciones de autorización cuando un usuario intenta acceder a un recurso o realizar una acción, facilitando el acceso a datos o a acciones que no se les debería permitir realizar, con los consiguientes problemas de exposición de información, denegación de servicio y ejecución de código arbitrario.