На одном из проектов я наткнулся на целый набор уязвимостей, включая критическую — из‑за неправильно настроенного GraphQL API.
Началось всё с того, что на веб-сайте был обнаружен сам GraphQL. Первая идея — проверить работоспособность интроспекции (раскрытие схем). И чудо, удачно! Мне удалось вытащить очень жирную схему, которую взялся исследовать далее.
Один из GraphQL-запросов возвращал id, имя, логин, пароль (в открытом виде), креды PostgreSQL и прочую конфиденциальную информацию всех пользователей компании! И для этого не требовалась авторизация — любой мог получить доступ к данным через один запрос.
▎ Обезличенный вариант GraphQL-запроса:
{
"query": "query { entities { id name username password и т.д. } }"
}▎ Риски:
➡️Утечка персональных данных;
➡️Компрометация учётных записей пользователей;
➡️Доступ к внутренним сервисам и базе данных через утёкшие креды;
➡️Потеря доверия клиентов и партнёров;
➡️Возможные штрафы за нарушение законов о защите данных.
▎ Рекомендации по устранению уязвимости:
✅Отключить интроспекцию в продакшене (__schema, __type);
✅Внедрить проверку прав на каждом query/mutation;
✅Исключить выдачу паролей и других секретов через API;
✅Хранить пароли в хэшированном виде.
Ты ему query, а он тебе креды.
#кейс
