OWASP API Security Top 10 (2023): los diez riesgos de las APIs explicados y cómo probarlos

Por Kike Gandia · Co-Fundador y CEO, OSCP

El OWASP API Security Top 10 es la lista de referencia de los riesgos de seguridad más críticos en APIs, publicada por la fundación OWASP. Su edición vigente es la de 2023, y la usan equipos de desarrollo, auditores y clientes como vocabulario común para hablar de seguridad de APIs. En esta guía tienes los diez riesgos explicados en español con ejemplos de peticiones reales, qué cambió respecto a la edición de 2019, cuáles detecta un escáner y cuáles solo una prueba manual, y cómo usar la lista en el día a día del desarrollo sin confundirla con un estándar de certificación.

Qué es el OWASP API Security Top 10 y por qué existe aparte del Top 10 web

OWASP (Open Worldwide Application Security Project) es una fundación sin ánimo de lucro conocida sobre todo por el OWASP Top 10 de aplicaciones web. En 2019 su proyecto de seguridad de APIs publicó una lista específica, porque las APIs fallan de forma distinta a una web tradicional:

  • Exponen objetos y funciones directamente. Una web renderiza en el servidor lo que el usuario puede ver; una API devuelve datos y deja que el cliente —una SPA, una app móvil, otro servicio— decida qué mostrar. Si la API devuelve de más o no comprueba de quién es cada objeto, no hay interfaz que lo tape.
  • La autorización se dispersa. Cada endpoint, cada método y a veces cada campo necesitan su propia comprobación. Basta con olvidar una.
  • Hay más superficie y menos visibilidad. Versiones antiguas que siguen activas, endpoints internos publicados, APIs de partners y microservicios que se llaman entre sí.
  • Las herramientas clásicas ven poco. Un escáner web encuentra inyecciones y cabeceras ausentes, pero no sabe que la factura 1043 pertenece a otro cliente.

La edición vigente es la de 2023, publicada en versión estable en junio de ese año. Es un documento de concienciación: ordena los riesgos más frecuentes y graves, explica cómo se explotan y cómo prevenirlos. No es un estándar con requisitos verificables; para eso OWASP mantiene el ASVS (Application Security Verification Standard), cuya versión 5.0 se publicó en 2025.

Los diez riesgos de un vistazo

CódigoRiesgoQué es en una fraseEjemplo
API1:2023Broken Object Level Authorization (BOLA)La API no comprueba que el objeto pedido pertenece a quien lo pideCambiar el identificador de una factura en la URL devuelve la de otro cliente
API2:2023Broken AuthenticationLos mecanismos de autenticación se pueden saltar o abusarLogin sin límite de intentos, tokens que no se validan o no caducan
API3:2023Broken Object Property Level AuthorizationLa API expone o deja modificar propiedades que el usuario no deberíaEnviar "role": "admin" en el cuerpo de una actualización de perfil y que se guarde
API4:2023Unrestricted Resource ConsumptionSin límites de peticiones, tamaño o costeUn endpoint que envía SMS sin límite dispara la factura del proveedor
API5:2023Broken Function Level Authorization (BFLA)Un usuario normal puede llamar a funciones de administraciónDELETE /api/users/77 funciona con un token de usuario estándar
API6:2023Unrestricted Access to Sensitive Business FlowsUn flujo de negocio legítimo se puede automatizar de forma abusivaBots que compran todo el stock de un lanzamiento o crean miles de cuentas para cobrar bonos
API7:2023Server Side Request Forgery (SSRF)La API descarga una URL que controla el atacanteUn campo «importar desde URL» que acaba leyendo el servicio de metadatos del cloud
API8:2023Security MisconfigurationConfiguración insegura en cualquier capaCORS que acepta cualquier origen con credenciales, errores con trazas internas
API9:2023Improper Inventory ManagementNo saber qué APIs, versiones y entornos hay expuestosLa /v1 sin los controles de la /v2 sigue activa en producción
API10:2023Unsafe Consumption of APIsConfiar ciegamente en los datos de APIs de tercerosGuardar sin validar lo que devuelve un proveedor y ejecutar una inyección almacenada

Tres de los diez (API1, API3 y API5) son fallos de autorización, cada uno a un nivel distinto: el objeto, la propiedad y la función. No es casualidad: es lo que más se rompe en una API y lo que menos ven las herramientas automáticas.

Qué cambió respecto a la edición de 2019

Las notas de la edición de 2023 destacan cuatro cambios: la fusión de la exposición excesiva de datos y la asignación masiva en una sola categoría, más peso del consumo de recursos y dos categorías nuevas, la de flujos de negocio sensibles y la de consumo inseguro de APIs. Comparando las dos listas completas se ven el resto de movimientos:

Edición 2019Edición 2023Qué pasó
API1 Broken Object Level AuthorizationAPI1 Broken Object Level AuthorizationSe mantiene en el primer puesto
API2 Broken User AuthenticationAPI2 Broken AuthenticationSe amplía a la autenticación de cualquier cliente, no solo usuarios
API3 Excessive Data Exposure y API6 Mass AssignmentAPI3 Broken Object Property Level AuthorizationSe fusionan: las dos son autorización a nivel de propiedad, una al leer y otra al escribir
API4 Lack of Resources and Rate LimitingAPI4 Unrestricted Resource ConsumptionSe amplía al coste: memoria, almacenamiento y facturas de servicios de terceros
API5 Broken Function Level AuthorizationAPI5 Broken Function Level AuthorizationSe mantiene
—API6 Unrestricted Access to Sensitive Business FlowsNuevo: abuso automatizado de flujos de negocio legítimos
—API7 Server Side Request ForgeryNuevo como categoría propia
API7 Security MisconfigurationAPI8 Security MisconfigurationSe mantiene
API9 Improper Assets ManagementAPI9 Improper Inventory ManagementCambia de nombre y añade los flujos de datos hacia terceros
—API10 Unsafe Consumption of APIsNuevo: el riesgo de confiar en APIs ajenas
API8 Injection—Sale de la lista como categoría propia; el riesgo sigue existiendo
API10 Insufficient Logging and Monitoring—Sale de la lista

Que la inyección ya no tenga categoría propia no significa que haya dejado de importar: sigue siendo un fallo grave, cubierto en el OWASP Top 10 de aplicaciones web y en el ASVS, y cualquier pentest de APIs la prueba.

Autorización: BOLA, propiedades y funciones (API1, API3 y API5)

Los tres riesgos de autorización responden a la misma pregunta —«¿puede este usuario hacer esto?»— a tres niveles distintos:

  • API1, el objeto. GET /api/v1/facturas/1043 devuelve la factura aunque pertenezca a otro cliente, porque la API comprueba que el token es válido pero no que la factura es suya. Es el fallo más frecuente y el más dañino en APIs, y no se arregla con identificadores aleatorios: un UUID solo dificulta adivinar, no autoriza. Lo tratamos en profundidad en la guía sobre BOLA e IDOR.
  • API3, la propiedad. Tiene dos caras. Al leer, la API devuelve el objeto completo —con el hash de la contraseña, el coste interno o el correo de otros usuarios— y confía en que el cliente solo muestre lo necesario. Al escribir, acepta cualquier campo que llegue en el cuerpo: si el endpoint de actualizar perfil enlaza el JSON directamente con el modelo, un usuario puede enviar "isAdmin": true o "plan": "enterprise" y que se guarde. Es el antiguo mass assignment.
  • API5, la función. Un usuario estándar llama a un endpoint de administración —/api/admin/users, un método DELETE, una exportación masiva— y funciona, porque la ruta solo estaba «escondida» en la interfaz. Las APIs con roles complejos, varios tipos de usuario o endpoints de partners son las más propensas.

La prevención es común a los tres: una capa de autorización centralizada que se aplique en cada petición, sobre el objeto, el campo y la acción; listas explícitas de campos que se devuelven y que se aceptan, en lugar de serializar el modelo completo; y denegar por defecto. Y la detección también: hace falta probar con al menos dos usuarios de cada rol y comparar lo que cada uno consigue.

Autenticación: API2 y el abuso de tokens

API2 agrupa todo lo que permite a un atacante hacerse pasar por otro usuario o por otro sistema. En APIs aparece sobre todo así:

  • Endpoints sensibles sin protección contra fuerza bruta: login, verificación de códigos de un solo uso, recuperación de contraseña. Un código de seis dígitos sin límite de intentos se prueba entero.
  • Tokens mal validados: JWT que se aceptan sin comprobar la firma, con el algoritmo «none», con una clave débil o sin verificar la caducidad, el emisor o la audiencia.
  • Credenciales en el sitio equivocado: claves de API dentro de una app móvil o de un bundle de JavaScript, tokens en la URL que acaban en logs y cabeceras Referer.
  • Flujos de cambio de credenciales sin reautenticación: cambiar el correo o la contraseña sin pedir la actual permite a quien roba una sesión quedarse con la cuenta.
  • Autenticación entre servicios débil: microservicios que confían en cualquier petición que venga de la red interna.

Los detalles de JWT y de OAuth 2.0 —qué validar en cada token y qué errores de los flujos de autorización se explotan— están en la guía de seguridad de JWT y OAuth en APIs.

Consumo y abuso de negocio: API4 y API6

Estos dos riesgos no requieren ningún fallo de código en sentido clásico: la API hace lo que debe, pero sin límites.

API4, consumo sin restricciones. Cada petición consume algo: CPU, memoria, ancho de banda, almacenamiento o dinero cuando la API llama a un servicio de pago por uso. Los escenarios típicos:

  • Paginación sin máximo: ?limit=1000000 devuelve la base de datos entera en una respuesta.
  • Subidas sin tamaño máximo o procesamiento de imágenes sin límite de dimensiones.
  • Endpoints que envían SMS, correos o llamadas a una API de IA de pago sin cuota por usuario: el ataque no tumba el servicio, te llega en la factura.
  • Consultas GraphQL anidadas o por lotes que multiplican el trabajo del servidor en una sola petición.

API6, acceso sin restricciones a flujos de negocio sensibles. El flujo es legítimo, pero automatizado a escala hace daño: comprar todo el stock de un producto limitado para revenderlo, reservar y no pagar para bloquear la disponibilidad, crear miles de cuentas para cobrar el bono de bienvenida o publicar spam con cuentas recién creadas. La defensa no es un rate limit genérico, sino entender qué flujos son sensibles para el negocio y protegerlos con controles específicos: detección de automatización, límites por cuenta y dispositivo, verificación adicional en los pasos críticos.

SSRF y APIs de terceros: API7 y API10

API7, Server Side Request Forgery. Cualquier funcionalidad en la que la API descarga algo a partir de una URL que proporciona el usuario es candidata: importar un fichero desde una URL, previsualizar enlaces, registrar un webhook, generar un PDF a partir de HTML, obtener el avatar de una URL. Si el servidor no restringe a dónde puede conectarse, el atacante le pide recursos internos que desde fuera no alcanzaría: paneles de administración, bases de datos sin autenticación en la red interna o el servicio de metadatos del proveedor cloud, que en algunas configuraciones entrega credenciales temporales del rol de la máquina. Por eso un SSRF en una API desplegada en cloud es a menudo el primer eslabón de una cadena que termina en los datos. Defensa: listas de destinos permitidos, bloquear rangos internos y de metadatos tras resolver el DNS, no seguir redirecciones a ciegas y usar la versión del servicio de metadatos que exige sesión.

API10, consumo inseguro de APIs. Los equipos suelen validar con cuidado lo que llega de los usuarios y confiar sin más en lo que devuelve un proveedor: una API de pagos, de geolocalización, de enriquecimiento de datos. Si ese proveedor está comprometido o devuelve algo inesperado, los datos entran sin validar en tu sistema. Ejemplos: seguir redirecciones de la API externa sin comprobar el destino, guardar en la base de datos texto que luego se interpreta como HTML o SQL, o no tener límites de tiempo ni de tamaño en la respuesta. Defensa: tratar las respuestas de terceros como entrada no confiable, validar contra un esquema, usar TLS y fijar qué destinos se aceptan.

Configuración e inventario: API8 y API9

API8, configuración insegura. Es la categoría más amplia, porque cubre toda la pila: el servidor, el framework, el API gateway, el balanceador y el proveedor cloud. Los hallazgos más repetidos:

  • CORS que refleja cualquier origen y permite credenciales, lo que deja a cualquier web leer las respuestas autenticadas del usuario.
  • Mensajes de error con trazas, versiones o consultas SQL.
  • Métodos HTTP que no deberían estar habilitados, o rutas de depuración y documentación interactiva expuestas en producción.
  • TLS ausente o mal configurado en algún tramo, por ejemplo entre el gateway y el backend.
  • Cabeceras de caché que permiten guardar respuestas con datos personales en un proxy intermedio.

API9, gestión inadecuada del inventario. No se puede proteger lo que no se sabe que existe. Los casos típicos son la versión antigua de la API que se mantuvo «unas semanas» para clientes que no han migrado y sigue viva sin los controles nuevos, el entorno de staging accesible desde internet con datos reales, endpoints sin documentar que solo usa la app móvil o flujos de datos hacia terceros que nadie ha registrado. Defensa: una especificación OpenAPI que sea la fuente de verdad, generada o validada en el pipeline; un inventario de versiones con fecha de retirada; y descubrimiento periódico de lo que realmente está expuesto, comparándolo con lo documentado. En un pentest, un endpoint vivo que no aparece en la documentación ya es un hallazgo.

Cómo probar cada riesgo: escáner frente a prueba manual

Los escáneres de APIs aportan valor, sobre todo en configuración e inyecciones, pero la mitad de la lista depende de entender quién es cada usuario y qué debería poder hacer. Así se reparte en la práctica:

RiesgoLo detecta bien un escánerRequiere prueba manual
API1 BOLAMuy poco: no sabe a quién pertenece cada objetoSí: dos o más cuentas cruzando identificadores en cada endpoint
API2 AutenticaciónEn parte: ausencia de límites, tokens sin firmaSí: flujos de recuperación, MFA, validación de tokens y sesiones
API3 PropiedadesEn parte: campos sensibles evidentes en respuestasSí: qué campos acepta cada endpoint al escribir y según qué rol
API4 ConsumoEn parte: ausencia de rate limitingSí: límites de negocio, paginación, coste por petición
API5 FuncionesPocoSí: matriz de roles contra endpoints y métodos
API6 Flujos de negocioNoSí: requiere entender el negocio
API7 SSRFEn parte, con payloads de colaboración externaSí: confirmar qué alcanza desde dentro
API8 ConfiguraciónBien: CORS, cabeceras, TLS, erroresPara confirmar el impacto real
API9 InventarioEn parte: descubrimiento de rutas y versionesSí: comparar lo expuesto con lo documentado
API10 TercerosNoSí: revisión de integraciones y, mejor aún, del código

La conclusión práctica: un escaneo automático en el pipeline es útil y barato para API8 y parte de API2, API4 y API9; los fallos de autorización y de lógica, que son los que más datos filtran, necesitan una prueba manual con varios usuarios y roles, idealmente con la especificación OpenAPI o una colección de Postman como punto de partida.

Cómo usar el Top 10 en el ciclo de desarrollo

Usado bien, el Top 10 es una lista de comprobación para cada fase, no solo un informe que se revisa una vez al año:

  • Diseño: en cada endpoint nuevo, tres preguntas antes de escribir código: de quién es el objeto, qué campos puede leer y escribir cada rol y qué límite de uso tiene.
  • Desarrollo: autorización centralizada en lugar de comprobaciones repartidas por los controladores; DTO o esquemas explícitos de entrada y salida; límites de paginación y tamaño por defecto.
  • Pruebas automáticas: tests de autorización con dos usuarios —«el usuario A no puede leer el objeto de B»— en el pipeline de integración continua. Es la forma más barata de evitar que un BOLA corregido vuelva en el siguiente sprint.
  • Inventario: la especificación OpenAPI como fuente de verdad, con alertas cuando aparece en producción un endpoint que no está en ella.
  • Verificación independiente: un pentest de la API antes de lanzamientos importantes y tras cambios en autenticación, roles o integraciones.

Y dos límites que conviene tener claros. El Top 10 no es exhaustivo: deja fuera riesgos que en tu API pueden ser críticos, y no sustituye a un modelado de amenazas propio. Tampoco es un estándar de cumplimiento: si un cliente o un auditor pide requisitos verificables, el documento de referencia es el ASVS de OWASP.

FAQ

¿En qué se diferencia del OWASP Top 10 de aplicaciones web?

El Top 10 web cubre los riesgos de las aplicaciones web en general, como las inyecciones o los fallos criptográficos. El de APIs se centra en lo que falla cuando la aplicación expone datos y funciones a través de una interfaz programática: sobre todo autorización a nivel de objeto, propiedad y función, consumo de recursos, inventario y confianza en APIs de terceros. Para una aplicación con API conviene usar los dos.

¿Cuál es la versión vigente del OWASP API Security Top 10?

La edición de 2023, que sustituyó a la primera de 2019. Antes de usar la lista como referencia en un contrato o un informe, comprueba en la web del proyecto de OWASP si se ha publicado una edición posterior.

¿Un escáner automático de APIs cubre el OWASP API Top 10?

Solo en parte. Detecta bien configuraciones inseguras, ausencia de límites y algunos problemas de autenticación, pero apenas ve los fallos de autorización (BOLA, propiedades y funciones) ni el abuso de flujos de negocio, porque no sabe a quién pertenece cada objeto ni qué debería poder hacer cada rol. Esos requieren una prueba manual con varios usuarios.

¿Cumplir el OWASP API Top 10 es un requisito legal o de certificación?

No. Es un documento de concienciación, no una norma ni un estándar certificable. Aun así, clientes, auditores y cuestionarios de seguridad lo usan a menudo como referencia de lo que debe cubrir un pentest de APIs. Si necesitas requisitos verificables, el estándar de OWASP es el ASVS.

¿Se aplica también a GraphQL, gRPC o WebSockets?

Sí: los riesgos son independientes del protocolo. Cambia cómo se manifiestan. En GraphQL, por ejemplo, la autorización a nivel de campo y las consultas anidadas que agotan el servidor son especialmente relevantes; lo explicamos en la guía de GraphQL pentesting.

Nunca hemos auditado nuestra API: ¿por dónde empezamos?

Por el inventario y la autorización. Primero, saber qué endpoints y versiones están realmente expuestos y compararlo con la documentación. Después, probar con dos usuarios de cada rol si uno puede leer, modificar o borrar lo del otro. Esas dos comprobaciones cubren los riesgos que más datos filtran en la práctica.

Servicio relacionado

pentesting de APIs REST y GraphQL

Contenido relacionado

Fuentes

Auditar mi API contra el OWASP API Top 10