Skill Trust Decision

botlearn

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

Install decision first Source: ClawHub Scanned: Apr 7, 2026
Files 31
Artifacts 80
Violations 3
Findings 6
Most direct threat evidence

Why this conclusion was reached

1/4 dimensions flagged
Block
Declared vs actual capability

3 undeclared or violating capabilities were inferred.

Review
Hidden execution and egress

80 lower-risk artifacts were extracted and still need context.

Pass
Attack chain and severe findings

There is no explicit malicious chain in the report.

Review
Dependencies and supply chain hygiene

1 dependency or supply-chain issues need attention.

What drove the risk score up

声明-行为差异(文档未声明的敏感操作) +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 不严谨,可能遗漏嵌入的凭证或非标准命名的敏感字段

Most important evidence

Medium Doc Mismatch

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 入口未引用)
Medium Supply Chain

外部 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
Low Sensitive Access

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

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

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

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

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

skill.md:9
收窄触发词范围,移除宽泛词如 'community'、'learn'、'setup'、'report';优先使用短语触发而非单词
Low Sensitive Access

读取多个 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 文件;考虑排除已知敏感路径
Info Priv Escalation

使用 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 封装

Declared capability vs actual capability

Shell Block
Declared NONE
Inferred 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 执行
Network Pass
Declared READ
Inferred READ
所有 curl 调用固定指向 www.botlearn.ai,与声明一致
Filesystem Block
Declared NONE
Inferred WRITE
bin/botlearn.sh:cmd_register 写入 $WORKSPACE/.botlearn/credentials.json; cmd_install 写入 $WORKSPACE/skills/<name>/;SKILL.md 未声明 filesystem:WRITE
Environment Block
Declared NONE
Inferred READ
cmd_scan 读取 CLAUDE_MODEL、ANTHROPIC_MODEL、SHELL 环境变量并上传;SKILL.md 文档未声明读取环境变量
Browser Pass
Declared NONE
Inferred NONE
无直接浏览器调用
Clipboard Pass
Declared NONE
Inferred NONE
无剪贴板操作

Suspicious artifacts and egress

Medium External URL
https://www.botlearn.ai/api/v2

api/benchmark-api.md:7

Medium External URL
https://www.botlearn.ai/api/v2/agents/profile

api/benchmark-api.md:16

Medium External URL
https://www.botlearn.ai/api/v2/onboarding/tasks

api/benchmark-api.md:88

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/config

api/benchmark-api.md:128

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/start

api/benchmark-api.md:156

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/submit

api/benchmark-api.md:193

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=summary

api/benchmark-api.md:222

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=full

api/benchmark-api.md:226

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/recommendations

api/benchmark-api.md:233

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/share

api/benchmark-api.md:242

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/history?limit=10&offset=0

api/benchmark-api.md:251

Medium External URL
https://www.botlearn.ai/api/v2/benchmark/dimensions

api/benchmark-api.md:258

Dependencies and supply chain

PackageVersionSourceKnown vulnNotes
curl 系统自带 系统命令 No 用于所有 HTTP 请求,无版本控制
node 任意 可选依赖 No 用于可靠 JSON 构建和解析,非必需(存在 grep+sed 回退)
tar 系统自带 系统命令 No 用于提取下载的 skill 存档
botlearn.ai API v2 网络 No 外部依赖,无版本锁定,存档下载无 SHA256 验证

File composition

31 files · 7605 lines
Markdown 25 files · 5905 linesShell 1 files · 1511 linesJSON 5 files · 189 lines
Files of concern · 9
templates/config.json JSON · 18 lines
templates/credentials.json JSON · 4 lines
bin/botlearn.sh Shell · 1511 lines
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 lines
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 lines
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 lines
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 lines
触发词覆盖范围过宽导致意外激活 · 使用 Bash 工具执行 shell:WRITE 操作但未在 SKILL.md 声明
community/submolts.md Markdown · 362 lines
https://www.botlearn.ai/community/invite/
benchmark/exam.md Markdown · 393 lines
https://www.botlearn.ai/benchmark/ · https://www.botlearn.ai · https://www.botlearn.ai/benchmark/share/
Other files · onboarding.md · heartbeat.md · messaging.md

Security positives

单域名网络边界(所有请求固定指向 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),无二进制或混淆代码