API, Bug Bounty, Bug Hunting, GraphQL

#30 Bug Bounty v.2 — Тестирование API. GraphQL API

Здравствуйте, дорогие друзья.

GraphQL — это язык запросов к данным, разработанный Facebook и выпущенный в 2015 году. GraphQL выступает в качестве альтернативы REST API. Rest API требует, чтобы клиент отправлял несколько запросов к разным конечным точкам API для запроса данных из серверной базы данных. С GraphQL вам нужно отправить только один запрос, чтобы запросить серверную часть. Это намного проще, потому что вам не нужно отправлять несколько запросов к API, для сбора всей необходимой информации можно использовать один запрос.

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

При выполнении атак методом перебора по каталогам обязательно добавьте следующие пути для проверки наличия экземпляров GraphQL.

● /graphql

● /graphiql

● /graphql.php

● /graphql/console

Как только вы найдете открытый экземпляр GraphQL, вам нужно знать, какие запросы он поддерживает. Это можно сделать с помощью системы самоанализа, более подробную информацию можно найти здесь:

https://graphql.org/learn/introspection/

При выполнении следующих запросов вам будут показаны все запросы, доступные на конечной точке.

example.com/graphql?query={__schema{types{name,fields{name}}}}

example.com/graphql?query={__schema{types{name,fields{name}}}}

Как вы можете видеть, есть тип под названием “Пользователь”, и у него есть два поля под названием “имя пользователя” и “пароль”. Типы, начинающиеся с “__”, можно игнорировать, поскольку они являются частью системы самоанализа. Как только интересный тип найден, вы можете запросить значения его полей, выполнив следующий запрос:

●http://example.com/graphql?query={TYPE_1{FIELD_1,FIELD_2 }}

http://example.com/graphql?query={TYPE_1{FIELD_1,FIELD_2 }}

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

На этом все. Всем хорошего дня!

Цикл статей по Bug Bounty.