evolution-watcher
Skill declares read-only monitoring but contains file modification capabilities (patch application) through subprocess that contradict stated security claims.
为什么得出这个结论
3/4 个维度触发发现 3 项声明之外的能力或越权行为。
提取到 1 个高危 IOC 或外联信号。
报告包含 6 步攻击链,另有 2 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
攻击链
deception · SKILL.md:1
初始入口 · scripts/monitor.py:2300
recon · scripts/monitor.py:45
权限提升 · scripts/diff_analyzer.py:75
权限提升 · scripts/adapter_auto_fix.py:760
最终危害 · scripts/adapter_auto_fix.py:771
风险分是怎么被拉高的
SKILL.md claims '只读操作' (read-only) and '零自动升级' (zero auto-upgrade) but adapter_auto_fix.py contains FixApplier that applies patches via subprocess
The FixApplier.apply_fix() uses subprocess.run(['patch', ...]) to modify files, which is not declared in SKILL.md
UpgradeScriptGenerator creates executable bash/python scripts based on detected updates
email_sender.py:47 contains password='your-app-password' placeholder - low risk but indicates credential handling patterns
最关键的证据
Documentation mismatch - file modification not declared
SKILL.md states '只读操作:不执行任何自动升级' (read-only operations: do not execute any auto-upgrade) but the FixApplier class in adapter_auto_fix.py applies patches to adapter files using subprocess, enabling file modifications.
SKILL.md:1 Undeclared shell execution via patch command
adapter_auto_fix.py:760-790 contains FixApplier.apply_fix() that executes 'patch' command via subprocess to modify files in the filesystem, which is not declared in SKILL.md
scripts/adapter_auto_fix.py:760 Script generation capability not documented
UpgradeScriptGenerator creates executable bash and python scripts but this functionality is not mentioned in SKILL.md
scripts/monitor.py:1650 Hardcoded placeholder password
email_sender.py:47 contains placeholder password='your-app-password'. While this is a placeholder, it demonstrates credential handling patterns that could be exploited if actual credentials are stored similarly.
scripts/email_sender.py:47 Environment variable access for credentials
email_sender.py reads EVOLUTION_WATCHER_SENDER_EMAIL and EVOLUTION_WATCHER_SENDER_PASSWORD from environment. If these contain sensitive tokens, they could be accessed.
scripts/email_sender.py:37 声明能力 vs 实际能力
adapter_auto_fix.py:771 uses subprocess.run(['patch', ...]) to modify adapter files monitor.py:28 uses subprocess.run for 'clawhub' commands; adapter_auto_fix.py:760 applies patches to files Uses network only for version checking via clawhub CLI email_sender.py:37-38 reads EVOLUTION_WATCHER_SENDER_EMAIL/PASSWORD 可疑产物与外联
password = "your-app-password" scripts/email_sender.py:47
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| pyyaml | unpinned | import yaml | 否 | Used for fix_templates.yaml parsing |
| markdown | unpinned | import markdown | 否 | Optional dependency for email formatting |
文件构成
scripts/monitor.py scripts/adapter_auto_fix.py SKILL.md scripts/email_sender.py