mehrabr/cleanstart-mcp

GitHub: mehrabr/cleanstart-mcp

面向 MCP 协议的 AI agent 代码执行沙箱,通过使用零 CVE、已签名并附带 SBOM 的 CleanStart 加固容器替代公共基础镜像,消除沙箱环境自身继承的供应链漏洞。

Stars: 0 | Forks: 0

# cleanstart-mcp 由 [Mehrab Rahman](https://mehrabr.com) 开发,旨在作为验证现有 MCP 沙箱与适当的供应链安全之间差距的概念证明。 ## 问题所在 所有现有的 MCP 代码沙箱都默认使用公共基础镜像: ``` python:3.11 → 169 CVEs node:20 → 213 CVEs golang:1.22 → 88 CVEs ubuntu:22.04 → 247 CVEs ``` 当 AI agent 在基于这些镜像构建的沙箱中执行代码时,沙箱本身也会继承所有这些漏洞。被破坏的依赖项或经过提示词注入的 payload 将拥有现成的权限提升路径来加以利用。 LiteLLM 供应链攻击(2026 年 3 月)表明,**容器用户受到了保护;而 pip 用户则没有**。容器就是安全层——但前提是容器必须是干净的。 ## 解决方案 ``` cleanstart/python:latest-dev → 0 CVEs ✓ signed ✓ SBOM ✓ ~65MB cleanstart/node:latest-dev → 0 CVEs ✓ signed ✓ SBOM ✓ ~95MB cleanstart/go:latest-dev → 0 CVEs ✓ signed ✓ SBOM ✓ ~120MB ``` **只需修改一行。相同的 agent 工作流。零继承漏洞。** ## 安装说明 **前置条件:** Docker Desktop 正在运行,Node.js 18+ ``` git clone https://github.com/mehrabr/cleanstart-mcp cd cleanstart-mcp npm install ``` ### 在 Claude Desktop 中配置 添加到 `~/Library/Application Support/Claude/claude_desktop_config.json`: ``` { "mcpServers": { "cleanstart": { "command": "node", "args": ["/absolute/path/to/cleanstart-mcp/cleanstart-mcp-server.mjs"] } } } ``` 重启 Claude Desktop。该服务器将出现在你的 MCP 工具中。 ### 在 Claude Code 中配置 ``` claude mcp add cleanstart -- node /path/to/cleanstart-mcp/cleanstart-mcp-server.mjs ``` ## 工具 ### `run_code` 在 CleanStart 加固容器中执行代码片段。 ``` runtime: python | node | go | bash network: false (default — disabled for security) memory_mb: 256 (default) timeout_seconds: 30 (default, max 120) max_output_kb: 256 (default — output truncated past this) verify: false (default — set true to require a valid signature, fail-closed) ``` 自动应用安全默认设置: - `--cap-drop=ALL` — 无 Linux capabilities - `--security-opt=no-new-privileges` — 无权限提升 - `--read-only` — 不可变容器文件系统 - `--network=none` — 默认无网络访问权限 - `--user=65534` — 以 nobody 身份运行,而非 root - `--memory=256m` — 防止资源耗尽 - `--pids-limit=50` — 防止 fork bombs ### `list_images` 显示所有可用的 CleanStart 镜像,包括 CVE 计数和大小比较。 ### `compare_images` 并排安全比较:公共镜像与等效的 CleanStart 镜像。 ``` Input: runtime = "python" Output: python:3.11 (169 CVEs, 950MB) vs cleanstart/python (0 CVEs, 65MB) + one-line Dockerfile migration ``` ### `scan_image` 通过 trivy 扫描任何 Docker 镜像的 CVE(如果未安装 trivy,则使用代表性数据)。 ### `verify_image` 根据你配置的签名策略验证镜像的 cosign 签名(参见[签名验证](#signature-verification))。报告 `verified` / `failed` / `no-policy` / `skipped`。 ### `sbom_inspect` 检查镜像的软件物料清单(SBOM)——包括包数量、格式和部分软件包示例。如果已安装,则使用 `syft`,否则使用通过 `cosign` 附加的 SBOM。 ## 签名验证 “已签名的镜像”只有在检查签名后才有意义。将服务器指向一个签名者身份,它将在运行前使用 `cosign` 进行验证: ``` # Keyless (Fulcio/Sigstore) 身份: export CLEANSTART_COSIGN_IDENTITY='https://github.com/cleanstart/.*' export CLEANSTART_COSIGN_ISSUER='https://token.actions.githubusercontent.com' # …或者使用 public key: export CLEANSTART_COSIGN_KEY='/path/to/cosign.pub' # 使验证成为强制性 — 拒绝运行未验证的 images: export CLEANSTART_REQUIRE_SIGNATURE=1 ``` 在未配置策略的情况下,代码仍会运行,但结果横幅会显示 `Signature: ⚠ no-policy`——验证状态始终会被报告,绝不会被静默跳过。针对单次调用,可以在 `run_code` / `run_file` 中传入 `verify: true` 来要求对该次运行强制进行验证。通过在镜像仓库中填写 `digest` 字段,可以通过摘要固定镜像。 有关完整的威胁模型,请参阅 [SECURITY.md](SECURITY.md)。 ## 在 Claude 中的示例用法 配置完成后,你可以询问 Claude: ## 为什么这很重要 Chainguard(2026 年 3 月)推出了 **Agent Skills**——用于加固告诉 agent 该做什么的*指令文件*。这是技能层。 本工具用于加固*执行层*——即运行 agent 代码的容器。攻击面不同,但供应链安全原则相同。 ``` ┌─────────────────────────────────────────┐ │ AI Agent │ │ ├── Skills (Chainguard Agent Skills) │ ← instruction layer │ └── Code Execution Sandbox │ │ └── Base Image (this tool) │ ← runtime layer ← CleanStart └─────────────────────────────────────────┘ ``` ## 演示脚本(用于 PoC/面试) ``` # 1. 启动服务器(在一个 terminal 中) node cleanstart-mcp-server.mjs # 2. 在 Claude Desktop 中,询问: # "使用 cleanstart 工具来比较 python images" # → 显示 169 个 CVEs 对比 0 个 CVEs,950MB 对比 65MB # 3. 要求 Claude 运行代码: # "在 CleanStart sandbox 中运行此 Python 脚本: # import sys; print(f'Python {sys.version}'); print('No CVEs here.')" # → 在 cleanstart/python 内部执行,并显示完整的安全 profile # 4. 展示差异: # "尝试在 CleanStart python container 中查找 curl" # → Claude 尝试:docker run cleanstart/python which curl # → 未找到 — 加固在实践中可见 ``` ## 路线图 - [x] 添加 `verify_image` 工具 —— cosign 签名验证 - [x] 添加 `sbom_inspect` 工具 —— 解析并显示 CleanStart 镜像的 SBOM - [ ] 支持 CleanStart 企业级仓库(认证拉取) - [ ] 添加 waddler 集成 —— 在 CleanStart 容器中运行 DuckDB ETL pipeline - [ ] Kubernetes admission webhook 示例 *基于 [Model Context Protocol](https://modelcontextprotocol.io) 构建 · 镜像来自 [CleanStart](https://cleanstart.com) · 由 [Trivy](https://trivy.dev) 进行扫描*
标签:Docker, Google Gemini, MCP服务, MITM代理, Web截图, 代码沙箱, 安全防御评估, 容器安全, 自定义脚本, 请求拦截