Tema 15

15. APIs inseguras, validación de entradas y exposición de datos

Las APIs se convirtieron en el núcleo de muchas aplicaciones modernas, pero también ampliaron la superficie de ataque. Cuando un endpoint acepta demasiada entrada, devuelve más datos de los necesarios o confía demasiado en el cliente, el atacante encuentra una interfaz poderosa, automatizable y muchas veces más silenciosa que la web tradicional.

Objetivo Entender cómo una API amplía o reduce el riesgo del sistema
Enfoque Entradas, respuestas, endpoints y abuso automatizable
Resultado Diseñar y evaluar APIs con criterio de mínimo dato y mínimo privilegio

15.1 Introducción

Las APIs son hoy la columna vertebral de aplicaciones web, móviles, integraciones con terceros, paneles administrativos, microservicios y automatizaciones internas. Desde el punto de vista del negocio, esto trae flexibilidad y escalabilidad. Desde seguridad, también trae una realidad clara: muchas decisiones sensibles ya no pasan por la interfaz visual, sino por endpoints capaces de aceptar, procesar y devolver información estructurada a gran velocidad.

Una API insegura puede exponer más datos de los necesarios, aceptar campos que nunca debió aceptar, permitir acceso indebido a objetos, facilitar automatización masiva o dejar visible una lógica de negocio que la interfaz tradicional ocultaba parcialmente.

En este tema nos centraremos en tres ejes complementarios: APIs inseguras, validación de entradas y exposición excesiva de datos, porque en la práctica suelen combinarse y potenciarse entre sí.

15.2 Qué cambia con una API respecto de una interfaz tradicional

En una aplicación web clásica, parte de la lógica visible está mediada por formularios, botones y navegación. En una API, el cliente interactúa más directamente con el backend. Eso no hace a la API insegura por definición, pero sí cambia la relación entre usuario y superficie de ataque.

Las APIs suelen ser:

  • Más fáciles de automatizar.
  • Más explícitas en parámetros y estructuras.
  • Menos dependientes de controles visuales.
  • Más ricas en operaciones sobre objetos concretos.
  • Más utilizadas por múltiples tipos de clientes con comportamientos distintos.
Una API no tiene "botones ocultos". Si el endpoint existe y acepta algo que no debería, el atacante puede probarlo directamente.

15.3 Qué hace insegura a una API

Una API se vuelve insegura cuando permite más de lo necesario, valida menos de lo debido o expone datos y acciones con exceso de confianza hacia el cliente.

Esto puede verse en:

  • Endpoints con autorización débil o inconsistente.
  • Respuestas con demasiados campos.
  • Entradas excesivamente flexibles.
  • Operaciones masivas sin límites ni contexto.
  • Falta de validación semántica de negocio.
  • Errores detallados o comportamientos observables que facilitan abuso.

15.4 Validación de entradas: más que formato

Validar entradas en una API no significa solo revisar si el JSON es sintácticamente correcto o si el correo tiene una arroba. La validación real debe responder también si el dato tiene sentido dentro del negocio, del rol del usuario y del estado del sistema.

Por eso conviene pensar tres niveles:

  • Validación sintáctica: tipo, formato, longitud, estructura.
  • Validación semántica: si el dato tiene sentido para el dominio.
  • Validación contextual: si ese usuario, en ese momento, puede realmente enviar ese dato o ejecutar esa operación.

15.5 El peligro de aceptar más campos de los necesarios

Uno de los errores más comunes en APIs es aceptar objetos completos del cliente y mapearlos casi automáticamente a entidades internas. Esto puede permitir que el atacante envíe campos que el frontend normal nunca mostraría, pero que el backend igual procesa.

Ese patrón abre problemas como:

  • Cambios de atributos no previstos.
  • Asignación de roles o estados indebidos.
  • Modificación de relaciones internas.
  • Actualización de propiedades sensibles o administrativas.

Este tipo de riesgo suele vincularse al concepto de mass assignment.

15.6 Exposición excesiva de datos

No toda brecha ocurre porque el atacante "rompe" algo. A veces la API simplemente devuelve demasiado. Campos internos, estados administrativos, identificadores, datos de otros usuarios o información sensible pueden quedar expuestos por respuestas innecesariamente ricas.

Problemas típicos:

  • Devolver objetos completos cuando solo hacen falta unos pocos campos.
  • Exponer atributos internos del modelo.
  • Enviar información sensible que la interfaz luego decide no mostrar.
  • Incluir datos de contexto, auditoría o backoffice en respuestas de cliente común.

15.7 El frontend no es un control de seguridad

Un error recurrente es pensar que si el frontend no usa cierto campo o no muestra cierto dato, entonces ya está protegido. En una API eso es especialmente falso. El cliente puede ser manipulado, reemplazado o reimplementado por completo por el atacante.

Por eso la API debe ser segura por sí misma. Debe aceptar solo lo necesario y responder solo con lo permitido, sin confiar en que otro cliente "hará lo correcto" con esos datos.

15.8 Acceso a nivel de objeto en APIs

Las APIs suelen trabajar intensamente con objetos identificables: usuarios, pedidos, facturas, documentos, tickets, mensajes, recursos de negocio. Si la autorización por objeto está mal diseñada, la API se vuelve una vía ideal para exfiltrar o modificar información ajena.

Preguntas críticas:

  • ¿Este usuario puede leer este objeto?
  • ¿Puede modificarlo o eliminarlo?
  • ¿Puede listar objetos de otros contextos?
  • ¿La API verifica pertenencia real o solo autenticación general?

15.9 Operaciones masivas y endpoints demasiado poderosos

Otra fuente de riesgo en APIs son los endpoints que permiten operar sobre muchos objetos o estados con muy poca fricción. Si no existen límites, segmentación o controles contextuales, el abuso puede escalar rápidamente.

Ejemplos:

  • Exportaciones completas sin restricciones.
  • Actualizaciones masivas no justificadas.
  • Búsquedas muy flexibles sobre datos sensibles.
  • Operaciones administrativas expuestas a roles demasiado amplios.

15.10 APIs y automatización de abuso

La estructura predecible de una API facilita automatización. Si los endpoints aceptan demasiada entrada o responden con información útil para el atacante, este puede iterar, enumerar objetos, exfiltrar datos o probar combinaciones a gran velocidad.

Por eso la seguridad de API no puede limitarse a validar que "cada request parece correcta". También debe considerar frecuencia, volumen, patrones de abuso y comportamiento agregado.

15.11 Validación por esquema no alcanza

Definir un esquema JSON o tipado ayuda mucho, pero no resuelve por sí solo los problemas de seguridad. Un payload puede cumplir perfectamente la estructura esperada y aun así ser abusivo o improcedente según el negocio.

Ejemplo conceptual:

  • El campo existe, tiene el tipo correcto y pasa el esquema.
  • Pero ese usuario no debería poder enviarlo.
  • O ese valor no debería permitirse en ese estado del flujo.

La seguridad necesita validación de negocio, no solo de formato.

15.12 Versionado y deuda de seguridad en APIs

Muchas organizaciones mantienen varias versiones de una API por compatibilidad. Esto puede introducir deuda de seguridad si endpoints antiguos, menos restringidos o mal documentados siguen disponibles sin revisión suficiente.

El problema no es solo técnico, sino de gobernanza: cada versión activa amplía la superficie que debe protegerse, monitorearse y auditarse.

15.13 Errores de diseño frecuentes

  • Exponer modelos internos completos en vez de respuestas mínimas.
  • Aceptar campos no whitelistados o no documentados.
  • Confiar en el cliente para decidir qué atributos deben cambiar.
  • No aplicar autorización por objeto en cada operación.
  • Diseñar endpoints demasiado genéricos y poderosos.
  • Permitir filtros o búsquedas muy amplias sin límites contextuales.

15.14 Señales que justifican revisión

  • Las respuestas contienen muchos campos que el cliente no usa.
  • La API acepta objetos completos para crear o actualizar recursos.
  • Existen endpoints de exportación o listado masivo sensibles.
  • No hay distinción clara entre datos públicos, privados y administrativos.
  • Los errores devuelven detalle excesivo sobre estructuras internas.
  • Es posible modificar identificadores, estados o roles desde el payload.

15.15 Respuestas mínimas y principio de mínimo dato

Una práctica muy útil es diseñar respuestas pensadas para el caso de uso real en lugar de exponer entidades completas. Esto reduce exposición accidental, simplifica auditoría y limita impacto si un endpoint queda accesible más allá de lo previsto.

El principio puede resumirse así: devolver solo lo que ese cliente, en ese contexto, realmente necesita.

15.16 Entrada mínima y contratos explícitos

Del mismo modo, conviene que cada endpoint acepte solo los campos estrictamente necesarios. Cuanto más abierto sea el contrato, más difícil será razonar sobre seguridad y más oportunidades habrá para abuso.

Un contrato explícito ayuda a:

  • Reducir superficie de ataque.
  • Evitar mass assignment.
  • Hacer más visible qué decisiones toma realmente el backend.
  • Mejorar trazabilidad y revisión de cambios.

15.17 Rate limiting y protección operacional

Las APIs no solo deben ser correctas por request, sino también resistentes a abuso sostenido. Rate limiting, cuotas, segmentación por rol y control de patrones ayudan a contener scraping, enumeración y exfiltración masiva.

Esto no reemplaza la autorización ni la validación, pero sí limita el poder operativo del atacante cuando encuentra una superficie utilizable.

15.18 Buenas prácticas de prevención

  • Diseñar endpoints específicos con contratos claros.
  • Aceptar solo campos permitidos explícitamente.
  • Aplicar validación sintáctica, semántica y contextual.
  • Verificar autorización por objeto en cada operación relevante.
  • Devolver solo datos necesarios para el caso de uso.
  • Limitar operaciones masivas y patrones de abuso automatizado.
  • Versionar con gobernanza y revisar endpoints heredados.

15.19 Errores frecuentes en la remediación

  • Ocultar datos en el frontend sin retirarlos de la respuesta.
  • Agregar validación de formato pero no de negocio.
  • Corregir un endpoint puntual y dejar otros equivalentes expuestos.
  • Asumir que autenticación fuerte reemplaza autorización fina.
  • Aplicar rate limiting sin revisar qué datos ya se exponen indebidamente.
  • No revisar serialización y mapeo automático de modelos.
Una API segura no es la que tiene muchos parámetros o muchas opciones. Es la que hace exactamente lo necesario, para quien corresponde, con la menor exposición posible.

15.20 Relación con otras vulnerabilidades

Las APIs inseguras se conectan con varias categorías del curso.

  • Con Broken Access Control, cuando la autorización por objeto es insuficiente.
  • Con Insecure Design, si el endpoint fue pensado con demasiado poder o sin límites de negocio.
  • Con Injection, si los parámetros aceptados terminan afectando consultas o intérpretes.
  • Con Logging Failures, si el abuso automatizado o la exfiltración no se detectan a tiempo.

Esto explica por qué la seguridad de APIs debe tratarse como disciplina propia dentro de la seguridad web moderna.

15.21 Qué debes recordar de este tema

  • Las APIs amplían la superficie de ataque porque son directas, estructuradas y automatizables.
  • Validar formato no alcanza; también hay que validar semántica y contexto.
  • Aceptar más campos de los necesarios abre la puerta a cambios indebidos.
  • Devolver más datos de los necesarios genera exposición innecesaria.
  • El frontend no es un control de seguridad y no debe justificar respuestas excesivas.
  • La autorización por objeto es crítica en entornos orientados a APIs.
  • El principio de mínimo dato ayuda tanto como el de mínimo privilegio.

15.22 Conclusión

Las APIs inseguras muestran que la modernización tecnológica no elimina los problemas clásicos de seguridad; muchas veces los vuelve más directos, más veloces y más fáciles de automatizar. Cuando una API acepta demasiado o devuelve demasiado, el atacante obtiene una interfaz muy poderosa para explorar, abusar y exfiltrar.

En el próximo tema estudiaremos pruebas de seguridad web, herramientas y metodología básica, para integrar una mirada más sistemática sobre cómo descubrir y validar las vulnerabilidades vistas a lo largo del curso.