可疑 — 风险评分 45/100
上次扫描:2 小时前 重新扫描
45 /100
botlearn
AI Agent 能力评测与社区平台 CLI — 包含 benchmark、社区互动、heartbeat、skill 安装等功能
BotLearn 是合法的 AI Agent 社区与能力评测平台,但其 shell 脚本执行广度和上传数据范围超出 SKILL.md 声明,存在中等程度的声明-行为差异。存在供应链风险(外部存档无签名验证)和数据收集过宽的问题。
技能名称botlearn
分析耗时103.6s
引擎pi
ClawHub botlearn v1.0.10 by calvinxhk
📥 578 📦 8 ⭐ 1
ClawHub 判定 可疑 llm_suspiciouspotential_exfiltrationvt_suspicious
谨慎使用
建议审核:1) 明确声明 cmd_scan 的完整数据收集范围;2) 验证 openclaw logs 截取内容是否可能包含敏感对话;3) 考虑对外部存档实施完整性校验(SHA256);4) 限制上传的 workspace 范围。

安全发现 6 项

严重性 安全发现 位置
中危
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 的任何章节中明确声明。
openclaw_logs_raw=$(redact_keys "$(openclaw logs 2>/dev/null | tail -100 || true)")
→ 在 SKILL.md 的 capability/declared permissions 章节明确列出 scan 操作收集的所有数据类型,或在 core/setup.md 中添加独立的 scan.md 引用说明(benchmark/scan.md 已详细说明但 SKILL.md 入口未引用)
bin/botlearn.sh:218
中危
外部 skill 存档和 SDK 更新无完整性校验 供应链
botlearn.sh 的 cmd_install 和 Self-Update Protocol 从 API 下载 .tar.gz/.zip 并直接提取到 $WORKSPACE。无 SHA256 校验、无 GPG 签名验证。如果 BotLearn 服务器被入侵或下载路径被劫持,攻击者可注入恶意文件。
curl -sL -o "$tmp_archive" "$archive_url" 2>/dev/null || { rm -f "$tmp_archive"; die "Failed to download skill archive"; }
→ 在下载后比对 SHA256 校验和(core/setup.md 第 47 行提到了 .sha256 文件但 cmd_install 和 Self-Update 均未使用);建议对存档实施签名验证或至少强制校验 SHA256
bin/botlearn.sh:488
低危
上传的 openclaw logs 可能包含对话历史片段 敏感访问
cmd_scan 截取 openclaw logs 最后 100 行并 key-filter 后上传。日志可能包含命令执行历史、错误消息和部分对话内容。虽然经过 redact_keys 过滤,但仍存在遗漏风险(如非标准 key 名称的 token)。
openclaw_logs_raw=$(redact_keys "$(openclaw logs 2>/dev/null | tail -100 || true)")
→ 考虑不上传 logs,或在上传前进行更严格的正则过滤(如移除可能的 Bearer token 模式)
bin/botlearn.sh:218
低危
触发词覆盖范围过宽导致意外激活 文档欺骗
50+ 触发词分布在多个无关联领域(benchmark、community、social、post、dm、heartbeat、learn、register、claim、setup 等)。agent 可能在用户正常对话中无意触发该 skill。
Triggers on: benchmark, score, evaluate, skill check, measure, gear score, my score, results, report, recommend, install skill, improve, update botlearn, continue botlearn, botlearn, community, social, post, comment, discuss, dm, channel, heartbeat, learn, register, claim, setup...
→ 收窄触发词范围,移除宽泛词如 'community'、'learn'、'setup'、'report';优先使用短语触发而非单词
skill.md:9
低危
读取多个 workspace 的 UPPERCASE *.md 文件内容 敏感访问
cmd_scan 遍历 openclaw config 中声明的所有 workspace 路径,读取每个 workspace 中 basename 为纯大写字母的 *.md 文件(如 CLAUDE.md、AGENTS.md),过滤后写入本地报告并上传。如果 workspace 中存在包含敏感信息的 UPPERCASE README 或 NOTES,可能被收集。
for md_file in "$ws"/*.md; do ... bname=$(basename "$md_file" .md); [[ "$bname" =~ ^[A-Z]+$ ]] || continue
→ 在 SKILL.md 和 benchmark/scan.md 中明确警告用户不要在 workspace 中放置包含敏感信息的 UPPERCASE *.md 文件;考虑排除已知敏感路径
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 级别能力。
--- name: botlearn ...
→ 在 SKILL.md 顶部 frontmatter 添加 allowed-tools 声明:filesystem:WRITE, network:READ, shell:WRITE,并明确说明 shell 执行仅用于 CLI 封装
skill.md:1
资源类型声明权限推断权限状态证据
命令执行 NONE WRITE ✗ 越权 SKILL.md 无 allowed-tools 声明,但 bin/botlearn.sh 使用 set -euo pipefail、subprocess 调用…
网络访问 READ READ ✓ 一致 所有 curl 调用固定指向 www.botlearn.ai,与声明一致
文件系统 NONE WRITE ✗ 越权 bin/botlearn.sh:cmd_register 写入 $WORKSPACE/.botlearn/credentials.json; cmd_insta…
环境变量 NONE READ ✗ 越权 cmd_scan 读取 CLAUDE_MODEL、ANTHROPIC_MODEL、SHELL 环境变量并上传;SKILL.md 文档未声明读取环境变量
浏览器 NONE NONE 无直接浏览器调用
剪贴板 NONE NONE 无剪贴板操作
80 项发现
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2
api/benchmark-api.md:7
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/agents/profile
api/benchmark-api.md:16
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/onboarding/tasks
api/benchmark-api.md:88
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/config
api/benchmark-api.md:128
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/start
api/benchmark-api.md:156
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/submit
api/benchmark-api.md:193
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=summary
api/benchmark-api.md:222
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789?format=full
api/benchmark-api.md:226
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/recommendations
api/benchmark-api.md:233
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/sess_xyz789/share
api/benchmark-api.md:242
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/history?limit=10&offset=0
api/benchmark-api.md:251
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/dimensions
api/benchmark-api.md:258
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community
api/community-api.md:7
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/agents/me
api/community-api.md:16
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/posts
api/community-api.md:131
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/agents/profile?name=AGENT_NAME
api/community-api.md:160
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/agents/me/posts
api/community-api.md:176
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/solutions/content-optimizer/install
api/solutions-api.md:16
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/solutions/content-optimizer/run
api/solutions-api.md:104
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/benchmark/
benchmark/exam.md:66
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai
benchmark/exam.md:300
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/benchmark/share/
benchmark/exam.md:302
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai$path
bin/botlearn.sh:48
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2$path
bin/botlearn.sh:52
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/claim/
bin/botlearn.sh:72
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/agents/register
bin/botlearn.sh:141
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/claim/$api_key
bin/botlearn.sh:179
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/skill.json
bin/botlearn.sh:1337
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/botlearn-sdk.tar.gz
bin/botlearn.sh:1357
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/posts/xxx*
community/learning.md:128
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/posts/abc123*
community/learning.md:176
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/posts/def456*
community/learning.md:193
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/solutions/
community/learning.md:284
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/community/invite/
community/submolts.md:162
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark
core/api-patterns.md:35
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/agents
core/api-patterns.md:36
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/solutions
core/api-patterns.md:37
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/onboarding
core/api-patterns.md:38
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/answer
core/commands.md:153
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/
core/commands.md:189
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/benchmark/history?limit=10
core/commands.md:230
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/skills/
core/commands.md:256
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/feed?preview=true&exclude_read=true&limit=10&sort=new
core/commands.md:336
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/submolts/
core/commands.md:349
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/agents/dm/check
core/commands.md:359
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/claim
core/security.md:12
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/community/*
core/security.md:71
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/api/v2/*
core/security.md:72
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/*.md
core/security.md:91
🔗
中危 外部 URL 外部 URL
https://gitee.com/calvin_xhk/botlearn-skills
core/security.md:103
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/skill.md
core/setup.md:14
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/core/setup.md
core/setup.md:16
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/core/security.md
core/setup.md:17
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/core/config.md
core/setup.md:18
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/core/api-patterns.md
core/setup.md:19
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/README.md
core/setup.md:20
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/posts.md
core/setup.md:21
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/viewing.md
core/setup.md:22
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/messaging.md
core/setup.md:23
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/submolts.md
core/setup.md:24
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/heartbeat.md
core/setup.md:25
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/community/learning.md
core/setup.md:26
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/benchmark/README.md
core/setup.md:27
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/onboarding/onboarding.md
core/setup.md:28
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/benchmark/scan.md
core/setup.md:29
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/benchmark/exam.md
core/setup.md:30
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/benchmark/report.md
core/setup.md:31
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/solutions/README.md
core/setup.md:32
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/solutions/install.md
core/setup.md:33
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/solutions/run.md
core/setup.md:34
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/solutions/marketplace.md
core/setup.md:35
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/api/community-api.md
core/setup.md:36
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/api/benchmark-api.md
core/setup.md:37
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/api/solutions-api.md
core/setup.md:38
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/botlearn-sdk.tar.gz.sha256
core/setup.md:48
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/claim/botlearn_1b****
core/setup.md:196
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/core/commands.md
manifest.json:54
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/templates/config.json
manifest.json:74
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/templates/state.json
manifest.json:75
🔗
中危 外部 URL 外部 URL
https://www.botlearn.ai/sdk/templates/credentials.json
manifest.json:76

目录结构

31 文件 · 284.9 KB · 7605 行
Markdown 25f · 5905L Shell 1f · 1511L JSON 5f · 189L
├─ 📁 api
│ ├─ 📝 benchmark-api.md Markdown 302L · 7.0 KB
│ ├─ 📝 community-api.md Markdown 219L · 8.0 KB
│ └─ 📝 solutions-api.md Markdown 172L · 4.1 KB
├─ 📁 benchmark
│ ├─ 📝 exam.md Markdown 393L · 10.3 KB
│ ├─ 📝 README.md Markdown 72L · 2.5 KB
│ ├─ 📝 report.md Markdown 203L · 5.7 KB
│ └─ 📝 scan.md Markdown 329L · 7.6 KB
├─ 📁 bin
│ └─ 🔧 botlearn.sh Shell 1511L · 57.6 KB
├─ 📁 community
│ ├─ 📝 heartbeat.md Markdown 227L · 10.5 KB
│ ├─ 📝 learning.md Markdown 381L · 17.2 KB
│ ├─ 📝 messaging.md Markdown 253L · 9.9 KB
│ ├─ 📝 posts.md Markdown 205L · 8.1 KB
│ ├─ 📝 README.md Markdown 64L · 2.4 KB
│ ├─ 📝 submolts.md Markdown 362L · 13.0 KB
│ └─ 📝 viewing.md Markdown 256L · 8.9 KB
├─ 📁 core
│ ├─ 📝 api-patterns.md Markdown 206L · 7.0 KB
│ ├─ 📝 commands.md Markdown 473L · 15.9 KB
│ ├─ 📝 config.md Markdown 149L · 5.3 KB
│ ├─ 📝 security.md Markdown 249L · 17.9 KB
│ └─ 📝 setup.md Markdown 222L · 9.7 KB
├─ 📁 onboarding
│ └─ 📝 onboarding.md Markdown 457L · 22.3 KB
├─ 📁 solutions
│ ├─ 📝 install.md Markdown 207L · 5.9 KB
│ ├─ 📝 marketplace.md Markdown 105L · 2.4 KB
│ ├─ 📝 README.md Markdown 57L · 2.1 KB
│ └─ 📝 run.md Markdown 74L · 2.5 KB
├─ 📁 templates
│ ├─ 🔑 config.json JSON 18L · 505 B
│ ├─ 🔑 credentials.json JSON 4L · 40 B
│ └─ 📋 state.json JSON 38L · 791 B
├─ 📋 manifest.json JSON 79L · 3.8 KB
├─ 📋 skill.json JSON 50L · 2.2 KB
└─ 📝 skill.md Markdown 268L · 13.6 KB

依赖分析 4 项

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

安全亮点

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