OWASP Top 10 2026: qué ha cambiado y cómo protegerte
El OWASP Top 10 se ha reordenado de arriba abajo y ha ganado dos categorías nuevas, mientras que la IA agentic estrena su propio ranking de riesgos con la inyección de prompts en el número uno. Repasamos qué significa cada cambio para un equipo de desarrollo normal.
Antes de entrar en materia hay que aclarar una confusión que circula bastante: el documento que gobierna las auditorías, los cuestionarios de proveedores y los informes de pentesting durante 2026 no se llama “OWASP Top 10 2026”, se llama OWASP Top 10:2025. Se publicó en noviembre de 2025, se cerró en su forma definitiva en enero de 2026 y es la referencia vigente este año, igual que la edición de 2021 lo fue durante cuatro años. Aparte de ese documento clásico, la Fundación OWASP mantiene desde hace un par de años un ranking hermano centrado en aplicaciones que usan modelos de lenguaje —el OWASP Top 10 for LLM Applications—, que sí ha recibido una actualización propia con fecha de 2026 y que cada vez pesa más porque cada vez hay más aplicaciones con un LLM metido dentro. Este artículo cubre los dos, porque en 2026 casi ningún equipo puede permitirse ignorar el segundo.
El Top 10 clásico: qué se ha movido
La lista de riesgos de aplicaciones web de toda la vida mantiene sus diez categorías, pero el orden y el contenido de varias de ellas ha cambiado lo suficiente como para que valga la pena repasarlas una por una:
| Puesto | Categoría 2025 | Puesto en 2021 |
|---|---|---|
| A01 | Broken Access Control | A01 (se mantiene) |
| A02 | Security Misconfiguration | A05 |
| A03 | Software Supply Chain Failures | A06 (Vulnerable and Outdated Components, ampliada) |
| A04 | Cryptographic Failures | A02 |
| A05 | Injection | A03 |
| A06 | Insecure Design | A04 |
| A07 | Authentication Failures | A07 (renombrada, antes Identification and Authentication Failures) |
| A08 | Software or Data Integrity Failures | A08 |
| A09 | Security Logging and Alerting Failures | A09 |
| A10 | Mishandling of Exceptional Conditions | Categoría nueva |
Los tres movimientos que de verdad importan:
Broken Access Control absorbe SSRF. El Server-Side Request Forgery, que era su propia categoría en 2021 (A10), ahora se trata como una manifestación más de control de acceso roto: al final, un SSRF es un servidor haciendo una petición que un atacante no debería poder provocar, lo cual es un problema de qué se le permite hacer a quién. Si ya tenías buenas prácticas contra SSRF no cambia nada en la práctica, solo dónde se clasifica.
Security Misconfiguration salta del quinto al segundo puesto. Esto no es casualidad ni ruido estadístico: refleja que la superficie de configuración de una aplicación moderna (headers de seguridad, permisos de IAM en la nube, configuración por defecto de frameworks, secretos en variables de entorno mal gestionadas, CORS demasiado permisivo) ha crecido mucho más rápido que la disciplina para revisarla. Si tu checklist de seguridad no incluye una revisión periódica de configuración —no solo de código—, este es el cambio que debería empujarte a añadirla.
Software Supply Chain Failures reemplaza y amplía “Vulnerable and Outdated Components”. La categoría de 2021 hablaba básicamente de “actualiza tus dependencias”. La de 2025 es mucho más amplia: cubre compromisos en cualquier punto de la cadena —el propio paquete, el pipeline de build que lo genera, el registro que lo distribuye, la cuenta del mantenedor que lo publica—. Es un cambio directamente motivado por incidentes reales de los últimos años, y le dedicamos un artículo entero a este tema con el caso de LiteLLM en marzo de 2026 como ejemplo concreto.
La categoría nueva, Mishandling of Exceptional Conditions, formaliza algo que llevaba tiempo pasando desapercibido en el Top 10 pero que cualquier persona que haya hecho un pentest reconoce: aplicaciones que fallan de forma insegura. Mensajes de error que filtran trazas de stack o rutas internas, lógica que asume que una excepción nunca va a ocurrir y por tanto no verifica nada después, límites de recursos ausentes que convierten un error de validación en una denegación de servicio. No es una vulnerabilidad exótica: es el resultado directo de tratar el manejo de errores como un detalle de implementación en vez de como una superficie de seguridad.
El otro Top 10: cuando la aplicación tiene un LLM dentro
Si tu producto llama a un modelo de lenguaje —para lo que sea: un asistente, un buscador semántico, un agente que ejecuta acciones— el Top 10 clásico no cubre el riesgo real de esa pieza. Para eso existe el OWASP Top 10 for LLM Applications, cuya edición 2026 reordena y amplía la de años anteriores:
- Prompt Injection — se mantiene en el número uno.
- Sensitive Information Disclosure
- Excessive Agency — sube desde el sexto puesto.
- Supply Chain Risks
- Data and Model Poisoning
- Unbounded Consumption — sube desde el décimo puesto.
- Misinformation
- Hidden Context Exposure — versión ampliada de lo que antes se llamaba “System Prompt Leakage”.
- Vector and Embedding Weaknesses
- Improper Output Handling
Que la inyección de prompts siga en primer puesto no es un fallo de OWASP para encontrar algo nuevo que decir: es un reflejo honesto de que el problema de fondo sigue sin resolverse. Un modelo de lenguaje procesa instrucciones legítimas y contenido no confiable en el mismo espacio —el contexto—, y no hay una frontera técnica fiable entre “esto es una orden del sistema” y “esto es un dato que hay que leer”. El filtrado y el prompting defensivo reducen los ataques que funcionan, pero no eliminan la categoría de raíz. La novedad de la edición 2026 es que el alcance se amplía explícitamente a ataques multimodales: instrucciones ocultas en una imagen o en un archivo de audio que el modelo procesa junto al resto del contexto, no solo texto.
El ascenso de Excessive Agency al tercer puesto tiene una explicación igual de directa: en 2023 la mayoría de aplicaciones con LLM solo generaban texto. En 2026, buena parte ejecuta acciones reales —llamar a una API, escribir en una base de datos, enviar un correo, tocar un sistema de pagos— a menudo a través de protocolos como el que explicamos en nuestra guía de MCP. Cuantas más acciones reales puede desencadenar un modelo, más caro sale que alguien consiga manipular sus instrucciones. Si tu agente puede escribir, no solo leer, la inyección de prompts deja de ser un problema de “respuesta rara” y pasa a ser un problema de integridad de datos o de fraude.
Profundizamos en cómo defender un agente concreto frente a esto en nuestro artículo dedicado a proteger un agente de IA de prompt injection.
Qué significa cada categoría para un equipo de desarrollo normal
No hace falta ser una empresa de seguridad para actuar sobre este ranking. Traducido a tareas concretas:
- Broken Access Control (A01): cada endpoint que recibe un identificador de recurso debe comprobar que quien hace la petición tiene permiso sobre ese recurso concreto, no solo que está autenticado. Es el fallo más común en APIs REST y le dedicamos un artículo entero a cómo diseñar autenticación y autorización de APIs bien desde el principio.
- Security Misconfiguration (A02): revisa los headers de seguridad que sirve tu aplicación (empezando por una Content Security Policy bien construida), los permisos por defecto de tu proveedor cloud y que ningún panel de administración quede expuesto sin autenticación por descuido.
- Software Supply Chain Failures (A03): audita de qué depende tu build, no solo de qué depende tu código en producción. Un script de
postinstallmalicioso en una dependencia de desarrollo compromete la misma máquina que una vulnerabilidad en producción. - Cryptographic Failures (A04): no implementes tu propio cifrado ni tu propia gestión de sesiones; usa librerías auditadas y, para autenticación, valora pasar a passkeys en vez de contraseñas, que elimina de raíz toda una familia de fallos criptográficos relacionados con el manejo de contraseñas.
- Mishandling of Exceptional Conditions (A10): revisa qué le devuelves al cliente cuando algo falla. Un
catchgenérico que expone el mensaje de una excepción de base de datos es información gratis para quien está probando tu aplicación.
Cómo priorizar si no puedes con las veinte categorías a la vez
Con diez categorías clásicas y diez de LLM, ningún equipo pequeño va a auditar las veinte a fondo el mismo trimestre. El criterio realista es: si tu aplicación no tiene un LLM tomando decisiones o ejecutando acciones, ignora por ahora el ranking de LLM y concéntrate en el clásico, empezando por control de acceso y configuración, que son con diferencia los dos que más incidentes reales explican. Si sí tienes un LLM con capacidad de actuar —no solo de responder—, la inyección de prompts y el exceso de agencia dejan de ser un riesgo teórico y merecen revisión antes que cualquier otra cosa de la lista, incluida la parte clásica.
Ninguno de los dos rankings es una checklist de cumplimiento que se marca una vez al año. Son un mapa de dónde han estado fallando aplicaciones reales recientemente, y ese mapa cambia porque el software cambia. La utilidad real está en revisarlo cuando cambia de versión y preguntarte, categoría por categoría, si tu aplicación de hoy —no la de hace dos años— tiene ese problema resuelto.
Artículos relacionados
Passkeys y WebAuthn: la guía definitiva para implementar autenticación sin contraseñas
Las passkeys ya no son una promesa: son el método de login por defecto en miles de sitios. Guía práctica de attestation, assertion, soporte real por navegador y cómo integrarlas con una librería en vez de reinventar WebAuthn desde cero.
Rate limiting y protección de APIs: patrones de producción
El rate limiting mal implementado da una falsa sensación de seguridad. Repasamos los algoritmos que se usan de verdad en producción, dónde aplicarlos, los headers estándar y los fallos que lo dejan sin efecto.
Autenticación moderna: OAuth 2.1, passkeys y el fin (relativo) de las contraseñas
OAuth 2.1 consolida una década de buenas prácticas de seguridad en un único documento, y las passkeys ya superan a la contraseña en tasa de éxito de login. Qué implica esto para tu backend.