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.
为什么得出这个结论
2/4 个维度触发发现 1 项声明之外的能力或越权行为。
提取到 4 个一般风险产物,需要结合上下文判断。
报告包含 4 步攻击链,另有 2 项高危或严重发现。
发现 1 项需要关注的依赖或供应链线索。
攻击链
初始入口 · SKILL.md:1
持久化 · scripts/api_client.py:1293
supply_chain · scripts/updater.py:258
privilege_escalation · scripts/updater.py:296
风险分是怎么被拉高的
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
最关键的证据
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 声明能力 vs 实际能力
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 可疑产物与外联
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
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| requests | not pinned | import | 否 | Used for HTTP requests, no version constraint specified |
| cryptography | not pinned | import | 否 | Used for Fernet encryption, no version constraint specified |
| Convex backend (external) | latest only | network | 否 | External supply chain risk - no version pinning or integrity verification |
文件构成
scripts/api_client.py SKILL.md scripts/updater.py