OWASP: A10 2025 - Mishandling of Exceptional Conditions
¿Qué es Mishandling of Exceptional Conditions?
Mishandling of Exceptional Conditions agrupa fallos que aparecen cuando una aplicación no previene, detecta o responde correctamente ante situaciones inesperadas o anómalas.
OWASP Top 10 2025 incorpora esta categoría para agrupar problemas relacionados con manejo incorrecto de errores, excepciones no controladas, valores de retorno no comprobados, estados inesperados, ausencia de casos por defecto, errores lógicos y situaciones donde el sistema continúa funcionando de forma insegura después de un fallo.
El objetivo es identificar condiciones excepcionales que permitan obtener información, provocar estados inconsistentes, saltarse controles, degradar mecanismos de seguridad o hacer que la aplicación falle de forma abierta.
En este artículo analizamos las siguientes áreas:
Errores y excepciones no controladas
Failing Open
Parámetros ausentes o inesperados
Valores de retorno y estados no comprobados
Manejo incorrecto de privilegios insuficientes
Errores lógicos y estados imposibles
Agotamiento de recursos y fallos dependientes del entorno
Mensajes de error con información sensible
NULL y valores no inicializados
Cleanup incorrecto después de una excepción
Errores y excepciones no controladas
Una aplicación puede encontrarse con entradas, estados o respuestas que el desarrollador no había previsto.
Cuando estas condiciones no se gestionan correctamente pueden producir:
- Excepciones no capturadas.
- Respuestas HTTP 500.
- Reinicios de procesos.
- Pérdida de disponibilidad.
- Estados parciales.
- Fugas de información.
- Omisión de controles posteriores.
Durante la evaluación intenta provocar errores de forma controlada mediante:
- Tipos de datos incorrectos.
- Valores fuera de rango.
- Parámetros inesperados.
- Solicitudes incompletas.
- Estructuras JSON o XML mal formadas.
- Estados no previstos.
- Dependencias temporalmente inaccesibles cuando exista un entorno controlado.
Por ejemplo:
POST /api/profile HTTP/1.1
Content-Type: application/json
{
"age": "not-a-number"
}
o:
POST /api/login HTTP/1.1
Content-Type: application/json
{
La aparición de un 500 Internal Server Error no constituye por sí sola una vulnerabilidad.
Debes determinar si la excepción provoca alguna consecuencia relevante como:
- Revelación de información interna.
- Caída de un componente.
- Bypass de una validación.
- Alteración de un estado.
- Persistencia de una operación incompleta.
- Comportamiento diferente después del error.
Failing Open
Un sistema falla de forma abierta cuando, ante un error o condición inesperada, permite continuar una operación que debería haber sido denegada.
Este comportamiento es especialmente relevante en controles como:
- Autenticación.
- Autorización.
- MFA.
- Validaciones antifraude.
- Verificación de tokens.
- Comunicación con servicios de políticas.
- Validación de certificados.
- Comprobaciones de reputación.
- Controles de seguridad externos.
Validación
Busca funcionalidades que dependan de otro componente para tomar una decisión.
Por ejemplo, una aplicación que llama al servicio de autorización. Si el servicio de autorización devuelve:
timeout
connection refused
unexpected response
Comprueba qué decisión toma la aplicación.
En un entorno controlado puede simularse un fallo de la dependencia y verificar si la operación sensible continúa.
Desde Red Team, este tipo de fallo es especialmente valioso cuando permite convertir una degradación o error temporal en un bypass de seguridad.
Controles opcionales por error
Presta atención a patrones donde la aplicación continúa después de una excepción:
El principio esperado para controles críticos es fail securely: si la decisión no puede verificarse, el sistema debería adoptar el estado seguro.
Red Team OPSEC
No provoques indisponibilidad deliberada de servicios compartidos para comprobar un comportamiento fail-open.
Prioriza entornos de prueba, respuestas manipulables desde el cliente o fallos que puedan reproducirse sin afectar a otros sistemas.
Parámetros ausentes o inesperados
OWASP incluye fallos relacionados con parámetros ausentes y parámetros adicionales que la aplicación no maneja correctamente.
Una API puede asumir que determinados valores siempre estarán presentes:
{
"username": "sam",
"mfa": true
}
pero recibir:
{
"username": "sam"
}
Si la ausencia de mfa provoca que el backend utilice un valor inseguro por defecto, el error puede convertirse en un bypass.
Parámetros ausentes
Prueba a eliminar individualmente campos relevantes:
{
"user": "sam",
"role": "user",
"verified": true
}
por:
{
"user": "sam",
"role": "user"
}
Comprueba si la aplicación:
- Rechaza la solicitud.
- Aplica un valor seguro por defecto.
- Produce una excepción.
- Continúa utilizando un estado inseguro.
- Omite una validación.
La vulnerabilidad no está simplemente en que falte el parámetro, sino en que el sistema responda de forma insegura ante esa ausencia.
Parámetros adicionales
También añade campos no esperados:
{
"username": "sam",
"unexpected": true
}
Comprueba si:
- Son ignorados.
- Alteran lógica interna.
- Sobrescriben valores.
- Rompen validaciones.
- Producen errores que cambian el flujo.
Este comportamiento puede solaparse con Mass Assignment, pero A10 se centra en cómo la aplicación responde ante una condición inesperada.
Valores de retorno y estados no comprobados
Muchos fallos aparecen cuando una aplicación llama a una función o servicio y asume que la operación ha tenido éxito sin comprobar su resultado.
Conceptualmente:
delete_file()
continue_process()
sin validar si delete_file() devolvió:
success
permission denied
not found
error
puede provocar estados inconsistentes.
OWASP incluye específicamente debilidades relacionadas con:
- Valores de retorno no comprobados.
- Condiciones de error ignoradas.
- Status codes inesperados.
- Fallos en operaciones previas.
Validación
Busca flujos donde una operación dependa de otra:
1. Validar
2. Ejecutar
3. Confirmar
Si puedes provocar que el paso 1 falle, determina si los pasos siguientes continúan ejecutándose.
APIs y respuestas inesperadas
También pueden aparecer problemas cuando una aplicación espera:
200 OK
pero recibe:
204 No Content
404 Not Found
429 Too Many Requests
500 Internal Server Error
Y trata alguno de estos estados como si la operación hubiese sido correcta.
Nos interesa especialmente cuando puedes influir en la respuesta de una integración, callback o servicio intermediario.
Manejo incorrecto de privilegios insuficientes
OWASP incluye debilidades relacionadas con condiciones donde una operación no dispone de los privilegios o permisos necesarios y el software responde de forma incorrecta.
Por ejemplo:
Cuando una aplicación intenta leer un archivo protegido y se encuentra con una denegación de permisos (permission denied), un comportamiento defectuoso puede llevarla a utilizar una configuración por defecto insegura para sortear el bloqueo.
De igual forma, ante la incapacidad de validar los permisos correspondientes de manera adecuada, el sistema puede incurrir en un fallo abierto que simplemente permite continuar con la ejecución de la tarea.
Validación
Cuando dispongas de un entorno controlado, provoca una operación que genere una condición de permisos insuficientes.
Después comprueba si el sistema:
- Deniega la operación.
- Reintenta de forma segura.
- Utiliza un fallback inseguro.
- Continúa parcialmente.
- Expone información adicional.
- Ejecuta la operación con otro contexto inesperado.
El objetivo es determinar si el error de privilegios modifica el control de seguridad de una forma favorable al atacante.
Errores lógicos y estados imposibles
Una aplicación puede asumir que determinados estados nunca ocurrirán.
Por ejemplo:
status = pending
status = approved
status = rejected
y no disponer de comportamiento definido para:
status = null
status = unknown
status = 999
OWASP incluye debilidades como ausencia de un caso default en expresiones con múltiples condiciones.
Valores fuera de rango
Prueba entradas como:
-1
0
2147483647
2147483648
null
[]
{}
""
Cuando sean coherentes con el tipo de parámetro evaluado, pero no utilices valores arbitrarios sin contexto.
El objetivo es comprobar cómo responde el sistema cuando recibe valores situados en los límites o fuera de los estados previstos.
Estados inconsistentes
También presta atención a combinaciones que normalmente no deberían coexistir:
{
"enabled": false,
"authenticated": true
}
o:
{
"status": "cancelled",
"active": true
}
Si el cliente puede producir estas combinaciones o una secuencia de operaciones puede generarlas, determina qué decisión adopta el backend.
Agotamiento de recursos y fallos dependientes del entorno
Las condiciones excepcionales no proceden únicamente del input.
También pueden producirse cuando faltan recursos necesarios:
- Memoria.
- Espacio en disco.
- Conexiones.
- Threads o workers.
- Descriptores de archivo.
- Conexiones a base de datos.
- Respuesta de servicios externos.
- Recursos de red.
Una aplicación segura debería gestionar estas situaciones sin entrar en estados peligrosos.
Nos interesa especialmente cuando una condición de agotamiento permite:
- Provocar DoS.
- Saltarse controles.
- Forzar un fallback inseguro.
- Dejar operaciones a medias.
- Obtener información mediante mensajes de error.
Validación
Por ejemplo, una API puede aceptar una estructura con profundidad arbitraria y provocar consumo excesivo durante el parsing.
La validación debe utilizar el menor tamaño capaz de demostrar un crecimiento anómalo de consumo o tiempo.
Red Team OPSEC
Las pruebas relacionadas con recursos pueden afectar directamente a la disponibilidad.
No intentes agotar memoria, disco, workers o conexiones en producción. Utiliza límites pequeños, entornos controlados o evidencia indirecta siempre que sea posible.
Mensajes de error con información sensible
OWASP incluye dentro de A10 la generación de mensajes de error que contienen información sensible.
Durante la evaluación provoca errores controlados y revisa si la respuesta expone:
- Stack traces.
- Rutas absolutas.
- Nombres de archivos.
- Variables de entorno.
- Consultas SQL.
- Nombres de tablas.
- Versiones.
- Hostnames.
- IP internas.
- Credenciales.
- Tokens.
- Secretos.
- Fragmentos de código.
Por ejemplo:
GET /api/user?id=abc HTTP/1.1
puede devolver:
TypeError at /var/www/app/controllers/user.py:84
La información obtenida puede facilitar reconocimiento adicional o revelar directamente datos sensibles.
Código de depuración
OWASP también incluye información sensible insertada en mecanismos de debugging.
Busca:
Debug endpoints
Stack traces interactivos
Variables internas
Logs visibles desde la aplicación
Consolas de diagnóstico
Mensajes temporales de desarrollo
Este punto puede solaparse con Security Misconfiguration, especialmente cuando el modo debug ha quedado habilitado en producción.
En A10 el foco se encuentra en que el sistema responde incorrectamente cuando aparece la condición excepcional.
NULL y valores no inicializados
Las referencias nulas o valores no inicializados son otra fuente habitual de condiciones excepcionales.
Una aplicación puede asumir erróneamente que una propiedad anidada siempre está disponible, como al intentar acceder a la ruta user.profile.name, pero encontrarse con un escenario imprevisto donde user.profile es nulo.
Si el código carece de las validaciones necesarias para contemplar esta condición de ausencia, la ejecución fallará y producirá una excepción no controlada.
Desde una aplicación web, estas situaciones suelen aparecer mediante:
- Recursos inexistentes.
- Identificadores válidos pero sin datos asociados.
- Objetos parcialmente creados.
- Campos opcionales.
- Estados antiguos o migrados.
- Secuencias de peticiones no previstas.
Cleanup incorrecto después de una excepción
Una excepción puede interrumpir una operación antes de que el sistema libere o restaure correctamente los recursos utilizados.
Por ejemplo:
1. Crear archivo temporal
2. Procesarlo
3. Eliminar archivo
Si aparece una excepción en el paso 2 y el paso 3 nunca se ejecuta, pueden acumularse archivos temporales.
Otros ejemplos incluyen:
- Locks no liberados.
- Sesiones abiertas.
- Conexiones sin cerrar.
- Recursos temporales persistentes.
- Transacciones incompletas.
- Estados intermedios.