- PVSM.RU - https://www.pvsm.ru -

GraphQL Voyager как инструмент для поиска уязвимостей

GraphQL Voyager как инструмент для поиска уязвимостей - 1

В настоящее время все больше компаний начинают использовать GraphQL [1]. Это относительно новая технология (если быть более точным, то это язык запросов), которая призвана решить существующие проблемы REST [2].

Если вы еще не знакомы с GraphQL [1], то рекомендую начать с ресурсов:

  • https://www.howtographql.com/ [3] — интерактивное обучение с заданиями и контрольными точками. Обучение начинается с нуля и заканчивается разработкой GraphQL-приложения.
  • https://graphql.org/learn/ [4] и https://graphql.github.io/graphql-spec/June2018 [5] — обучение в формате документации. Подходит, если вы хотите изучить конкретную тему.

В этой статье я хочу поделиться одним из инструментов для поиска уязвимостей в GraphQL API. Если вы искали уязвимости в GraphQL API, то наверняка сталкивались с такими проблемами:

  • Вместо документации у вас огромный нечитаемый JSON (GraphQL schema).
  • Веб-приложение использует только часть GraphQL API, поэтому вы не видите все данные и эндпойнты.

В решении этих проблем хорошим помощником является GraphQL Voyager [6], который визуализирует GraphQL schema. Визуализация значительно облегчает понимание GraphQL API и помогает быстрее найти уязвимости.

Зачем использовать GraphQL Voyager?

Прежде чем искать уязвимости мы хотим понять какие данные можно получить и какие операции выполнить с помощью GraphQL API. Как правило, не будет страницы с документацией, потому что GraphQL содержит документацию внутри себя. Получить документацию можно с помощью специального запроса, который вернет GraphQL схему, которая содержит всю публичную информацию о GraphQL API (о том как это сделать — дальше по тексту).

Чаще всего схема — это огромный JSON, и очень трудно разобраться в API, просто читая его. Другое дело — визуальное представление того же самого JSON-а:

GraphQL Voyager как инструмент для поиска уязвимостей - 2
JSON vs IMAGE

Как использовать GraphQL Voyager?

В первую очередь вам необходимо найти URL, на котором находится GraphQL API. Это можно сделать несколькими способами:

  1. Посмотреть запросы от клиента (браузер, мобильное приложение).
  2. Перебрать стандартные URL-ы для GraphQL. Например: /graphql, /api/graphql, … (больше URL-ов можно найти тут https://medium.com/@localh0t/discovering-graphql-endpoints-and-sqli-vulnerabilities-5d39f26cea2e [7]).
  3. Найти упоминание в документации (https://developer.github.com/v4/ [8]) или новостях (https://medium.com/paypal-engineering/graphql-a-success-story-for-paypal-checkout-3482f724fb53 [9]).

Найдя URL для GraphQL API-шки можно переходить к использованию GraphQL Voyager. Это довольно просто. Для примера, визуализировать SWAPI GraphQL [10] можно в три шага:

  1. Скопировать introspection query (запрос, который вернет схему):
  2. Выполнить introspection query:
  3. Скопировать полученную схему (правая часть страницы) и вставить ее в Voyager.

Примечание: конкретные шаги могут варьироваться от одного API к другому, т.к. запросы в GraphQL могут быть реализованы по-разному.

После этого перед вами будет интуитивно понятный интерфейс, содержащий: граф с объектами, их полями и связями между объектами.

GraphQL Voyager как инструмент для поиска уязвимостей - 3
Теперь стало намного понятнее

Не пугайтесь, если у вас получилась огромная схема. В GraphQL API может быть очень много функционала, так же как и REST API, поэтому, даже несмотря на удобное представление, все равно потребуется время на изучение всех деталей.

Заключение

GraphQL Voyager — незаменимый инструмент при тестировании GraphQL API. С его помощью можно увидеть полную картину и понять, как использовать GraphQL API.

Можно сделать Voyager еще лучше, если добавить в него возможность сравнивать две схемы. Идея в том, чтобы отслеживать изменения в GraphQL и при возникновении изменений визуализировать их. Это поможет быстро узнавать о новом функционале или о модификации старого функционала.

Я создал тикет на GitHub для этой фичи [11]. Вы можете оказать содействие в разработке, например, такими способами:

  1. (легкий вариант) Проголосовать за фичу. Таким образом поднимется приоритет ее разработки.
  2. (тяжелый вариант) Написать код самому, т.к. у GraphQL Voyager открытый исходный код [12].

Автор: nikitastupin

Источник [13]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/314773

Ссылки в тексте:

[1] GraphQL: https://graphql.org/

[2] REST: https://ru.wikipedia.org/wiki/REST

[3] https://www.howtographql.com/: https://www.howtographql.com/

[4] https://graphql.org/learn/: https://graphql.org/learn/

[5] https://graphql.github.io/graphql-spec/June2018: https://graphql.github.io/graphql-spec/June2018

[6] GraphQL Voyager: https://apis.guru/graphql-voyager/

[7] https://medium.com/@localh0t/discovering-graphql-endpoints-and-sqli-vulnerabilities-5d39f26cea2e: https://medium.com/@localh0t/discovering-graphql-endpoints-and-sqli-vulnerabilities-5d39f26cea2e

[8] https://developer.github.com/v4/: https://developer.github.com/v4/

[9] https://medium.com/paypal-engineering/graphql-a-success-story-for-paypal-checkout-3482f724fb53: https://medium.com/paypal-engineering/graphql-a-success-story-for-paypal-checkout-3482f724fb53

[10] SWAPI GraphQL: https://github.com/graphql/swapi-graphql

[11] тикет на GitHub для этой фичи: https://github.com/APIs-guru/graphql-voyager/issues/113

[12] GraphQL Voyager открытый исходный код: https://github.com/APIs-guru/graphql-voyager

[13] Источник: https://habr.com/ru/post/448354/?utm_campaign=448354