evolution-watcher
Skill declares read-only monitoring but contains file modification capabilities (patch application) through subprocess that contradict stated security claims.
Why this conclusion was reached
3/4 dimensions flagged3 undeclared or violating capabilities were inferred.
1 high-risk artifacts or egress signals were extracted.
The report includes 6 attack-chain steps and 2 severe findings.
Dependencies are present but no obvious high-risk issue stands out.
Attack Chain
deception · SKILL.md:1
Entry · scripts/monitor.py:2300
recon · scripts/monitor.py:45
Escalation · scripts/diff_analyzer.py:75
Escalation · scripts/adapter_auto_fix.py:760
Impact · scripts/adapter_auto_fix.py:771
What drove the risk score up
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
Most important evidence
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 Declared capability vs actual capability
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 Suspicious artifacts and egress
password = "your-app-password" scripts/email_sender.py:47
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| pyyaml | unpinned | import yaml | No | Used for fix_templates.yaml parsing |
| markdown | unpinned | import markdown | No | Optional dependency for email formatting |
File composition
scripts/monitor.py scripts/adapter_auto_fix.py SKILL.md scripts/email_sender.py