botlearn
BotLearn 是合法的 AI Agent 社区与能力评测平台,但其 shell 脚本执行广度和上传数据范围超出 SKILL.md 声明,存在中等程度的声明-行为差异。存在供应链风险(外部存档无签名验证)和数据收集过宽的问题。
为什么得出这个结论
1/4 个维度触发发现 3 项声明之外的能力或越权行为。
提取到 80 个一般风险产物,需要结合上下文判断。
没有形成明确的恶意路径。
发现 1 项需要关注的依赖或供应链线索。
风险分是怎么被拉高的
SKILL.md 未声明 cmd_scan 会读取/上传 openclaw logs、doctor output、status output 及跨 workspace 的 UPPERCASE *.md 文件内容
50+ 触发词覆盖 benchmark/community/social/post/dm/heartbeat/learn/register 等多个领域,容易误激活
skill 安装和 SDK 更新均从 API 下载 .tar.gz/.zip 但无签名验证,存在供应链中间人注入风险
redact_keys 仅过滤已知 key 名称,grep+sed 解析 JSON 不严谨,可能遗漏嵌入的凭证或非标准命名的敏感字段
最关键的证据
SKILL.md 未声明 cmd_scan 的完整数据收集范围
cmd_scan 函数会读取并上传:1) openclaw logs(可能包含命令历史和对话片段);2) openclaw doctor --deep --non-interactive(诊断输出);3) openclaw status --all --deep(状态输出);4) 跨多个 workspace 的 UPPERCASE *.md 文件完整内容;5) ~/.openclaw/openclaw.json 配置。这些操作未在 SKILL.md 的任何章节中明确声明。
bin/botlearn.sh:218 外部 skill 存档和 SDK 更新无完整性校验
botlearn.sh 的 cmd_install 和 Self-Update Protocol 从 API 下载 .tar.gz/.zip 并直接提取到 $WORKSPACE。无 SHA256 校验、无 GPG 签名验证。如果 BotLearn 服务器被入侵或下载路径被劫持,攻击者可注入恶意文件。
bin/botlearn.sh:488 上传的 openclaw logs 可能包含对话历史片段
cmd_scan 截取 openclaw logs 最后 100 行并 key-filter 后上传。日志可能包含命令执行历史、错误消息和部分对话内容。虽然经过 redact_keys 过滤,但仍存在遗漏风险(如非标准 key 名称的 token)。
bin/botlearn.sh:218 触发词覆盖范围过宽导致意外激活
50+ 触发词分布在多个无关联领域(benchmark、community、social、post、dm、heartbeat、learn、register、claim、setup 等)。agent 可能在用户正常对话中无意触发该 skill。
skill.md:9 读取多个 workspace 的 UPPERCASE *.md 文件内容
cmd_scan 遍历 openclaw config 中声明的所有 workspace 路径,读取每个 workspace 中 basename 为纯大写字母的 *.md 文件(如 CLAUDE.md、AGENTS.md),过滤后写入本地报告并上传。如果 workspace 中存在包含敏感信息的 UPPERCASE README 或 NOTES,可能被收集。
bin/botlearn.sh:308 使用 Bash 工具执行 shell:WRITE 操作但未在 SKILL.md 声明
allowed-tools 映射要求 SKILL.md 声明 allowed-tools,但 skill.md 中无此字段。bin/botlearn.sh 使用 set -euo pipefail、node -e、grep+sed 解析 JSON、subprocess 调用外部命令,属于 shell:WRITE 级别能力。
skill.md:1 声明能力 vs 实际能力
SKILL.md 无 allowed-tools 声明,但 bin/botlearn.sh 使用 set -euo pipefail、subprocess 调用、node -e 执行 JS;SKILL.md 文档 Operational Principles 仅声明 'Single domain — All network requests go to www.botlearn.ai',未提及 shell 执行 所有 curl 调用固定指向 www.botlearn.ai,与声明一致 bin/botlearn.sh:cmd_register 写入 $WORKSPACE/.botlearn/credentials.json; cmd_install 写入 $WORKSPACE/skills/<name>/;SKILL.md 未声明 filesystem:WRITE cmd_scan 读取 CLAUDE_MODEL、ANTHROPIC_MODEL、SHELL 环境变量并上传;SKILL.md 文档未声明读取环境变量 无直接浏览器调用 无剪贴板操作 可疑产物与外联
https://www.botlearn.ai/api/v2 api/benchmark-api.md:7
https://www.botlearn.ai/api/v2/agents/profile api/benchmark-api.md:16
https://www.botlearn.ai/api/v2/onboarding/tasks api/benchmark-api.md:88
https://www.botlearn.ai/api/v2/benchmark/config api/benchmark-api.md:128
https://www.botlearn.ai/api/v2/benchmark/start api/benchmark-api.md:156
https://www.botlearn.ai/api/v2/benchmark/submit api/benchmark-api.md:193
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=summary api/benchmark-api.md:222
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=full api/benchmark-api.md:226
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/recommendations api/benchmark-api.md:233
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/share api/benchmark-api.md:242
https://www.botlearn.ai/api/v2/benchmark/history?limit=10&offset=0 api/benchmark-api.md:251
https://www.botlearn.ai/api/v2/benchmark/dimensions api/benchmark-api.md:258
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| curl | 系统自带 | 系统命令 | 否 | 用于所有 HTTP 请求,无版本控制 |
| node | 任意 | 可选依赖 | 否 | 用于可靠 JSON 构建和解析,非必需(存在 grep+sed 回退) |
| tar | 系统自带 | 系统命令 | 否 | 用于提取下载的 skill 存档 |
| botlearn.ai API | v2 | 网络 | 否 | 外部依赖,无版本锁定,存档下载无 SHA256 验证 |
文件构成
templates/config.json templates/credentials.json bin/botlearn.sh core/security.md community/learning.md core/commands.md skill.md community/submolts.md benchmark/exam.md