OWASP API Security Top 10 (2019)
El OWASP API Security Top 10 es una lista de los riesgos más comunes (y de alto impacto) en el diseño e implementación de APIs. Su objetivo es ayudar a desarrolladores y equipos de AppSec a…
Definición
El OWASP API Security Top 10 es una lista de los riesgos más comunes (y de alto impacto) en el diseño e implementación de APIs. Su objetivo es ayudar a:
- Desarrolladores y equipos de AppSec a evitar clases recurrentes de fallos.
- Revisores/auditores a priorizar pruebas.
- Operaciones/SOC a instrumentar logging y detección de forma útil.
API (Application Programming Interface): contrato de comunicación entre componentes de software mediante requests/responses. En práctica, gran parte de los incidentes en APIs se explican por dos ejes:
- Autenticación: demostrar identidad.
- Autorización: qué puede hacer esa identidad sobre objetos/funciones.
Contexto
El RAW enfatiza por qué la seguridad en APIs es crítica:
- Las APIs son fundamentales para aplicaciones empresariales modernas.
- Históricamente han existido brechas relacionadas con APIs y abuso de endpoints (ejemplos citados en el RAW: casos públicos sobre datos y APIs).
- Una API expone capacidades “directas” del backend; si el control de acceso y el filtrado fallan, el impacto suele ser masivo (data exposure, account takeover, DoS, etc.).
Desarrollo (MIT-style)
0) Fundamentos mínimos para evaluar una API
0.1 Autenticación vs autorización
- Autenticación: login, tokens, MFA, sesiones, gestión de credenciales.
- Autorización:
- A nivel de objeto: ¿puedo acceder/modificar este recurso concreto?
- A nivel de función: ¿puedo ejecutar esta acción/endpoint (admin vs user)?
0.2 Qué hay que mirar siempre en una API
- Inventario de endpoints (incluye versiones antiguas).
- Modelo de identidad (users/roles/claims) y cómo se valida.
- Modelo de objetos (IDs, relaciones, ownership).
- Validación de entrada + uso de ORM/queries parametrizadas.
- Respuestas (solo datos necesarios; no confiar en el front-end).
- Controles de disponibilidad: rate limiting, tamaños máximos, cuotas.
- Configuración: CORS, errores, debug, secrets, WAF.
- Logging: eventos de auth, denegaciones, errores de validación, cambios sensibles.
API1 — Broken Object Level Authorization (BOLA / IDOR)
Qué es: el backend no valida correctamente que el usuario tenga permiso sobre el objeto referenciado por un ID.
Cómo sucede (patrones)
- El endpoint usa IDs en ruta/query (p.ej.
/users/{id}) y el servidor solo valida “está autenticado”, pero no valida ownership o ACL del objeto.
Impacto
- Lectura/modificación/borrado de datos de otros usuarios.
- Escalada horizontal (misma función, otro objeto).
Cómo probar (manual)
- Cambiar el
{id}por otro (secuencial o no) y validar si el backend bloquea. - Probar con roles distintos (usuario normal vs admin).
Mitigación (práctica)
- Authorization server-side por objeto (ownership/ACL) en cada operación.
- Deny by default; solo permitir acciones explícitas.
- IDs no predecibles ayudan, pero no sustituyen autorización.
API2 — Broken User Authentication (BUA)
Qué es: autenticación implementada de forma incorrecta (validación débil, tokens inseguros, MFA ausente, brute force sin protección).
Impacto
- Account takeover, abuso de sesión y acceso a datos.
Cómo probar
- Validación correcta de credenciales; evitar lógica “email-only”.
- Rate limiting/lockout/captcha donde aplique.
- Revisión de exposición: credenciales en URLs/logs, tokens reutilizables, sesiones demasiado largas.
Mitigación (práctica)
- MFA cuando sea posible.
- Bloqueo/limitación ante intentos fallidos.
- Hash de contraseñas robusto; no guardar plaintext.
API3 — Excessive Data Exposure
Qué es: la API devuelve más atributos de los necesarios (y deja el filtrado al front-end).
Impacto
- Exposición de PII, tokens, metadatos sensibles.
Cómo probar
- Revisar responses en proxy/API client y comparar con lo estrictamente necesario para el caso de uso.
Mitigación
- Serialización explícita por endpoint (DTOs/view models) y minimización de datos.
- Tests automatizados para evitar regresiones (campos sensibles).
API4 — Lack of Resources & Rate Limiting
Qué es: falta de límites de frecuencia, tamaño o coste computacional → facilita DoS/abuso.
Impacto
- Indisponibilidad, costes (p.ej. OTP/email), degradación.
Cómo probar
- Reintentos rápidos, límites por IP/usuario/token.
- Tamaños máximos de payload/arrays/strings.
Mitigación
- Rate limiting + cuotas + backoff.
- Protecciones anti-bot/captcha en flujos sensibles.
API5 — Broken Function Level Authorization (BFLA)
Qué es: usuarios con bajo privilegio pueden ejecutar funciones reservadas (admin endpoints) por controles insuficientes.
Impacto
- Escalada vertical, acceso a paneles/funciones administrativas.
Cómo probar
- Repetir acciones admin con usuario estándar.
- Verificar que el backend usa roles/claims reales y no flags manipulables.
Mitigación
- Control de acceso por rol/función en backend.
- Deny by default; revisiones de endpoints por rol.
API6 — Mass Assignment
Qué es: binding automático de campos del request a objetos del servidor permite escribir campos que no deberían ser modificables.
Impacto
- Escalada de privilegios o manipulación de atributos (p.ej.
isAdmin,credit).
Cómo probar
- Enviar campos “extra” no presentes en UI/documentación y observar si se persisten.
Mitigación
- Allowlist de campos (p.ej.
fillable) y/o denylist (guarded) según framework. - Validación server-side (no confiar en el cliente).
API7 — Security Misconfiguration
Qué es: defaults inseguros o configuraciones incorrectas (debug, CORS, errores verbosos, recursos públicos).
Impacto
- Filtración de información, bypass de controles, ataque guiado por stack traces.
Cómo probar
- Revisar respuestas de error (¿devuelve stack trace?).
- Revisar CORS y exposición de documentación/endpoints.
Mitigación
- Hardening de entorno (prod ≠ debug), gestión de errores segura.
- Revisar CORS contra necesidad real (principio de mínimo privilegio).
Ver también: Security Misconfiguration (OWASP Top 10 2025 - AS02).
API8 — Injection
Qué es: input no confiable llega a intérpretes (SQL/NoSQL/OS/XML, etc.).
Impacto
- Exfiltración/alteración, DoS, account takeover.
Cómo probar
- Revisar superficies de entrada (query/body/headers) y sinks (queries, templates, comandos).
Mitigación
- Queries parametrizadas/ORM seguro.
- Validación y sanitización por contexto.
- WAF como defensa complementaria (no única).
Relacionado: SQL Injection, Injection (OWASP Top 10 2025 - A05).
API9 — Improper Assets Management
Qué es: endpoints/versiones antiguas quedan expuestas (v1/v2), documentación incompleta, inventario débil.
Impacto
- Acceso a rutas legacy sin parches; fuga de datos; bypass de controles nuevos.
Cómo probar
- Buscar versiones antiguas (
/v1/,/old/, subdominios) y comparar controles.
Mitigación
- Inventario y ciclo de vida (SDLC) para deprecar y retirar endpoints.
- Segregar entornos (dev/qa/prod) y bloquear legacy a nivel de red.
API10 — Insufficient Logging & Monitoring
Qué es: falta de logs y telemetría a nivel de API impide detectar/investigar ataques.
Impacto
- No atribución, detección tardía, falta de evidencia.
Qué loggear (mínimo útil)
- AuthN/AuthZ: logins, denegaciones, intentos fallidos.
- Cambios sensibles: roles, tokens/keys, password resets.
- Errores de validación y patrones anómalos (rate-limit hits, spikes).
Mitigación
- Centralizar y correlacionar logs (SIEM si aplica) + alertas accionables.
- Tratar logs como datos sensibles (integridad/retención).
Relacionado: Security Auditing and Monitoring, Security Logging and Monitoring Failures (OWASP Top 10 2025 - A09).
Ejemplos
- Mapear endpoints y probar control de acceso objeto/función (BOLA/BFLA) con un API client (p.ej., Talend API Tester en el laboratorio del RAW).
- Revisar respuestas para detectar exceso de datos (API3) usando un proxy.
- Verificar límites de rate/OTP (API4) en flujos sensibles.
Pitfalls / Errores comunes
- “Si el front-end no lo muestra, no existe” → falso: el atacante ve la respuesta completa.
- Creer que UUIDs/IDs aleatorios sustituyen la autorización.
- Confiar en flags del cliente (p.ej.,
isAdmin) en lugar de roles server-side. - No tener inventario/versionado: endpoints legacy sobreviven años.
- Logging solo de infraestructura (sin contexto de API) y sin retención/integridad.
Diagrama
flowchart LR U[Cliente] -->|request| API[API Gateway / Backend] API --> A[AuthN] A --> Z[AuthZ\n(objeto + función)] Z --> V[Validación de entrada] V --> L[Logging\n(eventos clave)] V --> DB[(Datos/Servicios)] DB --> API L --> SIEM[(SIEM / Logging central)]
Referencias
- TryHackMe — OWASP API Security Top 10 (parte 1): https://tryhackme.com/jr/owaspapisecuritytop105w
- TryHackMe — OWASP API Security Top 10 (parte 2): https://tryhackme.com/room/owaspapisecuritytop10d0
- Twitter Privacy — issue affecting anonymous accounts: https://privacy.twitter.com/en/blog/2022/an-issue-affecting-some-anonymous-accounts
- MDN — CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
- Laravel — Eloquent (mass assignment fillable/guarded): https://laravel.com/docs/9.x/eloquent#inserts
- TryHackMe — SQL Injection: https://tryhackme.com/room/sqlinjectionlm
- TryHackMe — Secure SDLC: https://tryhackme.com/room/securesdlc
- TryHackMe — Defensive Security / SIEM intro: https://tryhackme.com/room/defensivesecurity