
Эксплойт на Python для CVE-2022-36804, обеспечивающий удалённое выполнение команд и передачу файлов на уязвимых Bitbucket Server/Data Center через специально сформированные архивные запросы.
Этот репозиторий содержит скрипт эксплойта на Python для уязвимости CVE-2022-36804 в Atlassian Bitbucket Server/Data Center. Проблема представляет собой дефект внедрения команд в потоке Git archive, когда специально сформированные параметры prefix могут интерпретироваться сервером и выполняться как shell-команды.
CVE-2022-36804 — это уязвимость удалённого выполнения команд в Bitbucket Server/Data Center. Она вызвана небезопасной обработкой значения prefix в конечной точке archive, что позволяет данным, контролируемым атакующим, попадать в вызов shell через Git. Последствие — выполнение команд с аутентификацией или без неё в зависимости от пути и модели развёртывания.
Этот скрипт нацелен на уязвимую конечную точку archive и использует специально сформированный запрос для запуска инъекции.
Этот PoC предназначен для затронутых сборок Bitbucket Server/Data Center, охватываемых бюллетенем Atlassian по CVE-2022-36804. На практике уязвимый диапазон включает более старые выпуски Bitbucket Server/Data Center 7.x/8.x до исправленных версий, перечисленных Atlassian. Он не предназначен для пропатченных или обновлённых сборок.
Используйте его только против систем, которыми вы владеете или на тестирование которых у вас есть явное разрешение.
Скрипт отправляет запрос на:
/rest/api/latest/projects/{project}/repos/{repo}/archive
со специально сформированным параметром prefix, который выглядит так:
ax%00--exec=`<command>`%00--remote=origin
Суть трюка в эксплуатации нулевого байта / пути команд Git, чтобы сервер в итоге выполнил shell-команду из archive-запроса. При необходимости скрипт оборачивает команду в gzip + base64, чтобы вывод возвращался компактно и декодировался локально.
Скрипт поддерживает два основных режима:
python cve-2022-36804_v5.py <url> <username> <password> -p <project> -r <repo> -c "whoami"
Параметры:
-c, --command: выполнить команду--no-encode: отправить сырую команду без обёртки gzip+base64-p, --project: ключ проекта Bitbucket-r, --repo: slug репозитория Bitbucketpython cve-2022-36804_v5.py <url> <username> <password> -p <project> -r <repo> -f /path/to/local.bin -o /tmp/remote.bin
Этот режим читает локальный файл по частям, кодирует каждый фрагмент в base64 и использует эксплойт для восстановления файла на сервере по целевому пути.
requests.Session с базовой аутентификацией.verify = False), чтобы упростить тестирование конечных точек с самоподписанными сертификатами.Этот инструмент предназначен только для авторизованных исследований в области безопасности и контролируемого тестирования. Использование его против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения, незаконно и неэтично.