扫描报告
5 /100
grocery-checklist
Persistent pantry-backed grocery checklist for OpenClaw with Telegram shopping-list UI
A legitimate grocery checklist skill with clear purpose, no obfuscation, no credential theft, and behavior fully consistent with its documentation.
可以安装
Skill is safe to use. Consider adding explicit network:WRITE declaration in SKILL.md for completeness, but this is a minor documentation gap with no security impact.
安全发现 1 项
| 严重性 | 安全发现 | 位置 |
|---|---|---|
| 低危 | Network access not declared in SKILL.md metadata 文档欺骗 | SKILL.md:17 |
| 资源类型 | 声明权限 | 推断权限 | 状态 | 证据 |
|---|---|---|---|---|
| 文件系统 | READ | WRITE | ✓ 一致 | grocery.py:save_state() writes JSON; SKILL.md metadata.writes[] covers both stat… |
| 网络访问 | NONE | WRITE | ✓ 一致 | grocery.py:394 and telegram_bot.py:34 make POST requests to https://api.telegram… |
| 命令执行 | NONE | WRITE | ✓ 一致 | grocery.py:267 subprocess.run(['openclaw',...]) and telegram_bot.py:61 subproces… |
1 项发现
中危 外部 URL 外部 URL
https://api.telegram.org/bot scripts/grocery.py:394 目录结构
7 文件 · 43.8 KB · 1339 行 Python 2f · 1086L
Markdown 4f · 248L
Shell 1f · 5L
├─
▾
scripts
│ ├─
grocery.py
Python
│ ├─
grocery.sh
Shell
│ └─
telegram_bot.py
Python
├─
AGENTS.md
Markdown
├─
README.md
Markdown
├─
SETUP.md
Markdown
└─
SKILL.md
Markdown
安全亮点
✓ No base64-encoded payloads, obfuscation, or anti-analysis techniques present
✓ No credential harvesting — Telegram bot token is read from openclaw.json and used only for legitimate Telegram API calls
✓ No sensitive path access beyond declared openclaw config and state files
✓ No environment variable iteration for secrets
✓ No curl|bash or wget|sh remote script downloads
✓ No hidden instructions in comments or HTML
✓ subprocess.run uses command lists (no shell=True) — no shell injection vector
✓ Input validation on all Telegram callback data via regex (callback_data: gchk:...)
✓ Allowlist-based Telegram user access control in telegram_bot.py poll_forever()
✓ Dry-run mode available for safe testing
✓ Clean state repair/rollback logic in salvage_json_object() and prune_corrupted_items()