- Las vulnerabilidades de software son debilidades explotables que pueden provocar filtraciones de datos, ransomware y caídas de servicio si no se gestionan a tiempo.
- Los fallos más comunes incluyen inyecciones (SQL, comandos), XSS, desbordamientos de búfer, control de acceso defectuoso, APIs inseguras y software sin parches.
- La combinación de revisiones de código, pruebas de penetración, escáneres especializados y una buena gestión de parches reduce drásticamente la superficie de ataque.
- La protección efectiva exige también abordar vulnerabilidades de hardware y del factor humano mediante políticas, formación y una cultura sólida de ciberseguridad.
Las vulnerabilidades de software son el eslabón débil de la mayoría de sistemas digitales actuales: una pequeña falla en el código, una mala configuración o un parche sin aplicar pueden abrir la puerta a brechas de datos, ransomware o interrupciones de servicio muy serias. Aunque muchas organizaciones ya tienen antivirus, cortafuegos y otras capas de defensa, si el software es vulnerable, todo ese esfuerzo se puede venir abajo en cuestión de minutos.
Cualquier cosa diseñada por personas es susceptible de fallar y el software no es ninguna excepción. Desde aplicaciones web y APIs hasta sistemas operativos, firmware o controladores del kernel, todas estas piezas pueden contener errores explotables. Entender qué son las vulnerabilidades, qué tipos existen, cómo se detectan y, sobre todo, cómo se corrigen y gestionan a tiempo es clave para evitar sustos que acaben en pérdidas millonarias, sanciones regulatorias o daños reputacionales.
Qué es una vulnerabilidad de software y por qué importa tanto
En el ámbito de la informática, una vulnerabilidad es una debilidad en un sistema, aplicación, dispositivo o proceso que un atacante puede aprovechar para dañar, alterar o acceder a información o servicios de forma no autorizada. Esa debilidad puede estar en el código (errores de programación), en el hardware, en la configuración, en los procedimientos internos o incluso en el comportamiento de las personas.
Una vulnerabilidad por sí sola no es todavía un ataque, es un riesgo latente. El problema surge cuando alguien logra explotarla, ya sea de forma intencionada (un ciberdelincuente lanzando un exploit) o accidental (un usuario provocando un bloqueo al introducir datos inesperados). Un simple desbordamiento de búfer mal gestionado puede desencadenar desde una denegación de servicio hasta la ejecución de código arbitrario.
El impacto de una vulnerabilidad explotada puede ser enorme: robo o exposición de datos personales y financieros, despliegue de malware, cifrado de información mediante ransomware, caída de servicios críticos o incluso comprometer infraestructuras de alto nivel. En el caso de aplicaciones web, por ejemplo, una inyección SQL o un XSS pueden convertirse en la puerta de entrada al resto de la red corporativa.
Detectar y arreglar las vulnerabilidades cuanto antes es mucho más barato que reaccionar tras un incidente. Integrar la seguridad en el ciclo de vida del desarrollo de software (SDLC) y adoptar enfoques tipo DevSecOps permite “mover la seguridad a la izquierda”: encontrar fallos en fases tempranas de diseño y codificación, cuando corregirlos es menos costoso que parchear sistemas ya desplegados en producción.
Una vulnerabilidad puede materializarse de formas muy distintas. Puede ser un servicio escuchando en un puerto innecesario, una red Wi-Fi abierta, un puerto expuesto en el firewall, una política de contraseñas inexistente o unas instalaciones sin control de acceso físico. Todas estas situaciones, aunque no parezcan puramente “de software”, forman parte del conjunto de vulnerabilidades que un atacante puede encadenar para lograr su objetivo.

Principales tipos de vulnerabilidades de software
Las vulnerabilidades de software abarcan múltiples categorías, desde errores clásicos de memoria hasta fallos de lógica en la autenticación o carencias en el diseño arquitectónico. A continuación se reúnen los tipos más habituales y relevantes hoy en día, muchos de ellos directamente reflejados en listas como OWASP Top 10.
Vulnerabilidades de día cero
Una vulnerabilidad de día cero es un fallo desconocido por el fabricante que ya está siendo explotado por atacantes antes de que exista un parche disponible. Casos como la vulnerabilidad de Log4j mostraron lo peligrosas que pueden ser estas situaciones: millones de sistemas quedaron expuestos mientras los proveedores preparaban correcciones contrarreloj.
En una vulnerabilidad de día cero, los atacantes tienen ventaja temporal, porque disponen de un exploit funcional mientras los defensores siguen “a ciegas”. En este escenario, la detección basada en comportamiento, el filtrado de tráfico, la segmentación de redes y las políticas de mínimo privilegio son esenciales para reducir el impacto mientras llegan los parches oficiales.
Ejecución remota de código (RCE)
Una vulnerabilidad de ejecución remota de código permite a un atacante ejecutar instrucciones maliciosas en un sistema objetivo sin necesidad de acceso físico. Es una de las categorías más críticas porque, una vez conseguida, puede servir para instalar malware, acceder a datos sensibles, crear puertas traseras o pivotar hacia otros sistemas internos.
Las RCE suelen apoyarse en otros fallos subyacentes, como desbordamientos de memoria, inyecciones o problemas en la deserialización de datos. Su explotación exitosa suele equivaler a comprometer completamente el sistema afectado, sobre todo si la aplicación vulnerable se ejecuta con privilegios elevados.
Problemas de validación y desinfección de datos
Una enorme cantidad de ataques nace de datos de entrada mal validados. Si una aplicación no comprueba ni limpia los datos que recibe (formularios, parámetros de URL, cabeceras, JSON, etc.), un atacante puede colar contenido malicioso que se interprete como código o instrucciones inesperadas.
Aquí encajan varias vulnerabilidades muy conocidas, como la inyección SQL, el Cross-Site Scripting (XSS), los errores de formato en cadenas o ciertos desbordamientos de búfer. Validar tipos, rangos, formatos y longitud de todos los campos, así como usar listas blancas y preparar las consultas de forma segura, es la base para minimizar este tipo de riesgos y forma parte de las buenas prácticas de desarrollo seguro.
Inyección SQL y otros tipos de inyección
La inyección SQL (SQLi) es uno de los ataques más frecuentes contra aplicaciones web que interactúan con bases de datos. Consiste en insertar sentencias SQL manipuladas en campos de entrada no protegidos (formularios de login, búsquedas, filtros, etc.) para forzar a la aplicación a ejecutar consultas no previstas por el desarrollador.
Este tipo de vulnerabilidad permite desde leer tablas completas (incluyendo contraseñas e información de tarjetas de crédito) hasta modificar o borrar registros, cambiar credenciales o inutilizar bases de datos enteras. Dado que los formularios y consultas SQL son omnipresentes, casi cualquier motor (MySQL, PostgreSQL, SQL Server, Oracle, incluso algunas implementaciones tipo MongoDB que soportan consultas similares) puede verse afectado si el código no está bien protegido.
Las inyecciones no se limitan a SQL. También existen inyecciones de comandos del sistema operativo, inyección LDAP, inyección en plantillas, inyección de cabeceras o deserialización insegura. Todas comparten una idea: el software interpreta como instrucciones algo que debería ser solo datos, porque no se han aplicado controles ni separación adecuados.
Cross-Site Scripting (XSS) y falsificación de petición en sitios cruzados (CSRF)
El Cross-Site Scripting permite a un atacante inyectar scripts en páginas legítimas que otros usuarios visitan con normalidad. Si la aplicación no filtra correctamente el contenido mostrado, el script malicioso puede robar sesiones, capturar credenciales o alterar el comportamiento de la web desde el navegador de la víctima.
Por su parte, la falsificación de petición en sitios cruzados (CSRF) engaña al navegador de un usuario autenticado para que ejecute acciones no deseadas en una aplicación confiable (como cambiar una contraseña o realizar una transferencia), aprovechando que el navegador envía automáticamente las cookies de sesión. La protección se basa en tokens anti-CSRF, cabeceras adecuadas y medidas adicionales de verificación.
Desbordamiento de búfer y errores de formato
El desbordamiento de búfer es un clásico de la seguridad en C y C++. Se produce cuando un programa escribe más datos de los que caben en una zona de memoria reservada (búfer), sobrescribiendo áreas adyacentes y pudiendo alterar variables, direcciones de retorno o estructuras internas del sistema.
Este comportamiento no controlado puede dar lugar a fallos, bloqueos o, en el peor de los casos, a la ejecución arbitraria de código. De forma similar, los errores de formato en cadenas (por ejemplo, uso inadecuado de funciones de impresión con parámetros controlados por el usuario) permiten manipular la memoria o filtrar información sensible si no se programan con cuidado.
Control de acceso defectuoso y diseño inseguro
El control de acceso defectuoso aparece cuando la aplicación no comprueba correctamente qué puede hacer cada usuario, permitiendo acciones o accesos que deberían estar restringidos. Esto incluye desde funciones de administración visibles para cualquier autenticado, hasta APIs que no aplican controles basados en rol.
El diseño inseguro, por su parte, refleja fallos arquitectónicos más profundos, no simples errores de codificación. Son decisiones estructurales problemáticas, como no contemplar la separación por capas, no incluir mecanismos de registro y trazabilidad, o no planificar la protección de datos sensibles desde el inicio. Corregir estos puntos suele requerir cambios importantes en la base del sistema.
Fallos criptográficos y falta de cifrado
Los fallos criptográficos abarcan desde usar algoritmos obsoletos (como cifrados ya rotos o funciones hash inseguras) hasta implementar mal protocolos o reutilizar claves de forma inadecuada. Todo esto provoca que la protección teórica que ofrece la criptografía se evapore en la práctica.
La ausencia de cifrado también es una vulnerabilidad en sí misma. Almacenar datos en claro en bases de datos, ficheros o copias de seguridad, o no cifrar la comunicación entre cliente y servidor, facilita enormemente la labor de un atacante que logre acceso al entorno o intercepte el tráfico de red.
API débiles y mal configuradas
Las API se han convertido en un objetivo prioritario en la gestión de riesgos de ciberseguridad porque son la puerta de entrada silenciosa a datos y funciones críticas. Muchas organizaciones blindan sus interfaces web visibles, pero dejan menos protegidas las API internas, móviles o de terceros.
Entre los fallos típicos en APIs encontramos la falta de autenticación robusta, una autorización deficiente, exposición excesiva de datos, mensajes de error demasiado detallados o ausencia de limitación de peticiones (rate limiting). Todo ello convierten a las APIs en un vector perfecto para automatizar ataques a gran escala.
Vulnerabilidades por software desactualizado y sin parches

El software sin parches es probablemente el talón de Aquiles más común en cualquier organización. Cada vez que un fabricante publica una actualización de seguridad y no se aplica, se deja una puerta abierta con una cerradura cuyo funcionamiento ya es público, a menudo documentado en bases de datos como el listado CVE (Common Vulnerabilities and Exposures); por eso el mantenimiento preventivo de software es esencial.
Estas vulnerabilidades sin parchear afectan a todo tipo de componentes: sistemas operativos, aplicaciones de negocio, navegadores, plugins, firmware de dispositivos de red, controladores de hardware, etc. Cuanto más tiempo pasa sin aplicar el parche, mayor es la probabilidad de que aparezcan exploits funcionales y empiecen a ser utilizados de forma masiva.
Los ciberdelincuentes buscan activamente sistemas desactualizados porque son objetivos de bajo esfuerzo: basta con escanear rangos de IP o servicios publicados para localizar versiones conocidas como vulnerables y lanzar ataques automatizados, sin necesidad de ingeniería compleja.
Por qué muchas vulnerabilidades no se parchean
A pesar de lo evidente que parece “parchear siempre”, las organizaciones se encuentran con varios obstáculos prácticos: volumen de actualizaciones, dependencia entre sistemas, falta de tiempo o personal, y entornos cada vez más distribuidos.
Entre los factores más habituales están los problemas logísticos (miles de aplicaciones distintas que actualizar), las limitaciones de recursos (equipos de TI saturados, falta de presupuesto), la complejidad de sistemas muy interconectados (un parche puede romper compatibilidades) y, más recientemente, la dificultad de gestionar parches en dispositivos remotos o fuera de la red corporativa.
Los sistemas heredados representan un caso especialmente delicado. Muchos equipos antiguos dejan de recibir soporte del fabricante, de modo que ya no existen parches oficiales. Sin embargo, siguen siendo fundamentales para procesos críticos, por lo que retirarlos no es tan sencillo. En estos casos hay que contemplar medidas como su aislamiento de la red o la virtualización controlada.
Riesgos del software sin parches
Las consecuencias de no aplicar parches de seguridad son muy amplias. En primer lugar, aumentan exponencialmente la exposición a ciberataques; en segundo lugar, pueden implicar incumplimientos normativos; y, por último, arrastran efectos económicos y reputacionales que pueden prolongarse durante años.
Desde el punto de vista de ciberseguridad, el software sin parches se aprovecha para lanzar filtraciones de datos, infecciones de malware variadas o grandes campañas de ransomware. Casos mediáticos como el ataque de WannaCry explotaron vulnerabilidades conocidas en sistemas Windows que no habían sido actualizados, afectando a cientos de miles de equipos en todo el mundo.
En sectores regulados (finanzas, salud, servicios de pago), mantener sistemas desactualizados puede violar normas como el RGPD, HIPAA o PCI DSS, que exigen aplicar medidas razonables para proteger los datos. Las sanciones pueden llegar a un porcentaje significativo de la facturación anual, además del coste reputacional asociado a una brecha pública.
El daño económico directo de un incidente por vulnerabilidades sin parchear incluye respuesta a incidentes, análisis forense, restauración de copias, asesoría legal, avisos a clientes y posibles compensaciones. A esto se suman las pérdidas por inactividad, la fuga de clientes y el coste de reforzar después las medidas de seguridad.
Otras áreas de vulnerabilidad: hardware y factor humano
La seguridad no termina en el software de las aplicaciones. El hardware sobre el que se ejecutan esas aplicaciones y las personas que las utilizan son parte esencial de la superficie de ataque. Un plan de ciberseguridad serio no puede ignorar estos elementos.
Vulnerabilidades de hardware
En el ámbito del hardware, muchas debilidades vienen de fábrica o de una mala gestión posterior. Dispositivos que salen con contraseñas por defecto, routers o cámaras no actualizados, equipos falsificados o firmware con fallos conocidos son ejemplos habituales.
Algunos riesgos habituales de hardware incluyen contraseñas predeterminadas nunca cambiadas, ausencia de medidas contra el acceso físico no autorizado, firmware sin actualizar, dispositivos sin soporte oficial, ataques por fallos (fault injection) o el uso de hardware falsificado con posibles modificaciones maliciosas.
Además, muchos componentes de infraestructura tienen una vida útil larga y se quedan obsoletos, mientras nuevas amenazas van apareciendo. Sin planes de renovación, segmentación y endurecimiento, se convierten en eslabones débiles muy difíciles de proteger.
Vulnerabilidades relacionadas con el personal
El factor humano sigue siendo uno de los mayores vectores de riesgo. Empleados que usan contraseñas débiles o repetidas, caen en correos de phishing, conectan dispositivos no autorizados, comparten credenciales o ignoran los procedimientos de seguridad, sin mala intención en muchos casos, pueden echar por tierra las mejores defensas técnicas.
Entre las vulnerabilidades más comunes vinculadas al personal están los accesos a redes inseguras, la falta de conciencia frente al phishing, el uso de contraseñas previsibles, la instalación de software sin autorización, el incumplimiento de políticas corporativas o las amenazas internas por parte de trabajadores descontentos.
Mitigar estos riesgos exige mucho más que una política escrita. Es necesario formar y concienciar de manera continua, realizar simulaciones (por ejemplo, campañas de phishing interno controlado), supervisar el cumplimiento de normas y fomentar una cultura en la que reportar incidentes o comportamientos sospechosos sea algo natural.
CVE y vulnerabilidades avanzadas: ejemplo de un caso en el kernel Linux
Algunas vulnerabilidades afectan a capas muy bajas del sistema, como el kernel del sistema operativo o los módulos de virtualización. Un ejemplo ilustrativo es un fallo documentado como CVE-2026-23005, relacionado con la gestión del estado de la FPU y las instrucciones XSAVE/ XRSTOR en entornos x86 con virtualización KVM.
En este caso concreto, el problema surge con el manejo del registro XFD y el campo XSTATE_BV dentro del estado XSAVE de las máquinas virtuales invitadas. Si determinadas características de la FPU (como extensiones avanzadas tipo AMX) se deshabilitan mediante XFD pero permanecen marcadas como “en uso” en XSTATE_BV, el kernel puede intentar restaurar un estado inconsistente y provocar una excepción #NM que llegue incluso a causar un pánico del sistema.
El desencadenante puede ser, por ejemplo, una escritura al MSR IA32_XFD por parte de la máquina invitada, combinada con una interrupción o cambio de contexto justo en el momento en que aún no se ha sincronizado correctamente el estado FPU de la VM. También puede ocurrir si el espacio de usuario introduce estados XSAVE incoherentes mediante interfaces como KVM_SET_XSAVE.
La solución adoptada en el kernel consiste en limpiar XSTATE_BV para aquellas características deshabilitadas por XFD siempre que se actualiza el estado XSAVE de la máquina invitada. De este modo, se garantiza que XRSTOR no intente restaurar información de componentes que, según XFD, están inactivos. Esta corrección mantiene el comportamiento coherente con las especificaciones de Intel y evita que se produzcan las excepciones de dispositivo no disponible.
Este ejemplo muestra que las vulnerabilidades no siempre son obvias para quienes solo ven la capa de aplicaciones. A menudo residen en la interacción entre hardware, kernel y virtualización, y requieren un alto grado de conocimiento para ser identificadas y corregidas. De ahí la importancia de seguir de cerca los avisos de seguridad del sistema operativo y aplicar actualizaciones de bajo nivel con diligencia.
Métodos y herramientas para detectar vulnerabilidades
Detectar vulnerabilidades de forma sistemática implica combinar métodos tanto manuales como automatizados. No basta con un único enfoque: revisar código, hacer pruebas de penetración, escanear sistemas y realizar pruebas con usuarios maliciosos simulados son piezas que se complementan entre sí.
Revisión de código fuente
La revisión de código es una de las defensas más eficaces para detectar vulnerabilidades antes de que el software llegue a producción. Puede ser manual, mediante peer review entre desarrolladores, o asistida por herramientas de análisis estático que automáticamente buscan patrones de riesgo.
En revisiones manuales, los responsables deben conocer bien el lenguaje utilizado, las buenas prácticas de seguridad (control de errores, validación de entradas, gestión de memoria, autenticación, cifrado) y disponer de listas de comprobación claras. Revisar únicamente el “happy path” no es suficiente; hay que buscar casos límite y condiciones de carrera.
Las herramientas de análisis estático y SAST complementan este proceso escaneando grandes bases de código en busca de patrones conocidos vinculados a vulnerabilidades típicas: inyecciones, XSS, buffer overflows, uso de funciones peligrosas, etc. Aunque generan falsos positivos, ayudan a no pasar por alto ciertos problemas recurrentes.
Pruebas de penetración y escaneos de vulnerabilidades
Las pruebas de penetración simulan ataques reales contra aplicaciones, infraestructuras y APIs para identificar vectores de intrusión, encadenando vulnerabilidades tal y como haría un atacante. Pueden ser de caja negra (sin información previa), caja gris (con algo de contexto) o caja blanca (con acceso al código y a la arquitectura).
En paralelo, los escáneres de vulnerabilidades recorren puertos, servicios y aplicaciones buscando versiones conocidas como vulnerables o configuraciones problemáticas. Son herramientas ideales para mantener un mapa actualizado de los riesgos presentes en la organización y priorizar la remediación.
Herramientas especializadas: OWASP ZAP, Nikto y Acunetix
OWASP ZAP es una herramienta open source muy extendida para analizar aplicaciones web. Permite interceptar tráfico, automatizar ataques de descubrimiento, lanzar pruebas de inyección SQL, XSS, comprobaciones de autenticación, etc., y genera informes con las vulnerabilidades detectadas y su impacto.
Nikto se centra en el análisis de servidores web, comprobando configuraciones débiles, versiones obsoletas, directorios y ficheros sensibles, así como cabeceras mal configuradas. Es especialmente útil como escáner rápido para identificar problemas básicos pero peligrosos en entornos web.
Acunetix es una solución comercial más completa que combina escaneos automáticos profundos sobre aplicaciones web y móviles, con pruebas específicas para inyecciones de código, fallos de autenticación y autorización, XSS, CSRF y muchas otras categorías. Sus informes suelen incluir recomendaciones concretas para solucionar cada hallazgo.
Pruebas de usuario con enfoque de seguridad
Además de las pruebas técnicas, es clave incorporar pruebas de usuario orientadas a seguridad. No se trata solo de verificar que la aplicación “funciona”, sino de comprobar cómo se comporta ante usuarios maliciosos, entradas incorrectas o flujos no previstos.
Las pruebas de inyección de datos, por ejemplo, se centran en introducir datos especialmente construidos (caracteres especiales, cargas largas, estructuras sospechosas) para comprobar cómo los procesa la aplicación. Si se detecta que el software no filtra adecuadamente, se abre la puerta a inyecciones SQL, XSS y otros ataques.
Las pruebas de autenticación verifican la robustez del login, la gestión de sesiones, los mecanismos de recuperación de contraseña y el control de accesos por rol. Se intenta saltarse el login, escalar privilegios, reutilizar sesiones o manipular tokens para evaluar la solidez de todo el sistema de identificación.
Buenas prácticas para prevenir y gestionar vulnerabilidades
Una estrategia eficaz frente a vulnerabilidades combina prevención, detección temprana y respuesta rápida. No se puede evitar el 100 % de los fallos, pero sí se puede reducir su número, su gravedad y el tiempo en que permanecen explotables.
Mantenimiento y gestión de parches
Mantener sistemas y aplicaciones actualizados es básico y forma parte del mantenimiento de software. Esto implica aplicar parches de seguridad tan pronto como sea razonable, establecer ventanas de mantenimiento regulares, probar las actualizaciones en entornos de preproducción y automatizar al máximo el despliegue.
Las soluciones de gestión automatizada de parches ayudan enormemente a orquestar las actualizaciones de sistemas operativos y software de terceros, priorizando según criticidad y reduciendo la intervención manual. Integrar estas herramientas con la seguridad de endpoints (antivirus, EDR, firewall) aporta una visión unificada del estado de protección.
La priorización basada en riesgos es clave: no todos los parches son igual de urgentes. Utilizar métricas como CVSS, combinar información de inteligencia de amenazas (saber qué vulnerabilidades se están explotando activamente) y considerar el papel de cada sistema en el negocio ayuda a decidir qué corregir primero.
Formación del personal y cultura de seguridad
Ninguna tecnología compensa la falta de concienciación. Formar de forma periódica a todo el personal sobre phishing, uso de contraseñas, protección de dispositivos, manipulación de información sensible y reporte de incidentes reduce de forma tangible la superficie de ataque.
Además, es importante fomentar una cultura en la que la seguridad sea responsabilidad de todos, no solo del departamento de IT. Esto incluye a desarrolladores, operaciones, recursos humanos, finanzas y alta dirección. La seguridad debe incorporarse a procesos y decisiones diarias, no ser un añadido de última hora.
Políticas, auditorías y respuesta ante incidentes
Definir políticas claras de seguridad ayuda a marcar límites sobre qué está permitido y qué no: uso de software, accesos remotos, gestión de contraseñas, almacenamiento de datos, dispositivos personales (BYOD), etc. Pero estas políticas deben revisarse y auditarse regularmente para comprobar que se cumplen.
Las auditorías de seguridad periódicas permiten detectar desviaciones, identificar sistemas obsoletos, procesos mal implementados o vulnerabilidades que han pasado desapercibidas. A partir de ellas se elaboran planes de acción correctivos y se reevalúan las prioridades.
Contar con un plan de respuesta ante incidentes bien definido es fundamental para minimizar el impacto cuando, inevitablemente, algo falle. Este plan debe incluir procedimientos de detección, contención, erradicación, recuperación y comunicación, así como responsabilidades claras para cada equipo implicado.
En un entorno donde las amenazas evolucionan constantemente, la única forma realista de mantenerse a salvo es asumir que las vulnerabilidades siempre existirán, pero trabajar para que sean menos, se descubran antes y se exploten durante el menor tiempo posible; combinando buen diseño, desarrollo seguro, gestión de parches disciplinada, herramientas especializadas, hardware protegido y, sobre todo, personas formadas y conscientes de su papel en la seguridad de la organización.
Tabla de Contenidos
- Qué es una vulnerabilidad de software y por qué importa tanto
- Principales tipos de vulnerabilidades de software
- Vulnerabilidades de día cero
- Ejecución remota de código (RCE)
- Problemas de validación y desinfección de datos
- Inyección SQL y otros tipos de inyección
- Cross-Site Scripting (XSS) y falsificación de petición en sitios cruzados (CSRF)
- Desbordamiento de búfer y errores de formato
- Control de acceso defectuoso y diseño inseguro
- Fallos criptográficos y falta de cifrado
- API débiles y mal configuradas
- Vulnerabilidades por software desactualizado y sin parches
- Otras áreas de vulnerabilidad: hardware y factor humano
- CVE y vulnerabilidades avanzadas: ejemplo de un caso en el kernel Linux
- Métodos y herramientas para detectar vulnerabilidades
- Buenas prácticas para prevenir y gestionar vulnerabilidades