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截图, 代码沙箱, 安全防御评估, 容器安全, 自定义脚本, 请求拦截