扫描报告
67 /100
mind-wander
Autonomous background reasoning agent that explores open questions using a local LLM, FalkorDB knowledge graph, and Perplexity web search
SKILL.md documents a read-only reasoning agent but the actual implementation contains undeclared arbitrary Python code execution (sandbox_run), filesystem writes (elevate, DEAD_ENDS.md), external network requests, and system cron registration — a significant doc-to-code mismatch.
不要安装此技能
Do not use until SKILL.md is updated to accurately declare all tool capabilities (sandbox_run, elevate, search_web, FalkorDB access, cron registration). sandbox_run() is particularly dangerous as it bypasses the stated no-network sandbox claim through Python exec with weak string-based blocking.
攻击链 6 步
◎
入口 User installs skill expecting a read-only background reasoning agent from SKILL.md
SKILL.md:1⬡
提权 install.sh runs automatically, installing pip packages, registering a 30-min cron job, and reading ~/.openclaw/openclaw.json for tokens
scripts/install.sh:70⬡
提权 sandbox_run() executes arbitrary Python code via subprocess.run(['python3', '-c', ...]) — bypasses weak BLOCKED-list string checks
scripts/tools.py:310⬡
提权 read_file() and elevate() write arbitrary content to workspace files (MENTAL_EXPLORATION.md, DEAD_ENDS.md, state.json)
scripts/tools.py:358◉
影响 search_web() exfiltrates workspace content via Perplexity API calls using the user's API key
scripts/tools.py:130◉
影响 Cron persistence reinstalls on each run via gateway API — survives skill 'uninstall' if gateway token remains
scripts/install.sh:151安全发现 9 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 高危 | Undeclared arbitrary Python code execution via sandbox_run() 代码执行 | scripts/tools.py:310 |
| 高危 | SKILL.md tool table omits 4 of 8 tools 文档欺骗 | SKILL.md:1 |
| 高危 | Undeclared cron job registration on install 持久化 | scripts/install.sh:151 |
| 高危 | Undeclared credential file access 敏感访问 | scripts/tools.py:137 |
| 中危 | Weak sandbox BLOCKED-list trivially bypassed 代码混淆 | scripts/tools.py:302 |
| 中危 | Unpinned pip dependencies in install.sh 供应链 | scripts/install.sh:77 |
| 中危 | Third-party model download from HuggingFace 供应链 | scripts/install.sh:99 |
| 低危 | Hardcoded internal IP addresses expose infrastructure 权限提升 | SKILL.md:111 |
| 低危 | Skill description overstates local-only nature 文档欺骗 | SKILL.md:10 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 文件系统 | READ | WRITE | ✗ 越权 | scripts/tools.py:elevate() writes MENTAL_EXPLORATION.md; scripts/wander_graph.py… |
| 命令执行 | NONE | WRITE | ✗ 越权 | scripts/tools.py:sandbox_run() → subprocess.run(['python3', '-c', safe_code]) ex… |
| 网络访问 | NONE | READ+WRITE | ✗ 越权 | scripts/tools.py:search_web() POSTs to api.perplexity.ai; scripts/wander_graph.p… |
| 数据库 | NONE | READ+WRITE | ✗ 越权 | scripts/tools.py:query_graph() reads/writes FalkorDB 'workspace' graph; scripts/… |
| 环境变量 | NONE | READ | ✗ 越权 | scripts/tools.py:search_web() reads ~/.openclaw/openclaw.json for API key; scrip… |
| 技能调用 | NONE | WRITE | ✗ 越权 | scripts/install.sh registers cron jobs via gateway API; SKILL.md does not mentio… |
1 高危 7 项发现
高危 IP 地址 硬编码 IP 地址
172.18.0.1 SKILL.md:111 中危 外部 URL 外部 URL
http://172.18.0.1:11436 SKILL.md:111 中危 外部 URL 外部 URL
https://doi.org/10.1038/nrn.2016.113 references/research.md:21 中危 外部 URL 外部 URL
https://doi.org/10.1038/nrn1607 references/research.md:27 中危 外部 URL 外部 URL
https://arxiv.org/abs/2409.02685 references/research.md:33 中危 外部 URL 外部 URL
https://bootstrap.pypa.io/get-pip.py scripts/install.sh:75 中危 外部 URL 外部 URL
https://api.perplexity.ai/chat/completions scripts/tools.py:130 目录结构
11 文件 · 81.2 KB · 2167 行 Python 7f · 1654L
Markdown 3f · 301L
Shell 1f · 212L
├─
▾
references
│ ├─
research.md
Markdown
│ └─
setup.md
Markdown
├─
▾
scripts
│ ├─
agent.py
Python
│ ├─
collector.py
Python
│ ├─
install.sh
Shell
│ ├─
mind_wander_config.py
Python
│ ├─
prompt.py
Python
│ ├─
run.py
Python
│ ├─
tools.py
Python
│ └─
wander_graph.py
Python
└─
SKILL.md
Markdown
依赖分析 5 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
huggingface_hub | * | pip | 否 | Version not pinned in install.sh |
httpx | * | pip | 否 | Version not pinned in install.sh |
falkordb | * | pip | 否 | Version not pinned in install.sh |
numpy | * | pip | 否 | Version not pinned in install.sh |
Jackrong/Qwen3.5-9B-Claude-4.6-Opus-Reasoning-Distilled-v2-GGUF | unknown | HuggingFace third-party | 否 | Third-party model repo, not official Qwen — integrity not verifiable |
安全亮点
✓ sandbox_run() has a timeout (30s) and line limit (50 lines) — some resource controls exist
✓ sandbox_run() blocks some dangerous imports (subprocess, socket, urllib, requests, httpx, eval, exec, __import__) — at least a basic denylist is present
✓ read_file() has a workspace boundary check to prevent path traversal
✓ The novelty gate (strict criteria for elevate()) means most outputs are benign — findings written to a markdown file
✓ Dead ends are tracked to avoid redundant exploration — reduces unnecessary file writes
✓ SKILL.md exists and provides a reasonable description of the high-level concept
✓ Code is well-structured with docstrings explaining each function's purpose
✓ Uses standard, well-known libraries (httpx, falkordb) rather than obscure custom crypto