
Доказательство концепции для CVE-2024-32002: уязвимость внедрения пути подмодуля Git.
При решении машины Compiled на платформе Hack The Box я столкнулся с любопытным поведением, связанным с Git и подмодулями. При более глубоком исследовании я нашел эту отличную статью исследователя Амала Мурали, в которой подробно описывается техника внедрения пути через .gitmodules. На основе этого я решил изучить CVE-2024-32002 и создать практическую PoC, демонстрирующую реальное влияние уязвимости.
CVE-2024-32002 эксплуатирует критическую ошибку в Git, связанную с разрешением путей подмодулей. Git позволяет репозиториям включать подмодули, определенные в файле .gitmodules, указывая путь и URL. Уязвимость возникает, когда путь манипулируется так, чтобы указывать внутрь каталога .git, который хранит метаданные и внутренние настройки репозитория.
При комбинировании:
.gitmodules для установки пути A/modules/xa → .git…Git обманывается и разрешает A/modules/x как .git/modules/x, то есть внутри внутреннего каталога .git. Это позволяет злоумышленнику внедрить произвольные файлы в качестве вредоносных хуков, которые могут быть выполнены при легитимных операциях, таких как checkout, merge или clone.
Эта уязвимость представляет собой вектор удаленного выполнения кода, особенно опасный в средах CI/CD, автоматизациях или общих репозиториях.
setup.shЭтот скрипт автоматизирует создание уязвимой среды и воспроизводит последствия ошибки:
hook-repo) содержащий хук post-checkout, который записывает в /tmp/teste.txtmain-repo) и добавляет подмодуль.gitmodules для перенаправления пути подмодуля на A/modules/xa → .git, заставляя A/modules/x разрешиться как .git/modules/x.gitmodules в индекс с помощью git update-index --index-infocloned-repo) с --recursive, инициализируя подмодуль.git/hooks/ и выполняет git checkout HEAD для запуска эксплойтаВ случае успеха хук выполняется, и файл /tmp/teste.txt создается с содержимым:
joao was here
Этот репозиторий включает Dockerfile, который:
docker build -t git-cve-poc .
docker run --rm -it git-cve-poc
Эта уязвимость затрагивает версии Git до 2.45.1. Ошибка была исправлена с помощью более строгих проверок разрешения путей подмодулей. Репозитории, использующие подмодули, должны быть проверены, а автоматизированные среды — немедленно обновлены.
Этот проект предназначен только для образовательных и исследовательских целей. Не используйте в производственных средах. Цель — продемонстрировать техническое воздействие уязвимости и продвигать хорошие практики безопасности.