Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

GraphQL, introspección, profundidad y alias

5 tareas · 45 min · Principiante

GraphQL no es una API de muchas rutas sino de una: el cliente describe qué campos quiere y el servidor se los entrega. Eso mueve los fallos. La autorización hay que comprobarla campo a campo y operación a operación; el esquema se puede leer entero por introspección; y una sola petición puede pedir mucho trabajo si nadie limita la profundidad de la consulta o el número de alias. Trabajas con la salida de la introspección y el registro del servidor GraphQL de Tamarindo Envíos, de la prueba autorizada. Lees cifras y tablas; no hay ningún servidor al que escribir.

0 de 5 · 0%

Objetivo de la sala

GraphQL no es una API de muchas rutas sino de una: el cliente describe qué campos quiere y el servidor se los entrega. Eso mueve los fallos. La autorización hay que comprobarla campo a campo y operación a operación; el esquema se puede leer entero por introspección; y una sola petición puede pedir mucho trabajo si nadie limita la profundidad de la consulta o el número de alias. Trabajas con la salida de la introspección y el registro del servidor GraphQL de Tamarindo Envíos, de la prueba autorizada. Lees cifras y tablas; no hay ningún servidor al que escribir.

La introspección es una función estándar de GraphQL: el cliente puede preguntar al propio servidor qué tipos, campos y argumentos tiene. Es útil para el desarrollo y las herramientas, y a la vez entrega a quien la use el mapa completo, incluidas operaciones que ninguna pantalla muestra. La documentación oficial de GraphQL recomienda desactivarla en producción para las APIs que solo usan las propias aplicaciones del equipo, porque las operaciones ya están fijadas en esas aplicaciones y reduce la superficie.

Para el pentester, la introspección es una fuente de lectura: se pide una vez dentro del alcance, se guarda la salida y se trabaja con ella. No es un fallo por sí sola, pero un esquema legible más una autorización floja multiplica el efecto de cualquier descuido.

Responde para continuar

El servidor GraphQL de Tamarindo responde a la introspección en el entorno de pruebas. ¿Cómo lo anotas?

Ver pista de ayuda

Es una función legítima, pero entrega el mapa completo. La guía oficial recomienda desactivarla en producción si la API es solo para las apps propias.

En GraphQL no hay rutas distintas que proteger: cada campo de consulta y cada mutación debe comprobar quién llama. El fallo clásico de BFLA se ve aquí como una mutación de un rol que acepta a otro. La tabla matriz_de_roles dice quién debe poder invocar cada operación y registro_de_operaciones dice quién la invocó y qué respondió el servidor.

Cruza ambas y encuentra la operación reservada a un rol que respondió 200 a una cuenta de otro rol.

Responde para continuar

¿Qué operación reservada al rol operador ejecutó con éxito una cuenta de rol cliente?

Ver pista de ayuda

Ejecuta `SELECT * FROM matriz_de_roles` y `SELECT * FROM registro_de_operaciones`, y busca una fila con rol cliente en una operación que la matriz reserva al operador.

El esquema de Tamarindo tiene una referencia circular: un cliente tiene envíos y cada envío tiene un cliente. Sin límite, una consulta puede encadenar esa relación tantas veces como quiera, y el trabajo del servidor crece con cada nivel. Por eso la guía de seguridad de GraphQL recomienda un límite de profundidad de consulta aplicado antes de ejecutar, y uno más estricto para el anidamiento de listas.

En registro_de_operaciones la columna profundidad dice cuántos niveles de anidamiento declaró cada operación, y duracion_ms cuánto tardó. Localiza la que más niveles anidó.

Responde para continuar

¿Qué identificador tiene la operación de mayor profundidad del registro?

Ver pista de ayuda

Ejecuta `SELECT * FROM registro_de_operaciones` y compara la columna profundidad. Fíjate también en lo que tardó.

Un alias permite pedir el mismo campo varias veces en una sola operación con nombres distintos. Es legítimo para una pantalla, pero se puede usar para que una única petición equivalga a muchas: un límite de tasa que cuenta peticiones HTTP no ve la diferencia. Por eso se limita también el número de alias por operación y se calcula el coste de cada consulta, no solo su número.

Mira controles_del_servidor y registro_de_operaciones. El límite es de peticiones por minuto por cuenta, y la operación con más alias del registro pidió un número de alias en una sola petición. Calcula cuántas búsquedas cabrían en un minuto con ese límite si cada petición llevara tantos alias.

Responde para continuar

Con el límite de tasa configurado y el máximo de alias observado, ¿cuántas consultas de campo cabrían en un minuto?

Ver pista de ayuda

Multiplica las peticiones por minuto permitidas por los alias de la operación que más usó.

El informe termina en recomendaciones que se puedan ejecutar. Para GraphQL, las que recoge la guía oficial son: comprobar autorización en cada operación y en la capa de negocio, limitar profundidad, limitar alias, limitar lotes, calcular un coste de consulta con un presupuesto por cliente, paginar las listas con un máximo, y desactivar la introspección cuando no hace falta. Ninguna depende de ocultar el esquema: sin comprobación de roles, el secreto del esquema no protege.

Responde para continuar

Tamarindo pide una sola medida para cerrar los hallazgos de GraphQL. ¿Qué respondes?

Ver pista de ayuda

Cada hallazgo tiene su causa. El rol se comprueba en el servidor y los límites acotan el trabajo de una petición.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad