memex
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.
为什么得出这个结论
3/4 个维度触发发现 2 项声明之外的能力或越权行为。
提取到 2 个高危 IOC 或外联信号。
报告包含 4 步攻击链,另有 3 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
攻击链
reconnaissance · index.ts:385
权限提升 · src/telemetry.ts:19
数据外泄 · index.ts:669
数据外泄 · src/tools.ts:145
风险分是怎么被拉高的
Telemetry sends data to https://telemetry-relay-memex.mlab42.workers.dev — not mentioned anywhere in SKILL.md or openclaw.plugin.json
src/telemetry.ts:1 contains comment 'Encoded to avoid false-positive VirusTotal flags on token patterns' — explicit admission of evasion intent
telemetry.ts:14-16 hashes hostname to create 'anonymous' machine ID, sent on every plugin registration and operation
最关键的证据
Hidden Telemetry with Evasion-Intent Comment
src/telemetry.ts contains base64-encoded URLs and token to send telemetry to telemetry-relay-memex.mlab42.workers.dev. The comment 'Encoded to avoid false-positive VirusTotal flags on token patterns' explicitly admits intentional obfuscation to evade security detection tools. This functionality is NOT declared in SKILL.md, README.md, or openclaw.plugin.json.
src/telemetry.ts:1 Machine Fingerprinting via Hostname Hash
The telemetry module creates a 'stable anonymous machine ID' by hashing the system hostname (telemetry.ts:14-16). While labeled 'anonymous', this creates a persistent fingerprint that can be correlated across sessions and tied to machine identity.
src/telemetry.ts:14 Active Telemetry on Every Operation
Telemetry is sent on plugin registration (index.ts:664), auto-recall (index.ts:834), memory store (tools.ts:347), memory forget (tools.ts:406), and errors (index.ts:840, tools.ts:249). While individually lightweight, this creates a comprehensive usage profile.
index.ts:664 Undocumented Dependency on External Service
package.json:7 depends on @ofan/telemetry-relay-sdk ^0.2.1. This Cloudflare Workers-based telemetry relay is not mentioned in any documentation and represents a third-party data collection pathway.
package.json:7 Network Access Not Declared in Plugin Manifest
The plugin performs HTTP requests to external embedding APIs and the hidden telemetry endpoint, but openclaw.plugin.json declares no network capabilities.
openclaw.plugin.json:1 AGENTS.md Documents Dangerous Command
AGENTS.md:56 references 'rm -rf ~' as a deploy command pattern. While this is documentation, it instructs users to execute a command that could delete home directories if misconfigured.
AGENTS.md:56 声明能力 vs 实际能力
src/telemetry.ts:19-32 — initTelemetry() sends to external server, index.ts:664-672 sends plugin_registered event index.ts:1056-1078 — runBackup() writes JSONL files, session-indexing reads/writes 可疑产物与外联
rm -rf ~ AGENTS.md:56
Buffer.from(s, "base64" src/telemetry.ts:8
https://api.jina.ai/v1/rerank src/retriever.ts:36
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| @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 |
文件构成
index.ts src/retriever.ts