低风险 — 风险评分 25/100
上次扫描:10 小时前 重新扫描
25 /100
opencron
Visual cron job dashboard for OpenClaw — live countdown timers, run history, calendar view
功能正常的 cron job 可视化仪表板,存在供应链风险(从外部 GitHub 加载 HTML)和 CORS 配置问题,但无直接恶意行为证据。
技能名称opencron
分析耗时67.0s
引擎pi
可以安装
建议审查从 GitHub 加载 HTML 的必要性,考虑将 dashboard HTML 内嵌本地化;评估 CORS 宽松配置的必要性;确保后台同步进程的清理机制。

安全发现 4 项

严重性 安全发现 位置
中危
从外部 GitHub 动态加载 HTML 供应链
update_canvas.py 从 https://raw.githubusercontent.com/firstfloris/opencron/master/cron-dashboard.html 动态获取 HTML 并写入 canvas 目录。如果上游仓库被入侵或 HTML 被篡改,恶意代码将被注入到本地系统。
req = urllib.request.urlopen(DASHBOARD_URL)
→ 考虑将 HTML dashboard 内嵌到 skill 包中,避免外部依赖;或使用内容完整性校验(如 SRI 哈希验证)。
update_canvas.py:27
低危
凭证通过 URL query parameter 暴露 敏感访问
SKILL.md 指导通过 URL 传递 gateway token(如 ?token=${OPENCLAW_GATEWAY_TOKEN}),这会导致 token 在浏览器历史、服务器日志、Referer 头中泄露。
http://${HOST_IP}:${CANVAS_PORT:-8090}/cron.html?token=${OPENCLAW_GATEWAY_TOKEN}
→ 使用 Authorization header 或 POST body 传递 token,避免在 URL 中暴露敏感凭证。
SKILL.md:52
低危
后台持久化进程未声明清理机制 供应链
watch_sync.sh 创建无限循环的后台进程(每 30 秒同步),但 SKILL.md 未说明如何停止此进程,可能导致资源泄漏。
while true; do ... sleep 30; done
→ 提供停止脚本或记录 PID 文件,以便用户管理后台进程生命周期。
watch_sync.sh:7
提示
CORS 配置过于宽松 权限提升
serve.py 的 /cron-data JSON 端点设置 Access-Control-Allow-Origin: *,允许任意域名的网页访问 cron 数据。
self.send_header("Access-Control-Allow-Origin", "*")
→ 如果 dashboard 仅供本地访问,考虑限制 CORS 到同源或特定受信任域名。
serve.py:37
资源类型声明权限推断权限状态证据
文件系统 WRITE WRITE ✓ 一致 update_canvas.py:26 写入 canvas 目录
网络访问 READ READ ✓ 一致 update_canvas.py:27 urllib.request.urlopen(DASHBOARD_URL)
命令执行 WRITE WRITE ✓ 一致 bin/install.js:23 execFileSync('git', ['clone', ...])
环境变量 READ READ ✓ 一致 SKILL.md 使用 ${OPENCLAW_GATEWAY_TOKEN} 和 ${CANVAS_PORT}
3 项发现
🔗
中危 外部 URL 外部 URL
http://www.w3.org/2000/svg
demo.html:276
🔗
中危 外部 URL 外部 URL
http://0.0.0.0:
serve.py:60
📧
提示 邮箱 邮箱地址
[email protected]
demo.html:345

目录结构

9 文件 · 60.9 KB · 1250 行
HTML 1f · 799L Markdown 2f · 222L Python 3f · 149L JavaScript 1f · 60L JSON 1f · 11L Shell 1f · 9L
├─ 📁 bin
│ └─ 📜 install.js JavaScript 60L · 1.9 KB
├─ 📄 demo.html HTML 799L · 48.1 KB
├─ 🐍 generate.py Python 47L · 1.3 KB
├─ 📋 package.json JSON 11L · 302 B
├─ 📝 README.md Markdown 92L · 2.0 KB
├─ 🐍 serve.py Python 65L · 1.9 KB
├─ 📝 SKILL.md Markdown 130L · 4.1 KB
├─ 🐍 update_canvas.py Python 37L · 1.0 KB
└─ 🔧 watch_sync.sh Shell 9L · 272 B

依赖分析 1 项

包名版本来源已知漏洞备注
无外部 Python 依赖 N/A stdlib 仅使用 Python 标准库(json, pathlib, urllib.request, http.server)

安全亮点

✓ 代码结构清晰,无明显混淆或隐藏执行逻辑
✓ 无凭证收割、环境变量遍历或 API 密钥窃取行为
✓ 无远程代码执行、反向 shell 或 C2 通信
✓ 访问的路径(~/.openclaw/cron/)与声明功能直接相关
✓ demo.html 提供离线演示功能,无需网络即可验证
✓ 无恶意依赖或已知漏洞的第三方包