Low Risk — Risk Score 25/100
Last scan:8 hr ago Rescan
25 /100
opencron
Visual cron job dashboard for OpenClaw — live countdown timers, run history, calendar view
功能正常的 cron job 可视化仪表板,存在供应链风险(从外部 GitHub 加载 HTML)和 CORS 配置问题,但无直接恶意行为证据。
Skill Nameopencron
Duration67.0s
Enginepi
Safe to install
建议审查从 GitHub 加载 HTML 的必要性,考虑将 dashboard HTML 内嵌本地化;评估 CORS 宽松配置的必要性;确保后台同步进程的清理机制。

Findings 4 items

Severity Finding Location
Medium
从外部 GitHub 动态加载 HTML Supply Chain
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
Low
凭证通过 URL query parameter 暴露 Sensitive Access
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
Low
后台持久化进程未声明清理机制 Supply Chain
watch_sync.sh 创建无限循环的后台进程(每 30 秒同步),但 SKILL.md 未说明如何停止此进程,可能导致资源泄漏。
while true; do ... sleep 30; done
→ 提供停止脚本或记录 PID 文件,以便用户管理后台进程生命周期。
watch_sync.sh:7
Info
CORS 配置过于宽松 Priv Escalation
serve.py 的 /cron-data JSON 端点设置 Access-Control-Allow-Origin: *,允许任意域名的网页访问 cron 数据。
self.send_header("Access-Control-Allow-Origin", "*")
→ 如果 dashboard 仅供本地访问,考虑限制 CORS 到同源或特定受信任域名。
serve.py:37
ResourceDeclaredInferredStatusEvidence
Filesystem WRITE WRITE ✓ Aligned update_canvas.py:26 写入 canvas 目录
Network READ READ ✓ Aligned update_canvas.py:27 urllib.request.urlopen(DASHBOARD_URL)
Shell WRITE WRITE ✓ Aligned bin/install.js:23 execFileSync('git', ['clone', ...])
Environment READ READ ✓ Aligned SKILL.md 使用 ${OPENCLAW_GATEWAY_TOKEN} 和 ${CANVAS_PORT}
3 findings
🔗
Medium External URL 外部 URL
http://www.w3.org/2000/svg
demo.html:276
🔗
Medium External URL 外部 URL
http://0.0.0.0:
serve.py:60
📧
Info Email 邮箱地址
[email protected]
demo.html:345

File Tree

9 files · 60.9 KB · 1250 lines
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

Dependencies 1 items

PackageVersionSourceKnown VulnsNotes
无外部 Python 依赖 N/A stdlib No 仅使用 Python 标准库(json, pathlib, urllib.request, http.server)

Security Positives

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