安全决策报告

botlearn

BotLearn 是合法的 AI Agent 社区与能力评测平台,但其 shell 脚本执行广度和上传数据范围超出 SKILL.md 声明,存在中等程度的声明-行为差异。存在供应链风险(外部存档无签名验证)和数据收集过宽的问题。

安装决策优先 来源: ClawHub 扫描时间: 2026/4/7
文件 31
IOC 80
越权项 3
发现 6
最直接的威胁证据

为什么得出这个结论

1/4 个维度触发
阻止
声明与实际能力

发现 3 项声明之外的能力或越权行为。

复核
隐藏执行与外联

提取到 80 个一般风险产物,需要结合上下文判断。

通过
攻击链与高危发现

没有形成明确的恶意路径。

复核
依赖与供应链卫生

发现 1 项需要关注的依赖或供应链线索。

风险分是怎么被拉高的

声明-行为差异(文档未声明的敏感操作) +20

SKILL.md 未声明 cmd_scan 会读取/上传 openclaw logs、doctor output、status output 及跨 workspace 的 UPPERCASE *.md 文件内容

触发词过宽 +8

50+ 触发词覆盖 benchmark/community/social/post/dm/heartbeat/learn/register 等多个领域,容易误激活

外部存档无完整性校验 +10

skill 安装和 SDK 更新均从 API 下载 .tar.gz/.zip 但无签名验证,存在供应链中间人注入风险

敏感信息本地过滤不完整 +7

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.md 的 capability/declared permissions 章节明确列出 scan 操作收集的所有数据类型,或在 core/setup.md 中添加独立的 scan.md 引用说明(benchmark/scan.md 已详细说明但 SKILL.md 入口未引用)
中危 供应链

外部 skill 存档和 SDK 更新无完整性校验

botlearn.sh 的 cmd_install 和 Self-Update Protocol 从 API 下载 .tar.gz/.zip 并直接提取到 $WORKSPACE。无 SHA256 校验、无 GPG 签名验证。如果 BotLearn 服务器被入侵或下载路径被劫持,攻击者可注入恶意文件。

bin/botlearn.sh:488
在下载后比对 SHA256 校验和(core/setup.md 第 47 行提到了 .sha256 文件但 cmd_install 和 Self-Update 均未使用);建议对存档实施签名验证或至少强制校验 SHA256
低危 敏感访问

上传的 openclaw logs 可能包含对话历史片段

cmd_scan 截取 openclaw logs 最后 100 行并 key-filter 后上传。日志可能包含命令执行历史、错误消息和部分对话内容。虽然经过 redact_keys 过滤,但仍存在遗漏风险(如非标准 key 名称的 token)。

bin/botlearn.sh:218
考虑不上传 logs,或在上传前进行更严格的正则过滤(如移除可能的 Bearer token 模式)
低危 文档欺骗

触发词覆盖范围过宽导致意外激活

50+ 触发词分布在多个无关联领域(benchmark、community、social、post、dm、heartbeat、learn、register、claim、setup 等)。agent 可能在用户正常对话中无意触发该 skill。

skill.md:9
收窄触发词范围,移除宽泛词如 'community'、'learn'、'setup'、'report';优先使用短语触发而非单词
低危 敏感访问

读取多个 workspace 的 UPPERCASE *.md 文件内容

cmd_scan 遍历 openclaw config 中声明的所有 workspace 路径,读取每个 workspace 中 basename 为纯大写字母的 *.md 文件(如 CLAUDE.md、AGENTS.md),过滤后写入本地报告并上传。如果 workspace 中存在包含敏感信息的 UPPERCASE README 或 NOTES,可能被收集。

bin/botlearn.sh:308
在 SKILL.md 和 benchmark/scan.md 中明确警告用户不要在 workspace 中放置包含敏感信息的 UPPERCASE *.md 文件;考虑排除已知敏感路径
提示 权限提升

使用 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
在 SKILL.md 顶部 frontmatter 添加 allowed-tools 声明:filesystem:WRITE, network:READ, shell:WRITE,并明确说明 shell 执行仅用于 CLI 封装

声明能力 vs 实际能力

命令执行 阻止
声明 NONE
推断 WRITE
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 执行
网络访问 通过
声明 READ
推断 READ
所有 curl 调用固定指向 www.botlearn.ai,与声明一致
文件系统 阻止
声明 NONE
推断 WRITE
bin/botlearn.sh:cmd_register 写入 $WORKSPACE/.botlearn/credentials.json; cmd_install 写入 $WORKSPACE/skills/<name>/;SKILL.md 未声明 filesystem:WRITE
环境变量 阻止
声明 NONE
推断 READ
cmd_scan 读取 CLAUDE_MODEL、ANTHROPIC_MODEL、SHELL 环境变量并上传;SKILL.md 文档未声明读取环境变量
浏览器 通过
声明 NONE
推断 NONE
无直接浏览器调用
剪贴板 通过
声明 NONE
推断 NONE
无剪贴板操作

可疑产物与外联

中危 外部 URL
https://www.botlearn.ai/api/v2

api/benchmark-api.md:7

中危 外部 URL
https://www.botlearn.ai/api/v2/agents/profile

api/benchmark-api.md:16

中危 外部 URL
https://www.botlearn.ai/api/v2/onboarding/tasks

api/benchmark-api.md:88

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/config

api/benchmark-api.md:128

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/start

api/benchmark-api.md:156

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/submit

api/benchmark-api.md:193

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=summary

api/benchmark-api.md:222

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=full

api/benchmark-api.md:226

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/recommendations

api/benchmark-api.md:233

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/share

api/benchmark-api.md:242

中危 外部 URL
https://www.botlearn.ai/api/v2/benchmark/history?limit=10&offset=0

api/benchmark-api.md:251

中危 外部 URL
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 验证

文件构成

31 个文件 · 7605 行
Markdown 25 个文件 · 5905 行Shell 1 个文件 · 1511 行JSON 5 个文件 · 189 行
需关注文件 · 9
templates/config.json JSON · 18 行
templates/credentials.json JSON · 4 行
bin/botlearn.sh Shell · 1511 行
SKILL.md 未声明 cmd_scan 的完整数据收集范围 · 外部 skill 存档和 SDK 更新无完整性校验 · 上传的 openclaw logs 可能包含对话历史片段 · 读取多个 workspace 的 UPPERCASE *.md 文件内容 · https://www.botlearn.ai$path · https://www.botlearn.ai/api/v2$path · https://www.botlearn.ai/claim/ · https://www.botlearn.ai/api/community/agents/register · https://www.botlearn.ai/claim/$api_key · https://www.botlearn.ai/sdk/skill.json · https://www.botlearn.ai/sdk/botlearn-sdk.tar.gz
core/security.md Markdown · 249 行
https://www.botlearn.ai/claim · https://www.botlearn.ai/api/community/* · https://www.botlearn.ai/api/v2/* · https://www.botlearn.ai/*.md · https://gitee.com/calvin_xhk/botlearn-skills
community/learning.md Markdown · 381 行
https://www.botlearn.ai/posts/xxx* · https://www.botlearn.ai/posts/abc123* · https://www.botlearn.ai/posts/def456* · https://www.botlearn.ai/api/v2/solutions/
core/commands.md Markdown · 473 行
https://www.botlearn.ai/api/v2/benchmark/answer · https://www.botlearn.ai/api/v2/benchmark/ · https://www.botlearn.ai/api/v2/benchmark/history?limit=10 · https://www.botlearn.ai/api/v2/skills/ · https://www.botlearn.ai/api/community/feed?preview=true&exclude_read=true&limit=10&sort=new · https://www.botlearn.ai/api/community/submolts/ · https://www.botlearn.ai/api/community/agents/dm/check
skill.md Markdown · 268 行
触发词覆盖范围过宽导致意外激活 · 使用 Bash 工具执行 shell:WRITE 操作但未在 SKILL.md 声明
community/submolts.md Markdown · 362 行
https://www.botlearn.ai/community/invite/
benchmark/exam.md Markdown · 393 行
https://www.botlearn.ai/benchmark/ · https://www.botlearn.ai · https://www.botlearn.ai/benchmark/share/
其他文件 · onboarding.md · heartbeat.md · messaging.md

安全亮点

单域名网络边界(所有请求固定指向 www.botlearn.ai),无第三方追踪或数据外泄
本地 redact_keys 函数对常见凭证 key 实施预过滤(api_key、token、password、sk-ant-、ghp_ 等)
credentials.json 和 config.json 存储在隔离的 .botlearn/ 目录,不污染工作区
文件写入范围限定在 <WORKSPACE>/skills/botlearn/ 和 <WORKSPACE>/.botlearn/,无系统目录写入
skill.json 包含版本历史和 changelog,可追溯版本演进
Open-source 声明(GitHub/Gitee),代码可审计
Owner Privacy Protection 规则详细,保护用户个人信息
配置文件使用 config.json 权限门控,敏感操作默认需要人工确认
所有脚本为纯文本(.sh/.md/.json),无二进制或混淆代码