2026 年 1 月 27 日,CVE-2026-25253 成为首个被分配给智能体 AI 系统的 CVE。OpenClaw 中的一个严重 WebSocket 劫持漏洞使得攻击者能够对任何暴露的实例(包括仅绑定到 localhost 的实例)进行一键远程代码执行。
同一周,ClawHavoc 活动将 341+ 个恶意技能渗透进了 OpenClaw 的市场。从 ClawHub 安装的每个技能都以与 OpenClaw 本身相同的权限运行——完全磁盘访问、OAuth 令牌、API 密钥。没有沙箱。没有审计追踪。没有紧急终止开关。
"从 ClawHub 安装技能会使其获得与 OpenClaw 本身相同的资源访问权限。默认情况下,技能之间没有沙箱隔离。" — DEV Community 安全分析,2026 年 4 月
数据一览:
AgentBox 是结构性的修复方案。不是补丁——而是一个运行时。
你运行的每个代理都能获得:
使用 AgentBox 之前 使用 AgentBox 之后
───────────────── ──────────────
代理 → 完全磁盘访问 ❌ 代理 → 仅允许的路径 ✅
代理 → 所有网络 ❌ 代理 → 仅允许的主机 ✅
代理 → 原始机密 ❌ 代理 → 作用域令牌 ✅
无审计追踪 ❌ 每个操作都被记录 ✅
无紧急终止开关 ❌ 100ms 内终止 ✅
技能以 root 权限运行 ❌ 内核隔离沙箱 ✅
# 安装
go install github.com/siyad01/agentbox/cmd/agentbox@latest
# 运行前验证清单
agentbox validate manifests/email-sorter.yaml
# 在沙箱中运行代理
agentbox run --manifest manifests/email-sorter.yaml python agent.py
# 查看代理执行了哪些操作
agentbox audit --log logs/email-sorter-audit.log
# 验证日志未被篡改
agentbox verify logs/email-sorter-audit.log
# 管理机密
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
每个代理都精确声明其所需内容。未列出的内容均不可访问。
name: "email-sorter"
version: "1.0.0"
description: "读取收件箱,分类邮件,写入已分类文件夹"
runtime: docker # 或:gvisor(内核级)、firecracker(MicroVM)
permissions:
filesystem:
read:
- "~/Documents/inbox"
write:
- "~/Documents/sorted"
deny: # 始终被阻止——即使出现在读取列表中
- "~/.ssh"
- "~/.aws"
- "~/.config"
- "/etc"
network:
allow:
- "api.anthropic.com"
- "gmail.googleapis.com"
deny:
- "*" # 阻止其他一切
tools:
allow:
- "read_file"
- "write_file"
- "list_*"
deny:
- "execute_shell" # 永远不允许 shell 访问
- "*_delete" # 不允许删除工具
credentials:
- ANTHROPIC_API_KEY # 运行时从保险库注入
- GMAIL_TOKEN # 代理永远看不到原始值
limits:
max_tokens: 50000 # LLM 令牌预算
max_duration: "30m" # 30 分钟后终止
max_memory_mb: 256 # 内存上限
max_requests: 500 # 最大工具调用次数
audit:
log_level: full
alert_on:
- filesystem_deny
- network_deny
- token_budget_80pct
log_path: "logs/email-sorter-audit.log"
agentbox run --manifest agent.yaml python agent.py
│
▼
┌─────────────────────────────────────────────────────┐
│ 策略引擎 │
│ 解析清单 → 构建允许/拒绝列表 │
│ 验证签名 → 拒绝未签名的技能 │
│ 从保险库注入凭据 │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 隔离层 │
│ │
│ Docker → 容器 + seccomp + cap-drop │
│ gVisor → 用户空间内核,系统调用拦截 │
│ Firecracker → 每个代理专用的 MicroVM 内核 │
│ │
│ 文件系统:仅挂载声明的路径 │
│ 网络: 仅可访问声明的主机 │
│ 能力: 全部丢弃,不添加任何回退 │
└──────────────────────┬──────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
审计日志器 凭据保险库 资源监控器
(哈希链) AES-256-GCM 自动终止
每个操作 作用域令牌 超限时
都被记录
其他所有沙箱都在容器边界处停止。利用内核漏洞的代理可以逃逸。
gVisor 在到达主机内核之前拦截每个系统调用:
代理尝试:write("/home/user/.ssh/id_rsa")
│
▼
gVisor 用户空间内核
│
路径在拒绝列表中?→ 是
│
▼
立即返回 EPERM
主机内核永远不会看到此系统调用
提示注入无法跨越此层
agentbox <command> [options]
命令:
run 在沙箱中运行代理
validate 验证清单文件
kill 终止正在运行的代理
audit 查看代理审计日志
verify 验证审计日志完整性
vault 管理加密凭据
serve 启动 REST API 服务器
version 显示版本
示例:
agentbox validate manifests/email-sorter.yaml
agentbox run --manifest manifests/email-sorter.yaml python agent.py
agentbox kill agent-abc123
agentbox audit --log logs/email-sorter.log --deny
agentbox audit --log logs/email-sorter.log --last 1h
agentbox verify logs/email-sorter.log
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
agentbox vault delete OLD_KEY
agentbox serve :8081
使用 agentbox serve 启动(默认::8081)。
# 列出正在运行的代理
curl http://localhost:8081/api/agents
# 启动代理
curl -X POST http://localhost:8081/api/agents \
-H "Content-Type: application/json" \
-d '{"manifest":"manifests/email-sorter.yaml","command":["python","agent.py"]}'
# 终止代理
curl -X DELETE http://localhost:8081/api/agents/abc123
# 查询审计日志
curl "http://localhost:8081/api/audit?deny=true&agent=email-sorter"
每个代理操作都记录在仅追加、哈希链式的 JSON Lines 文件中:
{"id":1,"hash":"a3f2...","prev_hash":"genesis","timestamp":"2026-05-05T09:00:00Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"agent_start","allowed":true,"resource":"manifests/email-sorter.yaml"}
{"id":2,"hash":"b7c1...","prev_hash":"a3f2...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_allow","allowed":true,"resource":"read:/home/user/Documents/inbox/mail.txt","rule":"filesystem.read: ~/Documents/inbox"}
{"id":3,"hash":"d9e4...","prev_hash":"b7c1...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_deny","allowed":false,"resource":"read:/home/user/.ssh/id_rsa","rule":"filesystem.deny: ~/.ssh","reason":"path is explicitly denied"}
篡改检测:
agentbox verify logs/email-sorter-audit.log
✅ 审计日志完整
条目数:47(ID 1–47)
哈希链:未中断
更改任何条目中的任何字符,验证将立即失败——链已断裂。
# 存储机密(永不记录,永不作为环境变量明文)
agentbox vault add ANTHROPIC_API_KEY
# 列出已存储的凭据名称(值永不显示)
agentbox vault list
# 验证凭据可被解密
agentbox vault test ANTHROPIC_API_KEY
# 轮换凭据
agentbox vault add ANTHROPIC_API_KEY # add 会更新现有项
凭据使用 AES-256-GCM 加密。主密钥由你的保险库密码派生——永不存储在磁盘上。在代理启动时,AgentBox 将凭据作为作用域环境变量注入。代理正常调用 os.getenv("ANTHROPIC_API_KEY")——它永远不会接触保险库。
AgentBox 会终止超出其声明限制的代理:
# 此代理配置了 max_duration: 5s
agentbox run --manifest manifests/timeout-test.yaml python long_running_agent.py
Agent started
tick 1
tick 2
tick 3
tick 4
tick 5
🛑 Killing agent timeout-test: duration limit exceeded: 5s
⚠️ Agent timeout-test exited code 137 in 5.2s
退出代码 137 = SIGKILL。干净关闭,写入最终审计条目。
# 克隆
git clone https://github.com/siyad01/agentbox
cd agentbox
# 构建
go build -o agentbox ./cmd/agentbox/
# 运行测试(27 个测试,全部通过)
go test ./...
# 全局安装
go install ./cmd/agentbox/
要求:
agentbox/
├── cmd/agentbox/main.go ← CLI 入口点
├── internal/
│ ├── policy/
│ │ ├── manifest.go ← YAML 清单模式
│ │ ├── parser.go ← 验证 + 默认值
│ │ └── engine.go ← 拒绝优先决策引擎(20 个测试)
│ ├── audit/
│ │ ├── logger.go ← 仅追加 SHA-256 哈希链日志
│ │ ├── verifier.go ← 篡改检测
│ │ └── reader.go ← 查询 + 过滤
│ ├── vault/
│ │ ├── store.go ← AES-256-GCM 加密凭据存储
│ │ └── injector.go ← 运行时注入(7 个测试)
│ ├── sandbox/
│ │ ├── sandbox.go ← Sandbox 接口
│ │ ├── docker.go ← Docker 后端
│ │ ├── gvisor.go ← gVisor 后端(内核级)
│ │ ├── manager.go ← 代理生命周期管理
│ │ └── util.go ← WSL2 检测、路径辅助
│ ├── monitor/
│ │ └── enforcer.go ← 资源限制 + 自动终止
│ └── api/
│ └── server.go ← :8081 上的 REST API
└── manifests/
├── email-sorter.yaml ← 生产示例
└── timeout-test.yaml ← 限制执行示例
默认拒绝优先。 代理以零权限启动。每项能力都必须显式声明。
拒绝列表始终优先。 即使某个路径同时出现在读取列表和拒绝列表中,拒绝列表也优先。没有例外。
使用 gVisor 进行内核级执行。 Seccomp 过滤器和能力丢弃在系统调用边界处运行。模型输出——攻击者可控制的——在用户空间中运行,无法修改内核级策略。
凭据隔离。 保险库主密钥永不存储在磁盘上。凭据在沙箱启动时作为短时作用域令牌注入,退出时丢弃。代理进程被攻破不会危及凭据保险库。
不可变审计追踪。 SHA-256 哈希链意味着追溯性日志修改可被检测。任何条目的任何更改都会从该点起破坏链。
有关漏洞报告,请参阅 SECURITY.md。
请参阅 CONTRIBUTING.md。
Apache 2.0——可自由使用、修改和分发。请参阅 LICENSE。
使用 Go 构建 · 核心安全功能零外部依赖 · 一条命令即可自托管
如果 CVE-2026-25253 让你担忧,这就是解决方案。给它一个 ⭐
| 保护措施 | 实现方式 |
|---|
| 零信任权限 | 代理精确声明其所需内容。其他一切均不可访问。 |
| 内核级隔离 | gVisor 拦截每个系统调用。提示注入无法跨越此边界。 |
| 凭据保险库 | AES-256-GCM 加密。代理永远看不到原始机密——只能看到作用域令牌。 |
| 不可变审计日志 | SHA-256 哈希链。每个操作都被记录。防篡改。 |
| 紧急终止开关 | 在 100ms 内终止任何代理。超限时自动终止。 |
| 资源限制 | 时间、内存、请求次数——在运行时强制执行,而非配置时。 |
| 方法 | 端点 | 描述 |
|---|
| GET | /health | 健康检查 |
| GET | /dashboard | Web 仪表板 |
| GET | /api/agents | 列出所有代理 |
| POST | /api/agents | 启动新代理 |
| DELETE | /api/agents/:id | 终止代理 |
| GET | /api/audit | 查询审计日志 |
| 功能 | AgentBox | OpenClaw 沙箱 | 仅 Docker | AccuKnox |
|---|
| 开源(Apache 2.0) | ✅ | ✅ | ✅ | ❌ |
| 可自托管 | ✅ | ✅ | ✅ | 仅 K8s |
| gVisor / 内核隔离 | ✅ | ❌ | ❌ | ✅ |
| 凭据保险库 | ✅ | ❌ | ❌ | ✅ |
| 不可变审计日志 | ✅ | ❌ | ❌ | ✅ |
| 超限自动终止 | ✅ | ❌ | ❌ | ✅ |
| 框架无关 | ✅ | ❌(仅 OpenClaw) | ✅ | ✅ |
| 单二进制部署 | ✅ | ❌ | ✅ | ❌ |