CVE-2024-6678 | GitLab: Pipeline Schedule Arbitrary User Trigger
В процессе написания нового ресерча, обнаружил, что для довольно интересной CVE под Gitlab - CVE-2024-6678 (9.9/10 CVSS) по какой-то причине всё ещё нет публичного PoC’a. Пришлось написать его самому 🤷♀️
Теперь делюсь с вами, вдруг кому пригодится.
Суть уязвимости в том, что при определённых условиях злоумышленник может запускать пайплайны от имени любого пользователя. Это даёт возможность атакующему получить доступ к внутренним репозиториям и закрытым проектам, стащить креды и токены, и, как следствие - получить RCE. Уязвимость, кстати, не замечали целых десять лет (уязвимы версии CE/EE с 8.14 до 17.1.7, версии с 17.2 до 17.2.5 и версии с 17.3 до 17.3.2).
Цепочка:
➡️Developer триггерит Pipeline Schedule, созданный Owner/Maintainer
➡️Пайплайн стартует с всеми переменными расписания (DB_PASSWORD, SSH_PRIVATE_KEY, API-токены и т.д.)
➡️Если у атакующего есть push-возможности (Developer обычно имеет), он подменяет .gitlab-ci.yml в незащищённой ветке (develop/staging) - добавляет туда отправку env на свой сервер или реверс-шелл
➡️GitLab Runner исполняет этот пайплайн с полным доступом к секретам и окружению
➡️PoC⬅️
💫 @pentestnotes
В процессе написания нового ресерча, обнаружил, что для довольно интересной CVE под Gitlab - CVE-2024-6678 (9.9/10 CVSS) по какой-то причине всё ещё нет публичного PoC’a. Пришлось написать его самому 🤷♀️
Теперь делюсь с вами, вдруг кому пригодится.
Суть уязвимости в том, что при определённых условиях злоумышленник может запускать пайплайны от имени любого пользователя. Это даёт возможность атакующему получить доступ к внутренним репозиториям и закрытым проектам, стащить креды и токены, и, как следствие - получить RCE. Уязвимость, кстати, не замечали целых десять лет (уязвимы версии CE/EE с 8.14 до 17.1.7, версии с 17.2 до 17.2.5 и версии с 17.3 до 17.3.2).
Цепочка:
➡️Developer триггерит Pipeline Schedule, созданный Owner/Maintainer
➡️Пайплайн стартует с всеми переменными расписания (DB_PASSWORD, SSH_PRIVATE_KEY, API-токены и т.д.)
➡️Если у атакующего есть push-возможности (Developer обычно имеет), он подменяет .gitlab-ci.yml в незащищённой ветке (develop/staging) - добавляет туда отправку env на свой сервер или реверс-шелл
➡️GitLab Runner исполняет этот пайплайн с полным доступом к секретам и окружению
➡️PoC⬅️
💫 @pentestnotes