GraphQL
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
IntroducciĆ³n
GraphQL se destaca como una alternativa eficiente a la API REST, ofreciendo un enfoque simplificado para consultar datos desde el backend. A diferencia de REST, que a menudo requiere numerosas solicitudes a travĆ©s de diversos endpoints para recopilar datos, GraphQL permite obtener toda la informaciĆ³n necesaria a travĆ©s de una solicitud Ćŗnica. Esta simplificaciĆ³n beneficia significativamente a los desarrolladores al disminuir la complejidad de sus procesos de obtenciĆ³n de datos.
GraphQL y Seguridad
Con la llegada de nuevas tecnologĆas, incluido GraphQL, tambiĆ©n surgen nuevas vulnerabilidades de seguridad. Un punto clave a tener en cuenta es que GraphQL no incluye mecanismos de autenticaciĆ³n por defecto. Es responsabilidad de los desarrolladores implementar tales medidas de seguridad. Sin una autenticaciĆ³n adecuada, los endpoints de GraphQL pueden exponer informaciĆ³n sensible a usuarios no autenticados, lo que representa un riesgo de seguridad significativo.
Ataques de Fuerza Bruta en Directorios y GraphQL
Para identificar instancias de GraphQL expuestas, se recomienda la inclusiĆ³n de rutas especĆficas en ataques de fuerza bruta en directorios. Estas rutas son:
/graphql
/graphiql
/graphql.php
/graphql/console
/api
/api/graphql
/graphql/api
/graphql/graphql
Identificar instancias de GraphQL abiertas permite examinar las consultas admitidas. Esto es crucial para entender los datos accesibles a travĆ©s del endpoint. El sistema de introspecciĆ³n de GraphQL facilita esto al detallar las consultas que un esquema admite. Para mĆ”s informaciĆ³n sobre esto, consulta la documentaciĆ³n de GraphQL sobre introspecciĆ³n: GraphQL: Un lenguaje de consulta para APIs.
Huella Digital
La herramienta graphw00f es capaz de detectar quĆ© motor de GraphQL se utiliza en un servidor y luego imprime informaciĆ³n Ćŗtil para el auditor de seguridad.
Consultas Universales
Para verificar si una URL es un servicio de GraphQL, se puede enviar una consulta universal, query{__typename}
. Si la respuesta incluye {"data": {"__typename": "Query"}}
, confirma que la URL alberga un endpoint de GraphQL. Este mƩtodo se basa en el campo __typename
de GraphQL, que revela el tipo del objeto consultado.
EnumeraciĆ³n BĆ”sica
Graphql generalmente soporta GET, POST (x-www-form-urlencoded) y POST(json). Aunque por razones de seguridad, se recomienda permitir solo json para prevenir ataques CSRF.
IntrospecciĆ³n
Para usar la introspecciĆ³n y descubrir informaciĆ³n del esquema, consulta el campo __schema
. Este campo estĆ” disponible en el tipo raĆz de todas las consultas.
Con esta consulta encontrarƔs el nombre de todos los tipos que se estƔn utilizando:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-45033ea2a7d8c631430146a2ddf713919a8d9c82%252Fimage%2520%281036%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d36d6e2e&sv=1)
Con esta consulta puedes extraer todos los tipos, sus campos y sus argumentos (y el tipo de los args). Esto serĆ” muy Ćŗtil para saber cĆ³mo consultar la base de datos.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-a4059618a9238087dbd99bd3dbe85c1ac7dbdf8a%252Fimage%2520%28950%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4dfe02f9&sv=1)
Errores
Es interesante saber si los errores se van a mostrar ya que contribuirĆ”n con informaciĆ³n Ćŗtil.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-0cd3e45fccd4b2064fca9fb35add65bea885fd9d%252Fimage%2520%28416%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=10878a08&sv=1)
Enumerar el esquema de la base de datos a travĆ©s de la introspecciĆ³n
Si la introspecciĆ³n estĆ” habilitada pero la consulta anterior no se ejecuta, intenta eliminar las directivas onOperation
, onFragment
y onField
de la estructura de la consulta.
Consulta de introspecciĆ³n en lĆnea:
La Ćŗltima lĆnea de cĆ³digo es una consulta graphql que volcarĆ” toda la meta-informaciĆ³n del graphql (nombres de objetos, parĆ”metros, tipos...)
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-7093c0a2830aa13b97b7d9f5085b0843e5d003af%252Fimage%2520%28363%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bac66567&sv=1)
Si la introspecciĆ³n estĆ” habilitada, puedes usar GraphQL Voyager para ver en una GUI todas las opciones.
Consultando
Ahora que sabemos quĆ© tipo de informaciĆ³n se guarda dentro de la base de datos, intentemos extraer algunos valores.
En la introspecciĆ³n puedes encontrar quĆ© objeto puedes consultar directamente (porque no puedes consultar un objeto solo porque existe). En la imagen siguiente puedes ver que el "queryType" se llama "Query" y que uno de los campos del objeto "Query" es "flags", que tambiĆ©n es un tipo de objeto. Por lo tanto, puedes consultar el objeto flag.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-eef992753b188040adb6f33d8661d77ec19da736%252FScreenshot%2520from%25202021-03-13%252018-17-48.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9e0eb74a&sv=1)
Ten en cuenta que el tipo de la consulta "flags" es "Flags", y este objeto se define como se muestra a continuaciĆ³n:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-722d32196143296167bc2e966402ed482da8fe36%252FScreenshot%2520from%25202021-03-13%252018-22-57%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=15b9a90c&sv=1)
Puedes ver que los objetos "Flags" estƔn compuestos por name y value. Luego puedes obtener todos los nombres y valores de las flags con la consulta:
Ten en cuenta que en caso de que el objeto a consultar sea un tipo primitivo como string como en el siguiente ejemplo
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-3f805b3ce38d310716e41d985a9ae2544a5cdcce%252Fimage%2520%28958%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6db725f5&sv=1)
Puedes simplemente consultarlo con:
En otro ejemplo donde habĆa 2 objetos dentro del objeto de tipo "Query": "user" y "users". Si estos objetos no necesitan ningĆŗn argumento para buscar, podrĆa recuperar toda la informaciĆ³n de ellos solo pidiendo los datos que desea. En este ejemplo de Internet podrĆa extraer los nombres de usuario y contraseƱas guardados:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-b42b37ed36c78ebf2c6dcce7b8241a0817d5c8b1%252Fimage%2520%28880%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=fcbf0ac1&sv=1)
Sin embargo, en este ejemplo, si intentas hacerlo, obtienes este error:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-61c135212c51ced29938aef8f285ac19f8f85fe4%252Fimage%2520%281042%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=fcd4e8b6&sv=1)
Parece que de alguna manera buscarĆ” utilizando el argumento "uid" de tipo Int.
De todos modos, ya sabĆamos que, en la secciĆ³n de EnumeraciĆ³n BĆ”sica, se propuso una consulta que nos mostraba toda la informaciĆ³n necesaria: query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}
Si lees la imagen proporcionada cuando ejecuto esa consulta, verĆ”s que "user" tenĆa el arg "uid" de tipo Int.
AsĆ que, realizando un ligero uid bruteforce, descubrĆ que en uid=1 se recuperĆ³ un nombre de usuario y una contraseƱa:
query={user(uid:1){user,password}}
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-629c1147c044a7edfc0452bb86ed657ea911aef6%252Fimage%2520%2890%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8bee2d54&sv=1)
Nota que descubrĆ que podĆa pedir los parĆ”metros "user" y "password" porque si intento buscar algo que no existe (query={user(uid:1){noExists}}
) obtengo este error:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-8bad097887b80495e770000f595f2a1dbfbae19f%252Fimage%2520%28707%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4c5ca8c4&sv=1)
Y durante la fase de enumeraciĆ³n descubrĆ que el objeto "dbuser" tenĆa como campos "user" y "password.
Truco de volcado de cadena de consulta (gracias a @BinaryShadow_)
Si puedes buscar por un tipo de cadena, como: query={theusers(description: ""){username,password}}
y buscas una cadena vacĆa, volcarĆ” todos los datos. (Nota que este ejemplo no estĆ” relacionado con el ejemplo de los tutoriales, para este ejemplo supĆ³n que puedes buscar usando "theusers" por un campo de cadena llamado "description").
BĆŗsqueda
En esta configuraciĆ³n, una base de datos contiene personas y pelĆculas. Las personas se identifican por su correo electrĆ³nico y nombre; las pelĆculas por su nombre y calificaciĆ³n. Las personas pueden ser amigas entre sĆ y tambiĆ©n tener pelĆculas, indicando relaciones dentro de la base de datos.
Puedes buscar personas por el nombre y obtener sus correos electrĆ³nicos:
Puedes buscar personas por el nombre y obtener sus pelĆculas suscritas:
Nota cĆ³mo se indica recuperar el name
de los subscribedMovies
de la persona.
TambiĆ©n puedes buscar varios objetos al mismo tiempo. En este caso, se realiza una bĆŗsqueda de 2 pelĆculas:
O incluso relaciones de varios objetos diferentes utilizando alias:
Mutaciones
Las mutaciones se utilizan para realizar cambios en el lado del servidor.
En la introspecciĆ³n puedes encontrar las mutaciones declaradas. En la siguiente imagen, el "MutationType" se llama "Mutation" y el objeto "Mutation" contiene los nombres de las mutaciones (como "addPerson" en este caso):
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-44a446c60fb9a4afd4bf483f63901eeb7ffa9268%252FScreenshot%2520from%25202021-03-13%252018-26-27%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=361a10fd&sv=1)
En esta configuraciĆ³n, una base de datos contiene personas y pelĆculas. Las personas se identifican por su correo electrĆ³nico y nombre; las pelĆculas por su nombre y calificaciĆ³n. Las personas pueden ser amigas entre sĆ y tambiĆ©n tener pelĆculas, indicando relaciones dentro de la base de datos.
Una mutaciĆ³n para crear nuevas pelĆculas dentro de la base de datos puede ser como la siguiente (en este ejemplo, la mutaciĆ³n se llama addMovie
):
Nota cĆ³mo tanto los valores como el tipo de datos se indican en la consulta.
AdemĆ”s, la base de datos admite una operaciĆ³n de mutaciĆ³n, llamada addPerson
, que permite la creaciĆ³n de personas junto con sus asociaciones a amigos y pelĆculas existentes. Es crucial notar que los amigos y las pelĆculas deben preexistir en la base de datos antes de vincularlos a la persona reciĆ©n creada.
Sobrecarga de Directivas
Como se explicĆ³ en una de las vulnerabilidades descritas en este informe, una sobrecarga de directivas implica llamar a una directiva incluso millones de veces para hacer que el servidor desperdicie operaciones hasta que sea posible hacer un DoS.
AgrupaciĆ³n de fuerza bruta en 1 solicitud API
Esta informaciĆ³n fue tomada de https://lab.wallarm.com/graphql-batching-attack/. AutenticaciĆ³n a travĆ©s de la API de GraphQL con el envĆo simultĆ”neo de muchas consultas con diferentes credenciales para verificarlo. Es un ataque clĆ”sico de fuerza bruta, pero ahora es posible enviar mĆ”s de un par de inicio de sesiĆ³n/contraseƱa por solicitud HTTP debido a la funciĆ³n de agrupaciĆ³n de GraphQL. Este enfoque engaƱarĆa a las aplicaciones externas de monitoreo de tasas haciĆ©ndoles pensar que todo estĆ” bien y que no hay un bot de fuerza bruta intentando adivinar contraseƱas.
A continuaciĆ³n, puedes encontrar la demostraciĆ³n mĆ”s simple de una solicitud de autenticaciĆ³n de aplicaciĆ³n, con 3 pares de correo electrĆ³nico/contraseƱa diferentes a la vez. Obviamente, es posible enviar miles en una sola solicitud de la misma manera:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-e3b2aeec042f09deee15222f09139489ae7dd63d%252Fimage%2520%281081%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=111c5e7d&sv=1)
Como podemos ver en la captura de pantalla de la respuesta, la primera y la tercera solicitudes devolvieron null y reflejaron la informaciĆ³n correspondiente en la secciĆ³n de error. La segunda mutaciĆ³n tenĆa los datos de autenticaciĆ³n correctos y la respuesta tiene el token de sesiĆ³n de autenticaciĆ³n correcto.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2730383215-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FOGiU7XValBchYYDg6h1H%252Fuploads%252Fgit-blob-e2f82d4dfbc68e5dea4c4c45ae6111533f4220cc%252Fimage%2520%28119%29%2520%281%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=39af3bd&sv=1)
GraphQL Sin IntrospecciĆ³n
Cada vez mĆ”s puntos finales de graphql estĆ”n deshabilitando la introspecciĆ³n. Sin embargo, los errores que graphql lanza cuando se recibe una solicitud inesperada son suficientes para que herramientas como clairvoyance recrean la mayor parte del esquema.
AdemĆ”s, la extensiĆ³n de Burp Suite GraphQuail observa las solicitudes de API de GraphQL que pasan a travĆ©s de Burp y construye un esquema interno de GraphQL con cada nueva consulta que ve. TambiĆ©n puede exponer el esquema para GraphiQL y Voyager. La extensiĆ³n devuelve una respuesta falsa cuando recibe una consulta de introspecciĆ³n. Como resultado, GraphQuail muestra todas las consultas, argumentos y campos disponibles para su uso dentro de la API. Para mĆ”s informaciĆ³n verifica esto.
Una buena lista de palabras para descubrir entidades de GraphQL se puede encontrar aquĆ.
Eludir las defensas de introspecciĆ³n de GraphQL
Para eludir las restricciones en las consultas de introspecciĆ³n en las API, insertar un carĆ”cter especial despuĆ©s de la palabra clave __schema
resulta efectivo. Este mĆ©todo explota descuidos comunes de los desarrolladores en patrones de regex que intentan bloquear la introspecciĆ³n al centrarse en la palabra clave __schema
. Al agregar caracteres como espacios, nuevas lĆneas y comas, que GraphQL ignora pero que podrĆan no ser considerados en regex, se pueden eludir las restricciones. Por ejemplo, una consulta de introspecciĆ³n con una nueva lĆnea despuĆ©s de __schema
puede eludir tales defensas:
Si no tiene Ʃxito, considere mƩtodos de solicitud alternativos, como solicitudes GET o POST con x-www-form-urlencoded
, ya que las restricciones pueden aplicarse solo a las solicitudes POST.
Intente WebSockets
Como se mencionĆ³ en esta charla, verifique si podrĆa ser posible conectarse a graphQL a travĆ©s de WebSockets, ya que eso podrĆa permitirle eludir un posible WAF y hacer que la comunicaciĆ³n de WebSocket filtre el esquema de graphQL:
Descubriendo Estructuras GraphQL Expuestas
Cuando la introspecciĆ³n estĆ” deshabilitada, examinar el cĆ³digo fuente del sitio web en busca de consultas precargadas en bibliotecas de JavaScript es una estrategia Ćŗtil. Estas consultas se pueden encontrar utilizando la pestaƱa Sources
en las herramientas de desarrollo, proporcionando informaciĆ³n sobre el esquema de la API y revelando potencialmente consultas sensibles expuestas. Los comandos para buscar dentro de las herramientas de desarrollo son:
CSRF en GraphQL
Si no sabes quƩ es CSRF, lee la siguiente pƔgina:
CSRF (Cross Site Request Forgery)AllĆ podrĆ”s encontrar varios endpoints de GraphQL configurados sin tokens CSRF.
Ten en cuenta que las solicitudes de GraphQL generalmente se envĆan a travĆ©s de solicitudes POST utilizando el Content-Type application/json
.
Sin embargo, la mayorĆa de los endpoints de GraphQL tambiĆ©n soportan form-urlencoded
solicitudes POST:
Por lo tanto, dado que las solicitudes CSRF como las anteriores se envĆan sin solicitudes de preflight, es posible realizar cambios en el GraphQL abusando de un CSRF.
Sin embargo, tenga en cuenta que el nuevo valor predeterminado de la cookie de la bandera samesite
de Chrome es Lax
. Esto significa que la cookie solo se enviarĆ” desde un sitio web de terceros en solicitudes GET.
Tenga en cuenta que generalmente es posible enviar la solicitud de consulta tambiĆ©n como una solicitud GET y el token CSRF podrĆa no estar siendo validado en una solicitud GET.
AdemĆ”s, abusando de un XS-Search ataque podrĆa ser posible exfiltrar contenido del punto final de GraphQL abusando de las credenciales del usuario.
Para mĆ”s informaciĆ³n verifique el post original aquĆ.
Secuestro de WebSocket entre sitios en GraphQL
Similar a las vulnerabilidades CRSF que abusan de graphQL, tambiĆ©n es posible realizar un secuestro de WebSocket entre sitios para abusar de una autenticaciĆ³n con GraphQL con cookies no protegidas y hacer que un usuario realice acciones inesperadas en GraphQL.
Para mĆ”s informaciĆ³n consulte:
WebSocket AttacksAutorizaciĆ³n en GraphQL
Muchas funciones de GraphQL definidas en el punto final pueden solo verificar la autenticaciĆ³n del solicitante pero no la autorizaciĆ³n.
Modificar las variables de entrada de la consulta podrĆa llevar a detalles sensibles de la cuenta leaked.
La mutaciĆ³n podrĆa incluso llevar a la toma de control de la cuenta al intentar modificar otros datos de la cuenta.
Bypass de autorizaciĆ³n en GraphQL
Encadenar consultas juntas puede eludir un sistema de autenticaciĆ³n dĆ©bil.
En el ejemplo a continuaciĆ³n, puedes ver que la operaciĆ³n es "forgotPassword" y que solo deberĆa ejecutar la consulta forgotPassword asociada. Esto se puede eludir agregando una consulta al final, en este caso agregamos "register" y una variable de usuario para que el sistema registre a un nuevo usuario.
Eludir lĆmites de tasa usando alias en GraphQL
En GraphQL, los alias son una caracterĆstica poderosa que permite la nominaciĆ³n de propiedades explĆcitamente al hacer una solicitud de API. Esta capacidad es particularmente Ćŗtil para recuperar mĆŗltiples instancias del mismo tipo de objeto dentro de una sola solicitud. Los alias se pueden emplear para superar la limitaciĆ³n que impide que los objetos de GraphQL tengan mĆŗltiples propiedades con el mismo nombre.
Para una comprensiĆ³n detallada de los alias de GraphQL, se recomienda el siguiente recurso: Aliases.
Si bien el propĆ³sito principal de los alias es reducir la necesidad de numerosas llamadas a la API, se ha identificado un caso de uso no intencionado donde los alias pueden ser aprovechados para ejecutar ataques de fuerza bruta en un endpoint de GraphQL. Esto es posible porque algunos endpoints estĆ”n protegidos por limitadores de tasa diseƱados para frustrar ataques de fuerza bruta al restringir el nĆŗmero de solicitudes HTTP. Sin embargo, estos limitadores de tasa pueden no tener en cuenta el nĆŗmero de operaciones dentro de cada solicitud. Dado que los alias permiten la inclusiĆ³n de mĆŗltiples consultas en una sola solicitud HTTP, pueden eludir tales medidas de limitaciĆ³n de tasa.
Considera el ejemplo proporcionado a continuaciĆ³n, que ilustra cĆ³mo se pueden usar consultas con alias para verificar la validez de los cĆ³digos de descuento de la tienda. Este mĆ©todo podrĆa eludir la limitaciĆ³n de tasa ya que compila varias consultas en una sola solicitud HTTP, lo que potencialmente permite la verificaciĆ³n de numerosos cĆ³digos de descuento simultĆ”neamente.
Tools
Vulnerability scanners
https://github.com/dolevf/graphql-cop: Prueba configuraciones incorrectas comunes de endpoints graphql
https://github.com/assetnote/batchql: Script de auditorĆa de seguridad de GraphQL con un enfoque en realizar consultas y mutaciones GraphQL por lotes.
https://github.com/dolevf/graphw00f: Identificar el graphql que se estĆ” utilizando
https://github.com/gsmith257-cyber/GraphCrawler: Kit de herramientas que se puede usar para obtener esquemas y buscar datos sensibles, probar autorizaciĆ³n, forzar esquemas y encontrar rutas a un tipo dado.
https://blog.doyensec.com/2020/03/26/graphql-scanner.html: Se puede usar como independiente o extensiĆ³n de Burp.
https://github.com/swisskyrepo/GraphQLmap: TambiƩn se puede usar como cliente CLI para automatizar ataques
https://gitlab.com/dee-see/graphql-path-enum: Herramienta que lista las diferentes formas de alcanzar un tipo dado en un esquema GraphQL.
https://github.com/doyensec/GQLSpection: El sucesor de los modos independiente y CLI de InQL
https://github.com/doyensec/inql: ExtensiĆ³n de Burp para pruebas avanzadas de GraphQL. El EscĆ”ner es el nĆŗcleo de InQL v5.0, donde puedes analizar un endpoint de GraphQL o un archivo de esquema de introspecciĆ³n local. Genera automĆ”ticamente todas las posibles consultas y mutaciones, organizĆ”ndolas en una vista estructurada para tu anĆ”lisis. El componente Atacante te permite ejecutar ataques GraphQL por lotes, lo que puede ser Ćŗtil para eludir lĆmites de tasa mal implementados.
https://github.com/nikitastupin/clairvoyance: Intenta obtener el esquema incluso con la introspecciĆ³n deshabilitada utilizando la ayuda de algunas bases de datos Graphql que sugerirĆ”n los nombres de mutaciones y parĆ”metros.
Clients
https://github.com/graphql/graphiql: Cliente GUI
https://altair.sirmuel.design/: Cliente GUI
Automatic Tests
Video explicando AutoGraphQL: https://www.youtube.com/watch?v=JJmufWfVvyU
References
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated