低风险 — 风险评分 15/100
上次扫描:5 小时前 重新扫描
15 /100
calendar_memo
本地日程记事本 - 添加、查看、完成和删除待办事项和日程安排
本地日程管理工具,代码逻辑清晰但 reminder.js 中使用 child_process.exec 实现消息推送未在 SKILL.md 中明确声明。
技能名称calendar_memo
分析耗时36.0s
引擎pi
ClawHub calender-memo v1.0.0 by qiyuxi24
📥 160
ClawHub 判定 可疑 dangerous_execllm_suspiciousvt_suspicious
可以安装
建议在 SKILL.md 的 allowed-tools 中声明 shell:WRITE(用于 openclaw 消息推送),或在文档中补充说明提醒功能依赖外部 openclaw 命令。

安全发现 2 项

严重性 安全发现 位置
低危
Shell 执行能力未声明 文档欺骗
reminder.js:20 使用 child_process.exec 执行 'openclaw message send' 命令实现消息推送,但 SKILL.md 的 allowed-tools 声明中未包含 shell 权限。文档仅提及「需配置飞书等通道」但未明确说明通过 exec 调用外部命令。
const { exec } = require('child_process');
→ 在 SKILL.md 中添加 shell:WRITE 声明,或在文档中明确说明提醒功能依赖 openclaw 命令行工具
reminder.js:20
提示
潜在的命令注入风险(已缓解) 代码执行
sendPushNotification 函数将用户输入(事件标题)拼接到 shell 命令中。虽然代码对双引号进行了转义,但如果用户输入包含换行符等特殊字符,理论上可能绕过转义。
const cmd = `openclaw message send --channel feishu --recipient current --text "${messageText.replace(/"/g, '\\"')}"`;
→ 考虑使用 child_process.execFile 替代 exec,或对消息内容进行更严格的验证
reminder.js:26
资源类型声明权限推断权限状态证据
文件系统 WRITE WRITE ✓ 一致 SKILL.md 声明读写 MEMORY.md,代码通过 fs.readFileSync/writeFileSync 实现
命令执行 NONE WRITE ✗ 越权 reminder.js:20 使用 child_process.exec 执行 openclaw 命令推送消息

目录结构

4 文件 · 11.3 KB · 363 行
Markdown 3f · 279L JavaScript 1f · 84L
├─ 📝 MEMORY.md Markdown 1L · 2 B
├─ 📜 reminder.js JavaScript 84L · 2.3 KB
├─ 📝 SKILL.md Markdown 52L · 1.9 KB
└─ 📝 SOUL.md Markdown 226L · 7.1 KB

依赖分析 3 项

包名版本来源已知漏洞备注
fs (内置) Node.js built-in nodejs Node.js 内置模块,无供应链风险
path (内置) Node.js built-in nodejs Node.js 内置模块,无供应链风险
child_process (内置) Node.js built-in nodejs Node.js 内置模块,用于执行 openclaw 命令发送通知

安全亮点

✓ 仅使用 Node.js 内置模块(fs, path, child_process),无第三方依赖风险
✓ 代码结构清晰,文件操作(读写 MEMORY.md)与声明功能一致
✓ 对用户输入进行了基本的长度截断和转义处理
✓ 功能边界清晰:仅用于本地日程管理
✓ 无环境变量遍历、无敏感路径访问、无网络外传行为