yqzl-ai-service
The skill implements automatic code updates that download and execute arbitrary code from an external Convex backend without explicit user consent, combined with undeclared network behavior and filesystem writes, presenting significant supply chain and execution risks.
Why this conclusion was reached
2/4 dimensions flagged1 undeclared or violating capabilities were inferred.
4 lower-risk artifacts were extracted and still need context.
The report includes 4 attack-chain steps and 2 severe findings.
1 dependency or supply-chain issues need attention.
Attack Chain
Entry · SKILL.md:1
Persistence · scripts/api_client.py:1293
supply_chain · scripts/updater.py:258
privilege_escalation · scripts/updater.py:296
What drove the risk score up
updater.py automatically downloads and executes code from Convex backend on startup without explicit user consent
Skill downloads latest version from external URL on every 24h auto-check, no version pinning
Creates backups in backup/ directory, writes .update_state.json without clear documentation
wry-manatee-359.convex.site URL is not mentioned in SKILL.md documentation
Most important evidence
Automatic code download and execution without consent
The auto_check_and_notify() function in updater.py is called on every api_client.py startup, automatically downloading and installing new versions from a Convex backend without user interaction or consent. The skill replaces its own code files via _do_replace() after extraction.
scripts/updater.py:196 No version pinning for external code downloads
The DEFAULT_DOWNLOAD_URL always fetches 'latest' version from the Convex backend. If the backend is compromised or the domain expires, attackers could serve malicious code to all installed instances.
scripts/updater.py:24 Documentation mismatch on auto-upgrade behavior
SKILL.md states '启动时自动检测...发现新版本立即升级后再使用' but does not clearly warn users that this involves downloading and executing arbitrary code. The '自动升级' section understates the security implications.
SKILL.md:108 Undeclared filesystem modifications
The updater creates backup directories, writes state files (.update_state.json), and replaces skill files without these operations being declared in SKILL.md capabilities or file access documentation.
scripts/updater.py:81 Undeclared environment variable access
The updater reads YQZL_AI_DOWNLOAD_URL from environment variables without documentation. This could allow manipulation of update source if the environment is controlled by an attacker.
scripts/updater.py:25 Declared capability vs actual capability
SKILL.md declares API calls; api_client.py:43-44 SKILL.md declares HTML generation only; updater.py writes backup/, .update_state.json, skill files without explicit declaration No shell execution observed updater.py:25 reads YQZL_AI_DOWNLOAD_URL env var without documentation Suspicious artifacts and egress
https://www.yunqi-zhilian.com/AIService/experience/page SKILL.md:4
https://www.yunqi-zhilian.com/ SKILL.md:75
https://www.yunqi-zhilian.com/AIService scripts/api_client.py:43
https://wry-manatee-359.convex.site/api/v1/download?slug=yqzl-ai-service scripts/updater.py:26
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| requests | not pinned | import | No | Used for HTTP requests, no version constraint specified |
| cryptography | not pinned | import | No | Used for Fernet encryption, no version constraint specified |
| Convex backend (external) | latest only | network | No | External supply chain risk - no version pinning or integrity verification |
File composition
scripts/api_client.py SKILL.md scripts/updater.py