LoGGGG2402/CVE-2025-27407

GitHub: LoGGGG2402/CVE-2025-27407

针对 GitLab Direct Transfer 路径中 graphql-ruby 内省模式加载器漏洞(CVE-2025-27407)的最小化本地复现环境,通过伪造源服务器触发恶意 GraphQL schema 加载以证明远程代码执行风险。

Stars: 0 | Forks: 0

# CVE-2025-27407 GitLab Podman 实验环境 用于证明 GitLab Direct Transfer HTTP 路径可以触发存在漏洞的 `graphql-ruby` 内省模式加载器的最小化本地实验环境。该实验环境运行一个存在漏洞的 GitLab CE 容器;PoC 脚本仅在测试期间在进程内启动其伪造的 GitLab 源服务器。 请仅在您拥有或获得明确授权进行测试的系统上运行此实验环境。 ## 文件 | 文件 | 用途 | | --- | --- | | `lab.sh` | 启动、等待、验证并清理 GitLab 实验环境。 | | `poc_host_port_cmd.py` | 一次性 PoC:伪造源服务器 + GitLab 登录/配置/导入触发器。 | ## 环境要求 - 安装了 `podman` 的 Linux 主机 - `curl` - 用于 GitLab 和 PoC 伪造源服务器的空闲本地端口 - 足够的内存和磁盘空间用于运行 GitLab Omnibus 容器 默认值: | 项目 | 默认值 | | --- | --- | | 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!` | | Marker | `/tmp/cve_2025_27407_gitlab_marker` | ## 启动实验环境 端口 `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` 可以通过非管理员用户进行测试。 ## 运行 PoC ``` 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 ``` ## 选项 | 选项 | 用途 | 默认值 | | --- | --- | --- | | `--host` | 要测试的 GitLab 主机 | 必填 | | `--port` | 要测试的 GitLab HTTP 端口 | 必填 | | `--cmd` | 在 GitLab 运行时中执行的命令 | `touch /tmp/cve_2025_27407_gitlab_marker` | | `--listen-port` | 本地伪造源服务器端口 | `8001` | | `--wait-seconds` | 为异步 GitLab 后台 worker 保持伪造源服务器存活的时间 | `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` | ## 故障排除 - 如果 `8080` 端口被占用,请使用 `GITLAB_HTTP_PORT=18080` 运行 `./lab.sh up`。 - 如果 PoC 无法绑定其源端口,请将 `--listen-port` 更改为未使用的端口。 - 如果标记验证与后台导入 worker 发生竞争,请增加 `--wait-seconds` 的值或重新运行 `MARKER="$MARKER" ./lab.sh verify`。 - 如果 GitLab 尚未准备就绪,请重新运行 `GITLAB_HTTP_PORT=18080 ./lab.sh wait`。 - 如果之前的实验环境卡住,请运行 `./lab.sh cleanup` 并重新开始。 ## 清理 ``` ./lab.sh cleanup ``` 这将移除 GitLab 容器、旧版实验环境中遗留的任何伪造源容器以及实验网络。但不会移除已下载的 Podman 镜像。
标签:Bash, CISA项目, Cutter, CVE-2025-27407, GitLab, GraphQL, HTTP直接传输, Maven, Omnibus, PoC, Podman, Python, Ruby, Web截图, 伪造服务器, 内省模式, 安全测试, 容器安全, 攻击性安全, 数字取证, 无后门, 暴力破解, 本地靶场, 概念验证, 漏洞验证, 知识库, 自动化脚本, 逆向工具