Включенная интроспекция GraphQL: как злоумышленники читают схему
Механизм интроспекции GraphQL позволяет клиенту запросить метаданные о схеме данных с помощью специального системного запроса к полю __schema.
Если интроспекция включена на боевом сервере, любой внешний пользователь может мгновенно сгенерировать полную карту типов, закрытых мутаций, связей и приватных полей базы данных.
Степень критичности и чем опасна уязвимость
Автоматические инструменты (например, GraphQL Voyager) строят по схеме полную диаграмму вашей базы данных, облегчая поиск уязвимостей в бизнес-логике.
Как наш сканер находит эту уязвимость
Site Check отправляет безопасный тестовый POST-запрос с интроспекцией { __schema { queryType { name } } } к эндпоинтам /graphql и проверяет реакцию сервера.
Аудит административных интерфейсов выполняется методом зондирования типовых эндпоинтов телеметрии и дашбордов. Сканер анализирует заголовки HTTP-аутентификации (WWW-Authenticate), редиректы на форму входа и структуру возвращаемого HTML, не выполняя попыток перебора паролей или внедрения учетных записей.
Как устранить уязвимость (Пошаговое руководство)
Для ликвидации риска выполните следующие действия в конфигурации вашего сервера или приложения:
// В конфигурации Apollo Server отключите интроспекцию для продакшна:
const server = new ApolloServer({
typeDefs,
resolvers,
introspection: process.env.NODE_ENV !== 'production',
});
- Отключите introspection в конфигурации вашего GraphQL-сервера для production окружения.
- Внедрите ограничение глубины запросов (Query Depth Limiting), чтобы предотвратить DoS-атаки.
Анатомия атаки и реальные последствия для проекта
При включенной интроспекции GraphQL атакующий отправляет запрос __schema и получает полное описание типов данных, мутаций и закрытых связей базы данных. Это позволяет находить недокументированные мутации для обхода платежей или изменения прав пользователей.
Влияние на соответствие стандартам: Нарушение требований безопасности стандартов OWASP Top 10 (A05:2021 Security Misconfiguration), ISO/IEC 27001 и отраслевых норм 152-ФЗ.
Матрица эшелонированной защиты (Defense-in-Depth)
| Уровень защиты | Техническое действие | Инструмент / Механизм |
|---|---|---|
| Периметр веб-сервера (Nginx / Edge) | Применение изолирующих правил блокировки для маршрутов, связанных с graphql-introspection-exposure | Nginx Security Directives |
| Среда исполнения и конфигурация | Отключение отладочных механизмов и разграничение прав доступа к компоненту graphql-introspection-exposure | Runtime Security Hardening |
| Пайплайн DevSecOps контроля | Автоматическое тестирование конфигурации graphql-introspection-exposure в CI/CD пайплайне при каждом релизе | Site Check Security Gate |
Верификация устранения: команды для быстрой проверки
После внесения изменений в настройки сервера или исходный код приложения проверьте отсутствие уязвимости с помощью терминальных утилит:
curl -s -X POST -H "Content-Type: application/json" -d '{"query":"{__schema{types{name}}}"}' https://ваш-домен.com/graphql | grep "__schema"
# Должна возвращаться ошибка
Рекомендации DevSecOps для безопасного развертывания
Отключайте интроспекцию GraphQL в продакшне: introspection: process.env.NODE_ENV !== "production" в Apollo Server, Yoga или Helix.
- ✓ Ограничить доступ к административным путям белым списком доверенных IP-адресов
- ✓ Настроить обязательную двухфакторную аутентификацию (2FA) для всех панелей управления
- ✓ Отключить Swagger UI и эндпоинты Actuator на внешних продакшен-портах
- ✓ Настроить отправку алертов при множественных неудачных попытках авторизации
Часто задаваемые вопросы по устранению
Публичная доступность служебных панелей управления (Grafana, Prometheus, Swagger, Actuator) деанонимизирует топологию сети и снижает порог входа для целевой атаки. Базовый периметр безопасности требует выноса подобных сервисов за VPN, внедрения mTLS или привязки к приватной подсети без публичных DNS-записей.
Для предотвращения вектора «Включенная интроспекция GraphQL: как злоумышленники читают схему» зафиксируйте проверочные правила в CI/CD пайплайне и настройте непрерывный мониторинг внешнего периметра через Site Check.