Авторские курсы Михаила Тарасова

Mass Assignment в GraphQL: как сломать API через жирный JSON

Mass Assignment в GraphQL: как сломать API через жирный JSON

GraphQL-эндпоинт на /graphql принимает мутации вроде updateUser(input: {name: "bro"}). Кидаешь в input лишние поля — isAdmin: true, а сервер молча хавает и возвращает 200 OK. Пахнет Mass Assignment, как старый бургер под диваном в подвале.

Как поймал:
— Инструмент: GraphiQL + кастомный запрос через curl.
— Метод: Добавил в мутацию поля idrolepermissions → сервер обновил без валидации.

Чем пахнет:
— Класс: Mass Assignment → привилегии/перезапись критических данных.
— Вероятность: 8.5/10. GraphQL-разрабы часто забывают про whitelist на backend’е.

Че почем

Эксплойт:

Итог: Ты теперь админ с миллионом на счету.

Обход защиты:
— Если фильтр на isAdmin: Используй альтернативные поля: role: "superuser"accessLevel: 999.
— Если мутация только для авторизованных: Ломай через CSRF или найди публичный эндпоинт createUser.
— Если бэкенд режет JSON: Закодируй поля в base64 и отправь через параметр: "input": {"data": "eyJpc0FkbWluIjp0cnVlfQ=="}.

Доказательство:
Скриншот ответа {"data": {"updateUser": {"id": 1337, "name": "hacked"}}}«Видишь isAdmin: true? Это не баг — это твой новый аккаунт».

Советы

3 вектора для добивания:

  1. Перехват чужих данных: Вставь в мутацию id другого юзера → поменяй ему пароль на 123456.

  1. Массовый дамп: Если есть batchUpdate, кидай массив ids: [1,2,3,...,999] и меняй всем role: "admin".

  2. Скрытые поля: Фаззи поля из документации или утечек: internalAccessTokendebugModebypass2FA.

План атаки:

  1. Собираешь инфу об API через introspection (если включено):

  1. Вытаскиваешь все мутации и их параметры.

  2. Кидаешь в input всё, что пахнет привилегиями: isVerifiedcanDeleteaccountType.

  3. Если успех — получаешь root или сливаешь данные через query { users { id email balance } }.

Бонус от деда

Если в хедерах X-GraphQL-Framework: Apollo/2.3:
— Гугли известные миссконфиги Apollo + автоматизируй фаззинг через graphqlmap.
— Эксплойт:

Мемная аналитика:
«GraphQL Mass Assignment — как заказать пиццу с анчоусами, а получить доступ к ядерным кодам».

Итог:
— Уязвимость: Отсутствие валидации входных данных в мутациях.
— Фикс: Использовать whitelist для полей в input, ограничить introspection.
— Но пока девы верят в «GraphQL сам по себе безопасен» — греби бабло с аккаунтов админов.

Мои курсы