
GitLab Arbitrary File Read Exploit
Этот скрипт обеспечивает удаленное выполнение кода для GitLab Community Edition (CE) и Enterprise Edition (EE). Уязвимость CVE представляет собой произвольное чтение файлов, которое позволяет извлечь secret_key_base Rails, загрузив файл secrets.yaml GitLab. Это, в свою очередь, позволяет получить выполнение кода, подписав собственный cookie experimentation_subject_id, который GitLab использует внутренне для A/B-тестирования. Полезная нагрузка, встроенная в cookie, содержит уязвимость десериализации, которая позволяет выполнять код на экземпляре GitLab.
Произвольное чтение файлов существует в GitLab EE/CE 8.5 и более поздних версиях. Эта уязвимость была исправлена в версиях 12.9.1, 12.8.8 и 12.7.8. Однако RCE затрагивает только версию 12.4.0 и выше, когда был введен уязвимый cookie experimentation_subject_id.
Протестировано на версии 12.8.1
Модуль тестировался с python 3.9 и требует следующих зависимостей:
Если у вас установлен pipenv, вы можете быстро начать, выполнив pipenv install и pipenv shell, чтобы получить оболочку в виртуальном окружении pipenv.
$ ./cve_2020_10977.py --help
usage: cve_2020_10977.py [-h] --url URL -u USERNAME -p PASSWORD [--cmd CMD]
optional arguments:
-h, --help show this help message and exit
--url URL Target URL
-u USERNAME, --username USERNAME
Gitlab username
-p PASSWORD, --password PASSWORD
Gitlab password
--cmd CMD Command to execute
Включен Makefile, упрощающий локальную разработку или тестирование эксплойта. Он зависит от docker и docker-compose для быстрого развертывания локальной версии GitLab, уязвимой к этой CVE.
make up
Запустит локальный экземпляр GitLab и экземпляр Debian, чтобы упростить тестирование обратного шелла. Экземпляр GitLab будет доступен на вашем localhost через порт 5580. Наличие этого дополнительного образа дает вам IP-адрес, доступный из Docker-сети. Можно сделать ваш localhost доступным из Docker-контейнера, но, на мой взгляд, это не стоит усилий, и я определенно не хочу рекламировать использование --privileged
Подключиться к экземпляру Debian (RHOST) легко можно с помощью:
make shell
Это позволяет подготовить обратный шелл с помощью nc -lnvp 9000.
Когда это сделано, вы готовы протестировать эксплойт. Вы можете выполнить:
make exploit
Для запуска эксплойта: он не выполнит RCE, а вместо этого выведет секрет GitLab Rails.
make exploit-rce
Сцепит эту CVE с полезной нагрузкой RCE, упомянутой выше, чтобы получить обратный шелл.
Удачного хакинга!