Suspicious — Risk Score 45/100
Last scan:8 hr ago Rescan
45 /100
ctct-security-patrol
OpenClaw多模式安全巡检工具:默认本地离线扫描,可选联网威胁情报上报
功能声明相对透明,但存在多维度隐私侵蚀设计:设备持久化指纹(agent_id)、MAC+主机名全量上报、完整Skill清单收集与长期关联,构成系统级隐私风险。代码本身无恶意行为但隐私设计激进。
Skill Namectct-security-patrol
Duration76.8s
Enginepi
Use with caution
建议限制外部上报范围、去除持久化agent_id、默认禁用--push、移除敏感路径访问(如/etc/shadow的哈希基线覆盖)或添加显式声明。若对隐私极度敏感应拒绝使用。

Findings 6 items

Severity Finding Location
High
持久化设备指纹形成长期追踪能力 Sensitive Access
agent_id在首次--push时生成并永久写入~/.openclaw/.agent-id,跨会话复用。服务端可积累该设备的历史安全档案,实现设备指纹化追踪。
const id = crypto.randomUUID();
try { fs.writeFileSync(idPath, id, { mode: 0o600 }); }
→ 移除agent_id持久化设计,改为每次生成临时会话ID或完全不使用设备标识
scripts/openclaw-hybrid-audit-changeway.js:1238
High
全量隐私数据上报外部服务器 Data Exfil
--push模式下将MAC地址、主机名、完整Skill清单(包含slug/author/version/ownerId)全量POST至auth.ctct.cn,无数据最小化。Skill清单揭示本机工具组合,MAC+主机名实现设备唯一标识。
doSignedPost(pushApiUrl, pushApiPath, pushObj, ...)
// pushObj含: agent_id, MAC, hostname, skillMetaList全量
→ 上报前做数据最小化处理(仅上传哈希摘要而非完整清单),或使用临时会话标识替代持久化agent_id
scripts/openclaw-hybrid-audit-changeway.js:1263
High
X-SIGN签名机制声明为'非设备认证'实际构成额外指纹 Doc Mismatch
文档承认'此机制不构成设备身份认证',但X-SIGN=SHA-256(mac+hostname+timestamp+nonce)与MAC+主机名同时发送,实际上在服务端组合了更多设备标识信号。
SHA-256(mac + hostname + timestamp + nonce) 作为请求指纹附在 X-SIGN 头部,但此机制不构成设备身份认证
→ 如果签名机制不提供认证价值,应移除或改为HMAC以提供真实完整性保护
SKILL.md:35
Medium
环境变量敏感关键字扫描(名称层面) Sensitive Access
[3/14]通过/proc/{pid}/environ读取openclaw-gateway进程环境变量,匹配SECRET/TOKEN/PASSWORD/KEY/PRIVATE等关键字,命中结果(变量名)被记录进报告。虽然值已脱敏但变量名本身即构成敏感信息泄露。
const sensitivePattern = /^(.*?(SECRET|TOKEN|PASSWORD|KEY|PRIVATE).*?)=/i;
const hitNames = [];
envEntries.forEach(entry => {
  const m = entry.match(sensitivePattern);
  if (m) hitNames.push(m[1] + '=(REDACTED)');
});
→ 此扫描本身是安全工具的合理行为,但应在SKILL.md中明确声明'读取网关进程环境变量名(仅名称脱敏)'
scripts/openclaw-hybrid-audit-changeway.js:347
Medium
shadow文件哈希基线覆盖范围过广 Sensitive Access
generateConfigBaseline将/etc/shadow纳入哈希基线范围。虽然仅存哈希值(/etc/shadow内容不可逆),但覆盖最高权限凭证文件存在理论风险。
configFiles.push('/etc/shadow')
→ 排除/etc/shadow,或在SKILL.md中明确说明基线仅存哈希值无泄露风险
scripts/openclaw-hybrid-audit-changeway.js:262
Low
无第三方依赖,代码自包含 Supply Chain
Skill仅依赖Node.js内置模块(fs/path/os/crypto/child_process/http/https),无外部npm包依赖。代码不引入供应链风险。
const fs = require('fs'); const path = require('path'); const os = require('os'); ...
→ 无需行动,依赖管理良好
scripts/openclaw-hybrid-audit-changeway.js:1
ResourceDeclaredInferredStatusEvidence
Filesystem READ WRITE ✓ Aligned scripts/openclaw-hybrid-audit-changeway.js:83 fs.writeFileSync写入报告、fs.writeFileS…
Shell WRITE WRITE ✓ Aligned 17处spawnSync调用,命令白名单已声明,风险可控
Network READ WRITE ✓ Aligned --push模式下POST至auth.ctct.cn,上报隐私数据
Environment NONE READ ✓ Aligned [3/14]读取/proc/{gwPid}/environ扫描SECRET/TOKEN/PASSWORD变量名(值脱敏但名称明文记录)
Skill Invoke NONE READ ✓ Aligned [5/14]扫描所有skill目录生成哈希基线,[14/14]枚举完整skill清单上报
Browser NONE NONE 无浏览器相关代码
Clipboard NONE NONE 无剪贴板相关代码
Database NONE NONE 无数据库相关代码
2 findings
🔗
Medium External URL 外部 URL
https://auth.ctct.cn:10020/changeway-open/api/pushAuditData
SKILL.md:32
🔗
Medium External URL 外部 URL
https://auth.ctct.cn:10020/changeway-open/api/skills/assessment
SKILL.md:33

File Tree

3 files · 86.8 KB · 1973 lines
JavaScript 1f · 1447L Markdown 2f · 526L
├─ 📁 references
│ └─ 📝 cron-setup.md Markdown 154L · 5.2 KB
├─ 📁 scripts
│ └─ 📜 openclaw-hybrid-audit-changeway.js JavaScript 1447L · 61.6 KB
└─ 📝 SKILL.md Markdown 372L · 20.0 KB

Security Positives

✓ SKILL.md文档极为详细,用户交互流程完整,有明确的知情同意机制
✓ shell命令执行使用严格白名单(15个固定命令名),Unix平台shell:false,注入风险低
✓ 命令参数均为硬编码数组,无用户输入拼接
✓ 敏感数据detail字段(完整命令输出)仅本地落盘不上报,data最小化原则(仅上传item+brief)
✓ 无eval/Base64解码/裸IP请求等混淆或恶意代码模式
✓ 无反向shell、凭证收割后外传等确认恶意行为
✓ script头部有@integrity sha256注释用于完整性验证
✓ cron命令中明确禁止--push,定时任务不自动上报
✓ 防重放机制(时间戳+nonce)虽无认证能力但有基本保护