T08 · Insecure Dependencies
- Location
SKILL.md:30- Finding
Automatic Installation and Loading of an Unpinned External Skill
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is finance-analysis oriented, but it asks agents to auto-install an unpinned dependency and ships executable scripts that fetch data and write reports without sufficient scoping or input hardening.
Install only if you trust both this publisher and the exact universal-task-os dependency source. Use it in a constrained workspace, provide only normal six-digit stock codes and trusted JSON inputs, review generated HTML before sharing/opening broadly, and prefer a version that pins dependencies, asks before installing other skills, validates filenames, confines outputs to a dedicated directory, and escapes HTML content.
SKILL.md:30Automatic Installation and Loading of an Unpinned External Skill
scripts/download_statements.py:294Path Traversal and Arbitrary File Overwrite Through Unsanitized Output Names
scripts/generate_report.py:607Stored HTML Injection in Generated Financial Reports
There is a significant mismatch between the declared purpose of a finance audit knowledge base and the detected behavior of data merging and local JSON modification. This is dangerous because users may invoke the skill expecting passive reference guidance while it instead performs undeclared data-processing actions, which can alter local artifacts and conceal its real operational scope.
os.system() and os exec-family calls run shell commands with the process's full privileges, enabling arbitrary command execution.
if os.path.exists(_VENV_PYTHON) and not sys.executable.lower().startswith(_VENV_PYTHON.lower()):
# 当前不在 minesweeper venv 中,自动 rerun
os.execv(_VENV_PYTHON, [_VENV_PYTHON] + sys.argv)
# 强制UTF-8输出(Windows GBK兼容)
if sys.stdout.encoding != 'utf-8':
The skill declares itself as a reference library but appears to rely on capabilities consistent with file read/write and shell-like behavior without explicitly scoping or constraining those tools. Missing tool permissions make it harder for users and the platform to understand what the skill may access or modify, increasing the risk of unintended file changes or command execution through hidden dependency flows.
The trigger phrases are broad enough to match common financial-analysis requests outside the narrow intended scope of A-share non-financial listed companies. Overbroad activation increases the chance that the skill is invoked in inappropriate contexts, which is more dangerous here because the skill also describes dependency loading and possible operational behavior rather than purely passive reference output.
The document claims the skill is only a non-executing reference library, but later instructs installation/loading of another skill and operational execution through UTOS. This contradiction is dangerous because it obscures the effective trust boundary: activating an apparently passive knowledge skill may trigger a broader execution framework with additional privileges and behaviors.
The skill describes automatic installation of a dependency without a clear user-facing warning or consent step. Silent dependency installation is dangerous because it can expand capabilities, introduce new trust assumptions, and surprise users who believed they were only using a static reference library.
Automatic installation of another skill is an unnecessary and risky capability for a domain reference library. It creates a supply-chain and privilege-expansion path where a benign-looking skill can introduce external code or behaviors without explicit approval, potentially leading to unexpected execution or broader system access.
The title and the entire requirements file are written as prescriptive instructions in Chinese, with no indication that another language may be used or that the user can opt into this locale. Under the policy rule, forcing a specific language without user choice is a natural-language policy concern unless the locale restriction is explicitly justified.
The entire skill reference is written in Chinese and provides no indication that users may choose another language or that the language restriction is required by a region-specific compliance context. Under the policy, a skill that effectively mandates a specific language without opt-in is a natural-language policy violation.
This code's natural-language interface and comments indicate the skill is designed to operate only in Chinese, and it explicitly reconfigures output for UTF-8 with Chinese messaging. The file does not offer a user language/locale choice or document a justified region-specific constraint, which conflicts with the policy against forcing a specific language without opt-in.
The manifest describes the skill as a '知识参考库(领域负载物)' for financial-audit analysis, which suggests a reference or analysis knowledge asset scoped to domain logic. This script goes beyond providing reference knowledge by actively fetching live market/financial data from external services via akshare and then preparing it for downstream use, which is a materially different operational behavior.
The manifest emphasizes a domain reference base for financial statement risk analysis, not a data-export or file-generation tool. This script persists fetched company financial data as a local JSON file, which is an additional behavior not implied by the manifest's description of a knowledge-only domain payload.
The generated HTML hard-codes lang="zh-CN", which imposes a specific language/locale policy on all output. The file does not offer the user a language choice or explain that the tool is intentionally limited to a China-specific/regional workflow.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
print(f"\n{'='*60}")
print(f" {name}")
print(f"{'='*60}")
result = subprocess.run(cmd, shell=False, cwd=os.getcwd())
if result.returncode != 0:
print(f"\n❌ 步骤失败: {name}")
sys.exit(1)
The dependency declaration states that without UTOS the skill only has reference capability and cannot execute any analysis tasks, yet later sections define report generation, output formats, and dynamic topology-driven execution as if these are intrinsic skill operations. While some of this may be intended as UTOS-facing specification, the documentation mixes 'reference-only' and 'operational execution' language in a way that blurs actual intent.
The code explicitly enforces UTF-8 output for Chinese text and all user-facing help, status, and warnings are hard-coded in Chinese. For a general-purpose skill, this constitutes a language/locale constraint without user opt-in or an offered alternative.
Lines L031-L033 explicitly reconfigure stdout to UTF-8, imposing a specific output encoding as a default behavior. Under the policy, forcing a language/locale-related setting without user opt-in can be a natural-language policy concern unless clearly justified as a region-specific requirement.
No suspicious patterns detected.