Capacidad

GraphQL Deep Inspection

No trate el tráfico GraphQL como un cuerpo POST simple — detecte patrones de introspección, DoS anidado y query batching dentro de su WAAP.

TR7 GraphQL Deep Inspection no gestiona el tráfico GraphQL de la misma manera que REST. Un único endpoint GraphQL típicamente transporta múltiples operaciones, consultas anidadas, variables y estructuras de consultas en lotes — los controles de seguridad que se detienen en el nivel de URL y método dejan riesgos críticos invisibles. TR7 WAAP utiliza detección basada en firmas para capturar intentos de introspección, patrones de consultas anidadas excesivas y comportamientos de query batching. Las reglas enriquecidas TR7 50100, 50101 y 50102 se enfocan en la filtración de esquemas, el DoS de consultas anidadas y el abuso de consultas en lotes respectivamente. Los controles GraphQL pueden ejecutarse en los alcances query, raw, json y form. Para endpoints como `/graphql`, la política de seguridad puede ajustarse aún más con listas de métodos permitidos, controles de claves JSON permitidas, límites de tamaño del cuerpo y reglas personalizadas. El resultado: TR7 no reclama un parser nativo o una inspección de campos consciente del esquema — pero hace que los riesgos GraphQL de producción más comunes (introspección, DoS anidado, query batching) sean visibles y gestionables dentro del motor de firmas WAAP.

3
Reglas GraphQL enriquecidas TR7: 50100 introspección, 50101 DoS anidado, 50102 batch
5+
Variantes GraphQL waf_db: familia 21360 y variantes de introspección
4
Alcances de inspección: query, raw, json, form

GraphQL transporta demasiada capacidad sobre un único endpoint — la lógica WAAP clásica pierde la mayoría.

En el tráfico REST, el endpoint, el método y la ruta generalmente describen lo que hace una solicitud. En GraphQL, esa información vive principalmente en el cuerpo. El mismo endpoint `/graphql` puede transportar lecturas, escrituras, consultas anidadas, introspección, fragmentos y operaciones con variables. Una capa de seguridad que solo verifica URL y método no puede ver lo que GraphQL está haciendo realmente.

Cuando la introspección de GraphQL permanece abierta en producción, el esquema de la aplicación puede filtrarse. Un atacante que aprende qué tipos, campos y relaciones existen puede elaborar consultas mucho más dirigidas. Esto puede no ser exfiltración directa de datos, pero es una divulgación de información seria que mapea la superficie de ataque.

Las consultas anidadas y los fragmentos crean un riesgo diferente. Las consultas anidadas excesivamente profundas pueden imponer una carga de procesamiento pesada en el backend con una sola solicitud HTTP. El rate limiting estándar cuenta solicitudes — no ve el costo de una sola solicitud. En GraphQL, el riesgo de DoS generalmente proviene de la estructura de la consulta, no del volumen de solicitudes.

El query batching produce una brecha similar. Cuando se envían múltiples consultas en un cuerpo, el tráfico parece una única solicitud HTTP desde el exterior, pero múltiples operaciones pueden ejecutarse en el interior. Esto socava los controles clásicos de rate-limit y seguridad basados en endpoints.

TR7 GraphQL Deep Inspection examina el tráfico GraphQL con reglas WAAP basadas en patrones: los comportamientos de introspección, DoS por profundidad anidada y query batching se detectan en los alcances query, raw, json y form y se vinculan a políticas de producción.

Nuestro enfoque

TR7 aborda la seguridad GraphQL no reclamando conciencia del esquema, sino llevando los patrones de abuso GraphQL de producción más comunes al motor de firmas WAAP.

Los patrones de introspección pueden bloquearse en producción

TR7 detecta indicadores de introspección como `__schema`, `__type`, `IntrospectionQuery` y `fragment FullType` usando reglas basadas en regex. Estas reglas pueden ejecutarse en modo block en producción y en modo monitor o con una puntuación más baja en staging.

Los patrones de DoS de consultas anidadas se puntúan y capturan

Las consultas GraphQL excesivamente anidadas pueden generar una carga de procesamiento pesada con una sola solicitud. La familia de reglas TR7 50101 detecta cadenas profundas `{ ... { ... } }` a nivel de patrón y las incluye en la decisión WAAP con una puntuación alta.

El comportamiento de query batching se hace visible bajo una sola solicitud

Enviar múltiples consultas en un cuerpo puede socavar la lógica clásica de rate-limit. La regla TR7 50102 detecta patrones de consultas en lotes y permite vincular ese comportamiento a una decisión de registro, puntuación o bloqueo.

La inspección del alcance del cuerpo busca payloads GraphQL en múltiples ubicaciones

Una consulta GraphQL puede transportarse no solo en el cuerpo raw sino también en campos JSON, de formulario o de query string. Las reglas TR7 se ejecutan en los alcances query, raw, json y form, llevando diferentes implementaciones de cliente bajo la misma política WAAP.

Capacidades

GraphQL Deep Inspection gestiona los riesgos específicos de GraphQL con reglas WAAP basadas en firmas, selección de alcance y controles de hardening de endpoints.

La regla TR7 50100 detecta intentos de introspección de GraphQL

La regla 50100 apunta a los patrones comúnmente utilizados en la introspección de GraphQL: `__schema`, `__type`, `IntrospectionQuery` y `fragment FullType`. El nivel de riesgo predeterminado se posiciona como una señal de fuerza media y puede evaluarse con una puntuación de 4. En los endpoints donde la introspección debe cerrarse en producción, esta regla puede ejecutarse en modo block o monitor. Los intentos de descubrimiento de esquemas se hacen visibles en el flujo de eventos WAAP.

La regla TR7 50101 se enfoca en los patrones de DoS de consultas anidadas

La regla 50101 detecta consultas GraphQL excesivamente anidadas a nivel de patrón. Las cadenas profundas de `{` y las estructuras altamente anidadas pueden hacer que una sola solicitud imponga un alto costo de procesamiento en el backend. Esta regla puede evaluarse con una puntuación de 6 como una señal de ataque más fuerte. El objetivo no es realizar el cálculo de complejidad consciente del esquema — es capturar los patrones de consultas anidadas peligrosas de forma temprana.

La regla TR7 50102 captura el abuso de query batching

La regla 50102 detecta patrones en lotes donde se envían múltiples consultas en un solo cuerpo. Dado que el query batching puede ser legítimo para algunos clientes, los valores de estado y puntuación de la regla deben ajustarse al comportamiento de la aplicación. Comenzar en modo monitor y clarificar con la observación del tráfico real es el enfoque correcto. Una vez confirmado el abuso, la regla puede pasarse a una política de bloqueo.

Las variantes GraphQL de waf_db amplían la cobertura de introspección y patrones anidados

Junto con las reglas enriquecidas TR7, waf_db contiene variantes GraphQL como las familias 50100, 50101 y 21360+. Estas variantes cubren ortografías alternativas como `__schema {`, `__type`, `__typename` y patrones de mutación anidados. Esto construye una superficie de firma más amplia para los comportamientos de introspección y consultas anidadas sin depender de una sola regex. Los operadores pueden anular el estado y la puntuación de estas reglas por servicio.

Los alcances query, raw, json y form cubren diferentes formatos de transporte

Las consultas GraphQL no siempre llegan en el mismo formato. Algunos clientes envían los campos `query`, `variables` y `operationName` dentro de un cuerpo JSON; otros pueden usar cuerpo raw o campos de formulario. Las reglas TR7 se ejecutan en los alcances query, raw, json y form, llevando estos diferentes formatos de transporte a la cobertura de inspección. Esto reduce el error de confiar solo en un formato de cuerpo en los endpoints GraphQL.

El mismo modelo de reglas se aplica tanto a los objetivos api endpoint como web application

Los controles GraphQL pueden aplicarse tanto a los objetivos api_endpoint como web_application. El mismo modelo de reglas WAAP puede gestionarse con diferentes valores de estado, puntuación o alcance según el tipo de servicio. Por ejemplo, la introspección puede permanecer en modo monitor en un endpoint de prueba interno mientras se bloquea en un endpoint de producción público. Esta flexibilidad permite adaptar un único conjunto de reglas a diferentes políticas de entorno.

StructureRuleDB puede reducir el comportamiento del endpoint GraphQL

Se pueden definir controles para el endpoint `/graphql` como permitir solo el método POST, restringir las claves JSON esperadas a `query`, `variables` y `operationName`, o aplicar un límite de tamaño del cuerpo. Estos controles no reemplazan las firmas GraphQL — son una capa de seguridad positiva que los complementa. Los métodos o campos JSON inesperados pueden rechazarse en una etapa temprana, haciendo el comportamiento del endpoint más predecible.

Las reglas personalizadas pueden agregar patrones GraphQL específicos de la aplicación

Si el tráfico GraphQL incluye patrones de mutación específicos de la aplicación, nombres de campos o nombres de operaciones de riesgo, pueden agregarse como reglas WAAP personalizadas. Por ejemplo, una palabra clave `mutation` específica o un nombre de operación sensible que aparece en el cuerpo puede asignarse una puntuación más alta. Estas reglas personalizadas participan en el sistema de puntuación WAAP principal y son visibles en el flujo de logs y SIEM. Incluso sin inspección de campos consciente del esquema, los riesgos específicos de la aplicación pueden capturarse con reglas basadas en patrones.

Profundidad operativa

GraphQL Deep Inspection está basado en firmas en sus capacidades reales actuales — el análisis de operaciones, el cálculo de complejidad y las afirmaciones WAAP de campos conscientes del esquema están fuera del alcance de esta página.

01

Inspección basada en patrones

Los controles GraphQL trabajan con un enfoque de detección de patrones basado en regex y alcance. La diferenciación de tipos de operación, un contador de profundidad real o el cálculo de puntuación de complejidad de consultas no son parte de este modelo. Esta distinción es especialmente importante para un posicionamiento preciso.

02

Anulación de estado y puntuación

Las reglas 50100, 50101, 50102 y las variantes waf_db pueden establecerse en enabled, monitor o disabled según las necesidades del servicio. Los valores de puntuación también pueden ajustarse a la tolerancia de falsos positivos de la aplicación. El modelo de despliegue correcto para los endpoints GraphQL de producción es comenzar en modo monitor y pasar al bloqueo después de la observación del tráfico real.

03

Hardening de endpoints

La lista de métodos permitidos, la lista de claves JSON permitidas y el límite de tamaño del cuerpo pueden aplicarse en los endpoints GraphQL. Estos controles garantizan que la forma de la solicitud se ajuste al contrato esperado junto con la detección de firmas. En APIs públicas en particular, aceptar solo el formato esperado en el endpoint `/graphql` reduce la superficie de ataque.

04

Límite de rate-limit

El rate-limiting por operación no se aplica a nivel de parser GraphQL. No se reclama el análisis semántico del número de operaciones dentro de un solo cuerpo y la aplicación de un límite separado a cada una. El patrón de query batching puede capturarse como firma y usarse junto con las políticas generales de rate-limit.

05

Alcance de consultas persistidas

No hay soporte dedicado para consultas persistidas dentro de esta capacidad. Los patrones GraphQL visibles en la solicitud se inspeccionan con firmas WAAP. La resolución de una consulta desde su hash y su verificación contra datos de esquema u operación registrada no se reclama en esta página.

06

Modelo no consciente del esquema

No se realiza inspección nativa a nivel de un campo de esquema GraphQL específico — por ejemplo `User.email` — a nivel de campo. Las reglas trabajan con un enfoque de coincidencia de patrones contra el cuerpo. Si hay requisitos específicos de campo, deben abordarse de manera limitada y cuidadosa con una regla regex personalizada.

Cuándo usarlo

Bloqueo de introspección en un endpoint GraphQL de producción

Un equipo de seguridad puede permitir la introspección en staging mientras ejecuta la regla 50100 en modo block en el endpoint de producción. Los intentos de descubrimiento de esquemas se registran, se puntúan y se bloquean por política.

Bloqueo de intentos de DoS con fragmentos anidados mediante puntuación

Los fragmentos o estructuras de consulta excesivamente anidados pueden imponer un alto costo de procesamiento en el backend. La regla 50101 captura estos patrones con una puntuación de 6, proporcionando una señal fuerte para la decisión de bloqueo WAAP.

Detección de un ataque de query batching en una API móvil

Cuando se intentan muchas consultas en una sola solicitud a un endpoint de cliente móvil, la regla 50102 detecta el patrón en lotes. El equipo de operaciones puede observar el comportamiento en modo monitor primero y pasar al modo enabled una vez confirmado el abuso.

Lista de métodos y claves JSON permitidas para un endpoint GraphQL

Un equipo de API puede permitir solo el método POST y los campos JSON `query`, `variables` y `operationName` en el endpoint `/graphql`. Los métodos o campos inesperados se rechazan antes de llegar a la aplicación, reduciendo el comportamiento del endpoint.

Preguntas frecuentes

¿El soporte GraphQL de TR7 es un parser nativo o basado en patrones?
Está basado en patrones. TR7 no ejecuta un parser de operaciones dedicado o un motor de conciencia de esquema para GraphQL. Las reglas enriquecidas 50100, 50101 y 50102 trabajan con detección de patrones basada en regex y alcance. La diferenciación de tipos de operación, un contador de profundidad real o el cálculo de complejidad de consultas no son parte de este modelo. El enfoque está diseñado para capturar los riesgos de producción más comunes: introspección, DoS anidado y query batching.
¿Puedo cerrar completamente la introspección en producción?
Sí. La regla 50100 apunta a los patrones `__schema`, `__type`, `IntrospectionQuery` y `fragment FullType`. Es posible ejecutar esta regla en modo block en el endpoint de producción y en modo monitor en el endpoint de staging. Los intentos de descubrimiento de esquemas se hacen visibles en el flujo de eventos WAAP y se bloquean por política.
¿La detección de query batching causa problemas para el uso legítimo?
El query batching puede ser legítimo para algunos clientes. Por esta razón, se recomienda iniciar la regla 50102 en modo monitor y observar el comportamiento del tráfico real en lugar de activar el modo block inmediatamente. Una vez confirmado el abuso, la regla puede pasarse a la política enabled o block. Los valores de estado y puntuación pueden anularse por servicio.
¿En qué alcances se ejecutan las reglas GraphQL?
Las reglas GraphQL TR7 se ejecutan en los alcances query, raw, json y form. Tanto si el payload GraphQL se transporta en un cuerpo JSON, un cuerpo raw o campos de formulario, se aplica la misma política de firma WAAP. Las diferentes implementaciones de cliente quedan bajo un único conjunto de reglas.
¿Cuál es la diferencia entre las variantes waf_db y las reglas enriquecidas?
Las reglas enriquecidas TR7 (50100, 50101, 50102) se posicionan como reglas primarias enfocadas en patrones de abuso GraphQL específicos. Las variantes waf_db cubren ortografías alternativas como `__schema {`, `__typename` y `mutation.*{.*{.*{` así como patrones de introspección adicionales. Juntas construyen una superficie de firma más amplia. Los operadores pueden gestionar ambas capas de forma independiente según las necesidades del servicio.
¿Cómo se realiza el hardening del endpoint GraphQL con StructureRuleDB?
Con StructureRuleDB, solo se puede permitir el método POST en el endpoint `/graphql`, las claves JSON esperadas pueden restringirse a `query`, `variables` y `operationName`, y se puede aplicar un límite de tamaño del cuerpo. Estos controles no reemplazan la detección de firmas — son una capa de seguridad positiva que garantiza que las solicitudes con métodos o campos inesperados se rechacen antes de llegar a los controles de firma.

Conecte sus endpoints GraphQL al motor de firmas WAAP

Haga que los riesgos de introspección, DoS anidado y query batching sean visibles y gestionables en producción. Recorramos una configuración en vivo en sus propios servicios.