高风险 — 风险评分 70/100
上次扫描:2 天前 重新扫描
70 /100
memex
Unified memory plugin for OpenClaw — conversation memory + document search in a single SQLite database
未声明的遥测功能:代码连接外部服务器并发送机器标识符,base64编码规避检测,SKILL.md完全未提及
技能名称memex
分析耗时70.5s
引擎pi
不要安装此技能
立即审查并移除遥测模块,或在SKILL.md中明确声明此功能

攻击链 4 步

入口 用户安装memex插件
SKILL.md:1
提权 插件加载时自动初始化遥测模块
src/telemetry.ts:18
提权 Base64解码遥测URL和token
src/telemetry.ts:9
影响 连接外部服务器发送machineId和插件状态
src/telemetry.ts:32

安全发现 6 项

严重性 安全发现 位置
严重
未声明的遥测功能
src/telemetry.ts实现了遥测模块,连接https://telemetry-relay-memex.mlab42.workers.dev发送数据。SKILL.md、README.md、AGENTS.md均未提及此功能。
import { createRelay, type Relay } from "@ofan/telemetry-relay-sdk"
→ 如非必要功能,应移除遥测模块;如需遥测,必须在文档中明确声明
src/telemetry.ts:1
严重
Base64混淆规避检测
遥测URL和token使用base64编码,代码注释明确写'Encoded to avoid false-positive VirusTotal flags',说明作者有意规避安全扫描
// Encoded to avoid false-positive VirusTotal flags on token patterns
→ 混淆代码是典型恶意行为特征,强烈建议移除
src/telemetry.ts:5
高危
机器标识符外泄
遥测发送基于hostname的SHA256哈希作为machineId,可用于跨设备追踪用户
function getMachineId(): string { return createHash("sha256").update(hostname()).digest("hex").slice(0, 16); }
→ 不应收集任何可识别机器的信息
src/telemetry.ts:14
高危
遥测发送敏感操作元数据
遥测track函数发送version、vectorDim、documentsEnabled、autoRecall、memoryCount等插件运行状态信息
track("plugin_registered", { version: pluginVersion, vectorDim, documentsEnabled, autoRecall, memoryCount })
→ 插件运行信息属于敏感数据,不应外传
index.ts:666
高危
无用户同意机制
遥测通过环境变量MEMEX_TELEMETRY=0或MEMEX_DO_NOT_TRACK=1禁用,但默认值是开启,用户默认被追踪
if (process.env.MEMEX_TELEMETRY === "0" || process.env.MEMEX_DO_NOT_TRACK === "1") return noop
→ 应改为默认禁用(opt-in)模式
src/telemetry.ts:19
中危
依赖第三方遥测SDK
使用@ofan/telemetry-relay-sdk,指向Cloudflare Workers端点mlab42.workers.dev,数据流向不透明
"@ofan/telemetry-relay-sdk": "^0.2.1"
→ 审计第三方SDK代码,确认数据处理合规
package.json:38
资源类型声明权限推断权限状态证据
文件系统 WRITE WRITE ✓ 一致 SKILL.md:插件需读写内存数据库
网络访问 NONE WRITE ✗ 越权 src/telemetry.ts:1-32 遥测功能发送数据到外部服务器
环境变量 READ READ ✓ 一致 embedding.apiKey配置读取环境变量
命令执行 NONE NONE AGENTS.md:56的rm命令仅文档说明,非代码行为
2 严重 3 项发现
💀
严重 危险命令 危险 Shell 命令
rm -rf ~
AGENTS.md:56
🔒
严重 编码执行 Base64 编码执行(代码混淆)
Buffer.from(s, "base64"
src/telemetry.ts:8
🔗
中危 外部 URL 外部 URL
https://api.jina.ai/v1/rerank
src/retriever.ts:36

目录结构

31 文件 · 510.5 KB · 14902 行
TypeScript 25f · 14435L Markdown 4f · 295L JSON 2f · 172L
├─ 📁 src
│ ├─ 📜 adaptive-retrieval.ts TypeScript 99L · 3.9 KB
│ ├─ 📜 capture-windows.ts TypeScript 70L · 2.2 KB
│ ├─ 📜 chunker.ts TypeScript 243L · 7.2 KB
│ ├─ 📜 cli.ts TypeScript 719L · 29.1 KB
│ ├─ 📜 collections.ts TypeScript 403L · 9.9 KB
│ ├─ 📜 db.ts TypeScript 62L · 1.6 KB
│ ├─ 📜 doc-indexer.ts TypeScript 278L · 8.0 KB
│ ├─ 📜 embedder.ts TypeScript 567L · 19.2 KB
│ ├─ 📜 formatter.ts TypeScript 429L · 12.9 KB
│ ├─ 📜 importance.ts TypeScript 108L · 3.6 KB
│ ├─ 📜 llm.ts TypeScript 675L · 19.4 KB
│ ├─ 📜 memory-instructions.ts TypeScript 18L · 917 B
│ ├─ 📜 memory.ts TypeScript 1021L · 32.9 KB
│ ├─ 📜 migrate-lancedb.ts TypeScript 145L · 4.4 KB
│ ├─ 📜 migrate.ts TypeScript 355L · 10.0 KB
│ ├─ 📜 noise-filter.ts TypeScript 343L · 12.0 KB
│ ├─ 📜 retriever.ts TypeScript 895L · 32.4 KB
│ ├─ 📜 scopes.ts TypeScript 382L · 10.4 KB
│ ├─ 📜 search.ts TypeScript 3609L · 123.9 KB
│ ├─ 📜 session-indexer.ts TypeScript 955L · 33.1 KB
│ ├─ 📜 telemetry.ts TypeScript 34L · 1.1 KB
│ ├─ 📜 tools.ts TypeScript 834L · 34.1 KB
│ ├─ 📜 unified-recall.ts TypeScript 418L · 13.6 KB
│ └─ 📜 unified-retriever.ts TypeScript 543L · 18.5 KB
├─ 📝 AGENTS.md Markdown 68L · 2.7 KB
├─ 📝 CLAUDE.md Markdown 1L · 10 B
├─ 📜 index.ts TypeScript 1230L · 49.8 KB
├─ 📋 openclaw.plugin.json JSON 110L · 5.2 KB
├─ 📋 package.json JSON 62L · 1.3 KB
├─ 📝 README.md Markdown 110L · 3.4 KB
└─ 📝 SKILL.md Markdown 116L · 3.7 KB

依赖分析 4 项

包名版本来源已知漏洞备注
@ofan/telemetry-relay-sdk ^0.2.1 npm 遥测SDK,发往mlab42.workers.dev
openai ^6.21.0 npm OpenAI SDK
better-sqlite3 ^11.0.0 npm SQLite驱动
sqlite-vec ^0.1.7-alpha.2 npm 向量搜索扩展

安全亮点

✓ 核心记忆功能(SQLite+FTS5+向量搜索)代码质量高,架构清晰
✓ 无直接凭证收割行为
✓ 无远程代码执行(RCE)漏洞
✓ 数据库操作使用参数化查询,防SQL注入
✓ 有embedding模型变更检测和状态机恢复机制