Existen diferentes vulnerabilidades que, dependiendo de sus características, las podemos clasificar e identificar en los siguientes tipos:
Si la gestión administrable por el usuario es tal que hace que el sistema sea vulnerable, la vulnerabilidad no es debida al diseño del mismo si no a cómo el usuario final configura el sistema. También se considera error de este tipo cuando la configuración por defecto del sistema es insegura, por ejemplo una aplicación recien instalada que cuenta de base con usuarios por defecto.
Este tipo de vulnerabilidad se produce cuando la entrada que procesa un sistema no es comprobada adecuadamente de forma que una vulnerabilidad puede ser aprovechada por una cierta secuencia de entrada.
Ésta aprovecha la falta de seguridad de un servicio de red para desplazarse por el árbol de directorios hasta la raíz del volumen del sistema. El atacante podrá entonces desplazarse a través de las carpetas de archivos del sistema operativo para ejecutar una utilidad de forma remota.
Se producen cuando no existe una protección lo suficientemente robusta que evite el acceso a un directorio o archivo desde un enlace simbólico o acceso directo.
Hablamos de este tipo de vulnerabilidad para referirnos a la capacidad de un usuario, que controla la entrada de comandos (bien a través de un terminal de Unix/Linux o del interfaz de comando de Windows), para ejecutar instrucciones que puedan comprometer la integridad del sistema.
Este tipo de vulnerabilidad abarca cualquier ataque que permita ejecutar código de "scripting", como VBScript o javascript, en el contexto de otro dominio. Estos errores se pueden encontrar en cualquier aplicación HTML, no se limita a sitios web, ya que puede haber aplicaciones locales vulnerables a XSS, o incluso el navegador en si. El problema esta en que normalmente no se validan correctamente los datos de entrada que son usados en cierta aplicación. Hay dos tipos:
Inyección SQL es una vulnerabilidad informática en el nivel de base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con código SQL.
Una inyección de código SQL sucede cuando se inserta un trozo de código SQL dentro de otro código SQL con el fin de modificar su comportamiento, haciendo que ejecute el código malicioso en la base de datos. Un ejemplo es cuando un programa realiza una sentencia SQL sin querer con parámetros dados por el usuario para luego hacer una consulta de base de datos. En dichos parámetros que da el usuario estaría el código malicioso. Con estas inyecciones de código se pueden obtener múltiples resultados tales como datos escondidos, eliminar o sobrescribir datos en la base de datos y hasta lograr ejecutar comandos peligrosos en la máquina donde está la base de datos.
El hecho de que un servidor pueda verse afectado por las inyecciones SQL se debe a la falta de medidas de seguridad por parte de sus diseñadores/programadores, especialmente por una mala filtración de las entradas (por formularios, cookies o parámetros).
Aquí encontramos distintos sub-tipos dentro de esta clase de vulnerabilidad:
Un búfer es una ubicación de la memoria en una computadora o en un instrumento digital reservada para el almacenamiento temporal de información digital, mientras que está esperando ser procesada.
Nos refereimos a este tipo de vulnerabilidad cuando se produce a través de cadenas de formato controladas externamente, como el tipo de funciones "printf" en el lenguaje "C" que pueden conducir a provocar desbordamientos de búfer o problemas en la representación de los datos.
Un filtrado o escape de información puede ser intencionado o no intencionado. En este aspecto los atacantes pueden aprovechar esta vulnerabilidad para descubir el directorio de instalación de una aplicación, la visualización de mensajes privados, etc. La severidad de esta vulnerabilidad depende de el tipo de información que se puede filtrar.
Este tipo de vulnerabilidad tiene que ver con la gestión de usuarios, contraseñas y los ficheros que almacenan este tipo de información. Cualquier debilidad en estos elementos es considerado como una vulnerabilidad que puede ser explotada por un atacante.
Se produce cuando el mecanismo de control de acceso o asignación de permisos es defectuoso. Hay que tener en cuenta que se trata del sistema en sí y no se debe confundir con una mala gestión por parte del administrador.
Esta vulnerabilida se produce cuando la aplicación o el sistema no es capaz de autenticar al usuario, proceso, etc. correctamente.
La generación de números aleatorios para generar secuencias criptográficas, la debilidad o distintos fallos en los algorítmos de encriptación así como defectos en su implementación estarían ubicados dentro de este tipo de vulnerabilidad.
Este tipo de vulnerabilidad afecta a las aplicaciones web con una estructura de invocación predecible. El agresor puede colocar en la página cualquier código, el cual posteriormente puede servir para la ejecución de operaciones no planificadas por el creador del sitio web, por ejemplo, capturar archivos cookies sin que el usuario se percate.
El tipo de ataque CSRF más popular se basa en el uso del marcador HTML <img>, el cual sirve para la visualización de gráficos. En vez del marcador con la URL del archivo gráfico, el agresor pone un tag que lleva a un código JavaScript que es ejecutado en el navegador de la víctima.
Una condición de carrera se produce cuando varios procesos tratan de acceder y manipular los mismos datos simultáneamente. Los resultados de la ejecución dependerán del orden particular en que el acceso se lleva a cabo. Una condición de carrera puede ser interesante para un atacante cuando ésta puede ser utilizado para obtener acceso al sistema.
El sistema o software que adolece de este tipo de vulnerabilidad permite al atacante provocar un consumo excesivo en los recursos del sistema (disco, memoria y CPU). Esto puede causar que el sistema deje de responder y provocar denegaciones de servicio.
En ocasiones los programadores bien por culpa de los entornos de trabajo o bien por su metodología de programación, cometen errores en el diseño de las aplicaciones. Esto provoca que puedan aparecer fallos de seguridad y la consiguiente vulnerabilidad. También se puede aplicar el "error de diseño" si no hay fallos en la implementación ni en la configuración de un sistema, si no que el diseño inicial es erroneo.