Tema 2

2. Arquitectura de APIs REST, recursos, endpoints y superficie de ataque

La seguridad de una API empieza mucho antes de validar tokens o limitar solicitudes. Empieza en su arquitectura: qué recursos expone, cómo se nombran los endpoints, qué operaciones se permiten, cómo se relacionan los componentes y qué decisiones de diseño amplían o reducen la superficie de ataque.

Objetivo Entender cómo la arquitectura condiciona la seguridad
Enfoque Diseño REST, exposición y análisis de riesgo
Resultado Identificar superficie de ataque desde la estructura

2.1 Introducción

Una API REST no es únicamente un conjunto de URLs. Es una arquitectura de interacción entre clientes, recursos, reglas de negocio, autenticación, almacenamiento y servicios auxiliares. Cada decisión sobre cómo se modela esa interacción tiene consecuencias directas sobre la seguridad.

Una arquitectura desordenada suele producir endpoints redundantes, permisos inconsistentes, respuestas demasiado amplias, rutas difíciles de gobernar y mayor exposición accidental. En cambio, una arquitectura clara facilita la protección, la observabilidad y la evolución segura del sistema.

Por eso, antes de estudiar amenazas específicas, conviene entender cómo está compuesta una API REST y qué elementos definen su superficie de ataque.

2.2 Componentes básicos de una arquitectura de API

Una API REST suele involucrar varios componentes que trabajan en conjunto. Desde el punto de vista de seguridad, cada uno puede introducir controles o riesgos.

Componente Función Riesgos de seguridad asociados
Cliente Consume la API y envía solicitudes Manipulación de parámetros, robo de tokens, automatización abusiva
Endpoint Expone un recurso o acción Exposición excesiva, métodos no controlados, enumeración
Capa de negocio Aplica reglas del sistema Errores de lógica, validaciones débiles, autorizaciones incorrectas
Base de datos Persiste y consulta información Inyecciones, acceso lateral, fuga de datos
Gateway o proxy Intermedia tráfico y aplica políticas Configuraciones inseguras, confianza excesiva, reglas inconsistentes
Servicios externos Integran pagos, identidad, mensajería u otros Dependencia de terceros, secretos expuestos, trust boundary difusa

2.3 El concepto de recurso en REST

REST organiza la API alrededor de recursos: entidades del dominio que pueden identificarse, consultarse y, en algunos casos, modificarse. Ejemplos comunes son usuarios, pedidos, productos, facturas o sesiones.

Diseñar bien los recursos ayuda a evitar APIs caóticas y reduce la necesidad de endpoints especiales difíciles de asegurar. Cuando el modelo de recursos es claro, también es más sencillo razonar sobre permisos, ownership, relaciones y límites de exposición.

Desde el punto de vista de seguridad, cada recurso plantea preguntas clave:

  • ¿Quién puede verlo?
  • ¿Quién puede crearlo o modificarlo?
  • ¿Qué atributos son públicos, privados o internos?
  • ¿Cómo se identifica de forma segura?
  • ¿Qué relaciones tiene con otros recursos?
Si el recurso está mal modelado, la autorización casi siempre termina mal modelada también.

2.4 Endpoints, rutas y operaciones

Un endpoint es la combinación práctica de una ruta, un método HTTP y el comportamiento asociado. Por ejemplo, `GET /usuarios/123` y `DELETE /usuarios/123` comparten una ruta base, pero representan riesgos distintos.

La seguridad no se decide solo por endpoint, sino por operación. Dos operaciones sobre el mismo recurso pueden requerir permisos, validaciones y niveles de monitoreo completamente diferentes.

  • Un `GET` puede exponer información sensible.
  • Un `POST` puede permitir creación masiva o inserción de datos maliciosos.
  • Un `PUT` o `PATCH` puede habilitar cambios no autorizados.
  • Un `DELETE` puede tener impacto crítico sobre integridad y disponibilidad de datos.

2.5 Rutas bien diseñadas y rutas peligrosas

Las rutas deberían reflejar recursos y relaciones del dominio, no detalles internos improvisados. Rutas consistentes ayudan a gobernar permisos, documentación y monitoreo. Rutas confusas o excesivamente custom suelen terminar exponiendo operaciones que no siguen un patrón de control uniforme.

Diseño Ejemplo Riesgo o ventaja
Claro y orientado a recursos `GET /pedidos/584` Facilita permisos por recurso y trazabilidad
Relacional y explícito `GET /usuarios/25/pedidos` Ayuda a entender ownership y contexto
Acción interna poco clara `POST /doOrderStuff` Dificulta auditoría, autorización y mantenimiento
Ruta administrativa expuesta `POST /admin/rebuild-cache` Alta criticidad si no está aislada y protegida
Ruta experimental olvidada `GET /beta/users-all` Posible fuga de datos o bypass de controles

2.6 Identificadores de recursos y riesgos asociados

Los identificadores forman parte del diseño de la API y pueden convertirse en un vector de ataque si no se acompañan de autorización adecuada. El problema no es que el ID sea predecible o no; el problema real es si la API autoriza correctamente el acceso al objeto referenciado.

Sin embargo, ciertos esquemas de identificación hacen más fácil la enumeración:

  • IDs numéricos secuenciales facilitan probar objetos cercanos.
  • UUID reducen enumeración simple, pero no reemplazan autorización.
  • Claves compuestas o referencias semánticas pueden revelar información interna.
  • IDs expuestos en URLs, logs o errores aumentan trazabilidad para atacantes.

La defensa correcta no es esconder identificadores, sino aplicar verificación de acceso objeto por objeto.

2.7 Relaciones entre recursos y herencia de permisos

Muchas APIs no exponen recursos aislados, sino relaciones: pedidos de un usuario, archivos de un proyecto, comentarios de una publicación, miembros de una organización. Esas relaciones agregan complejidad a la autorización.

Cuando una API navega relaciones jerárquicas, debe validar no solo el objeto final, sino también el contexto del camino. Por ejemplo, que un usuario pueda ver un proyecto no implica automáticamente que pueda ver todos sus documentos, ni modificar todos sus adjuntos.

Los errores de autorización suelen aparecer cuando se asume que el permiso sobre un recurso padre se propaga automáticamente a todos los hijos.

2.8 Colecciones, filtros y búsqueda

Los endpoints de listado y búsqueda suelen ser más delicados de lo que parecen. Aunque no modifiquen datos, pueden facilitar enumeración masiva, scraping, descubrimiento de estructura interna y exposición excesiva de atributos.

Ejemplos típicos de riesgo:

  • Listar recursos de todos los usuarios en lugar de solo los propios.
  • Permitir filtros por campos sensibles que revelan existencia de registros.
  • Devolver demasiados resultados sin paginación ni límites.
  • Aceptar ordenamientos o filtros que impactan rendimiento o facilitan inyección.
  • Permitir búsqueda por atributos internos no pensados para exposición pública.

2.9 Versionado y exposición histórica

El versionado ayuda a evolucionar la API sin romper clientes, pero también puede multiplicar la superficie de ataque. Cada versión mantenida es otra interfaz que requiere autenticación, autorización, monitoreo, pruebas y parches.

Los riesgos más comunes del versionado son:

  • Mantener versiones antiguas con controles más débiles.
  • Olvidar endpoints legacy expuestos detrás del gateway.
  • Tener documentación desactualizada que no coincide con producción.
  • Aplicar políticas de seguridad distintas entre versiones.

2.10 Superficie de ataque: qué incluye realmente

La superficie de ataque de una API no se reduce a la lista de rutas documentadas. Incluye todos los puntos desde los que un actor puede aprender, probar, automatizar, abusar o degradar el sistema.

En términos prácticos, la superficie de ataque incluye:

  • Endpoints públicos y privados.
  • Métodos HTTP activos aunque no estén documentados.
  • Parámetros visibles y parámetros opcionales poco usados.
  • Endpoints de healthcheck, debug, métricas o administración.
  • Documentación Swagger/OpenAPI expuesta.
  • Archivos de configuración o ejemplos accesibles.
  • Subdominios, versiones, ambientes y rutas legacy.
  • Integraciones de terceros que llaman a la API con privilegios elevados.

2.11 Factores que amplían la superficie de ataque

Hay decisiones de arquitectura que tienden a aumentar el riesgo porque expanden el número de caminos posibles o hacen más difícil aplicar controles consistentes.

  • Exponer demasiados recursos con granularidad excesiva.
  • Permitir múltiples formas equivalentes de llegar al mismo dato.
  • Publicar endpoints internos para acelerar desarrollo.
  • Duplicar lógica entre servicios o versiones.
  • Agregar excepciones frecuentes a las reglas generales de permisos.
  • Combinar operaciones administrativas con operaciones de cliente final.
  • Depender de flags o headers especiales que cambian comportamiento sin suficiente control.

2.12 Factores que reducen la superficie de ataque

Así como ciertas decisiones agrandan la exposición, otras ayudan a reducirla y hacerla más gobernable.

  • Diseñar recursos claros y consistentes.
  • Eliminar endpoints obsoletos o experimentales.
  • Separar claramente tráfico público, interno y administrativo.
  • Unificar políticas de autenticación y autorización.
  • Documentar y versionar con disciplina.
  • Aplicar principio de exposición mínima en respuestas y operaciones.
  • Mantener inventario real de rutas, consumidores y permisos.

2.13 Arquitectura monolítica, microservicios y seguridad

La estructura de despliegue también influye en la seguridad. Una API monolítica concentra lógica y exposición en un mismo bloque, mientras que una arquitectura de microservicios distribuye funciones entre varios servicios que se comunican entre sí.

Modelo Ventaja Riesgo típico
Monolito Menor dispersión de controles Gran impacto si el punto de entrada falla
Microservicios Separación funcional y escalabilidad Más trust boundaries, tokens, rutas y tráfico interno
Gateway centralizado Políticas comunes en un punto Falsa sensación de seguridad si los servicios internos no validan

Ningún modelo es seguro por sí mismo. Lo importante es que la arquitectura permita aplicar controles consistentes y verificables.

2.14 Documentación, descubrimiento y exposición

La documentación de una API es necesaria para desarrolladores y consumidores, pero también puede facilitar el reconocimiento para un atacante. Un archivo OpenAPI o Swagger bien expuesto revela rutas, parámetros, modelos, ejemplos y esquemas de autenticación.

Eso no significa que documentar sea un error. Significa que la documentación también forma parte de la superficie de ataque y debe gobernarse:

  • Definir qué documentación es pública y cuál es interna.
  • Evitar ejemplos con datos sensibles o tokens reales.
  • No exponer endpoints internos o administrativos por descuido.
  • Sincronizar siempre la documentación con el comportamiento real.

2.15 Errores frecuentes de arquitectura

  • Modelar acciones como endpoints improvisados sin criterio uniforme.
  • Exponer recursos internos que no deberían ser públicos.
  • No separar dominios de cliente final, administración e integración.
  • Publicar versiones viejas sin política de retiro.
  • Suponer que el gateway resolverá toda la seguridad.
  • No inventariar consumidores reales y privilegios asociados.
  • Acumular endpoints heredados que nadie revisa ni prueba.
La arquitectura insegura no siempre se nota en una prueba funcional. Suele hacerse visible cuando alguien intenta gobernar permisos, monitoreo, auditoría o retiro de exposición.

2.16 Qué debes recordar de este tema

  • La seguridad de una API comienza en su arquitectura, no solo en los controles añadidos después.
  • Los recursos, endpoints y relaciones definen qué debe protegerse y cómo.
  • La superficie de ataque incluye rutas, métodos, documentación, versiones y componentes auxiliares.
  • Más endpoints y más excepciones suelen significar más dificultad para controlar seguridad.
  • Una arquitectura clara, consistente y mínima facilita autorización, monitoreo y evolución segura.

2.17 Conclusión

Entender la arquitectura de una API REST es fundamental para asegurarla correctamente. Los recursos que se exponen, la forma en que se identifican, las relaciones entre ellos y los componentes que participan en cada solicitud determinan la superficie de ataque inicial sobre la que luego actuarán la autenticación, la autorización y el resto de los controles.

En el próximo tema estudiaremos HTTP, métodos, cabeceras y códigos de estado para comprender cómo el protocolo subyacente influye en el comportamiento y en los riesgos de una API REST.