扫描报告
55 /100
memex
Unified memory plugin for OpenClaw — conversation memory + document search in a single SQLite database
Hidden telemetry module sends machine ID and operational data to an external Cloudflare Workers endpoint via base64-encoded URLs, explicitly obfuscated to evade VirusTotal detection, with no disclosure in documentation.
谨慎使用
Remove or replace the telemetry module with transparent, opt-in analytics. Document all network communications. Base64 obfuscation to 'avoid VirusTotal flags' is a significant red flag requiring immediate vendor clarification.
攻击链 4 步
⬡
提权 Plugin loaded and initialized by OpenClaw gateway
index.ts:385⬡
提权 initTelemetry() called with base64-encoded endpoint URL and token
src/telemetry.ts:19⬡
提权 On plugin registration, track('plugin_registered') sends machineId (hashed hostname), version, vectorDim, memoryCount to telemetry-relay-memex.mlab42.workers.dev
index.ts:669⬡
提权 On every recall/store/forget operation, additional telemetry events sent tracking usage patterns
src/tools.ts:145安全发现 6 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 高危 | Hidden Telemetry with Evasion-Intent Comment | src/telemetry.ts:1 |
| 高危 | Machine Fingerprinting via Hostname Hash | src/telemetry.ts:14 |
| 高危 | Active Telemetry on Every Operation | index.ts:664 |
| 中危 | Undocumented Dependency on External Service | package.json:7 |
| 中危 | Network Access Not Declared in Plugin Manifest | openclaw.plugin.json:1 |
| 低危 | AGENTS.md Documents Dangerous Command | AGENTS.md:56 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 网络访问 | NONE | READ | ✗ 越权 | src/telemetry.ts:19-32 — initTelemetry() sends to external server, index.ts:664-… |
| 文件系统 | NONE | WRITE | ✗ 越权 | index.ts:1056-1078 — runBackup() writes JSONL files, session-indexing reads/writ… |
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
│ ├─
capture-windows.ts
TypeScript
│ ├─
chunker.ts
TypeScript
│ ├─
cli.ts
TypeScript
│ ├─
collections.ts
TypeScript
│ ├─
db.ts
TypeScript
│ ├─
doc-indexer.ts
TypeScript
│ ├─
embedder.ts
TypeScript
│ ├─
formatter.ts
TypeScript
│ ├─
importance.ts
TypeScript
│ ├─
llm.ts
TypeScript
│ ├─
memory-instructions.ts
TypeScript
│ ├─
memory.ts
TypeScript
│ ├─
migrate-lancedb.ts
TypeScript
│ ├─
migrate.ts
TypeScript
│ ├─
noise-filter.ts
TypeScript
│ ├─
retriever.ts
TypeScript
│ ├─
scopes.ts
TypeScript
│ ├─
search.ts
TypeScript
│ ├─
session-indexer.ts
TypeScript
│ ├─
telemetry.ts
TypeScript
│ ├─
tools.ts
TypeScript
│ ├─
unified-recall.ts
TypeScript
│ └─
unified-retriever.ts
TypeScript
├─
AGENTS.md
Markdown
├─
CLAUDE.md
Markdown
├─
index.ts
TypeScript
├─
openclaw.plugin.json
JSON
├─
package.json
JSON
├─
README.md
Markdown
└─
SKILL.md
Markdown
依赖分析 3 项
| 包名 | 版本 | 来源 | 已知漏洞 | 备注 |
|---|---|---|---|---|
@ofan/telemetry-relay-sdk | ^0.2.1 | npm | 否 | Hidden telemetry dependency — sends data to Cloudflare Workers endpoint |
openai | ^6.21.0 | npm | 否 | Standard OpenAI client for embeddings |
better-sqlite3 | ^11.0.0 | npm | 否 | Local SQLite database for memory storage |
安全亮点
✓ No direct shell execution (exec, spawn, eval) found in codebase
✓ No credential harvesting from environment variables
✓ No access to sensitive paths like ~/.ssh, ~/.aws, or .env files
✓ No base64-decode-and-execute patterns
✓ Telemetry can be disabled via MEMEX_TELEMETRY=0 or MEMEX_DO_NOT_TRACK=1 environment variables
✓ Memory operations are properly scoped and sandboxed within SQLite