Back to skill

Security audit

Outline Generator

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Chinese novel-outline generator with ordinary local file output and no evidence of hidden control, exfiltration, or persistence.

Install in a virtual environment and consider pinning dependency versions or using a lockfile. Expect Chinese-language inputs and outputs, and choose an output path intentionally because the tool will create directories and write a Markdown file there.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unbounded and Unverified Third-Party Dependencies

Content
View full analysis

Vulnerability Details

File Location: requirements.txt, lines 1-2
Vulnerability Type: Unpinned dependencies without integrity verification
Risk Level: Medium

Affected code:

text
pyyaml>=6.0.1
rich>=13.7.0

Technical Analysis

The dependency specifications use open-ended minimum-version constraints and provide no package hashes. Consequently, future installations can resolve to any newer compatible release available from the configured Python package index.

No evidence indicates that the currently named packages or reviewed versions are malicious. The risk arises because the installed artifacts are not reproducible or cryptographically restricted to reviewed releases. If a dependency release or configured package index is compromised, installation may retrieve attacker-controlled code. Python packages can execute code during build or installation, and imported dependency modules execute initialization code when the application starts.

The same open-ended constraints also appear in pyproject.toml, but the directly identified installation path is the documented requirements.txt workflow.

Attack Path

  1. An attacker compromises a permitted future release of pyyaml or rich, compromises the package index, or influences dependency resolution through an untrusted configured index.
  2. A user follows the documented installation command:
    bash
    pip3 install -r requirements.txt --user
    
  3. Because the requirements accept any version at or above the stated minimum and do not require hashes, pip resolves and downloads the attacker-controlled artifact.
  4. Malicious package code executes during package build or installation, or later when generate_outline.py imports the dependency.
  5. The payload runs with the privileges and environmental access of the user performing the installation or invoking the Skill.

Impact Assessment

Successful exploitation could provid ...[truncated 446 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin each runtime dependency to an exact, reviewed version instead of using open-ended lower bounds.
  2. Generate a lock file containing hashes for all direct and transitive dependencies.
  3. Install with hash enforcement, for example:
    bash
    pip install --require-hashes -r requirements.lock
    
  4. Apply equivalent exact constraints in pyproject.toml or ensure release builds consume the audited lock file.
  5. Retrieve packages only from an explicitly configured trusted index and disable unintended supplemental indexes.
  6. Review and test dependency updates before regenerating the lock file.
  7. Run installation and execution in a least-privileged virtual environment or isolated build environment.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (14)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill documentation is written entirely in Chinese, including the title, description, CLI examples, and option explanations, with no indication that users may choose another language or that the skill is intended only for a Chinese-language audience. Under the stated policy, forcing a specific language without user opt-in is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
70% confidence
Finding

Without declared permissions the skill's intent is opaque and cannot be validated.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The project description is explicitly Chinese-language and focused on Chinese novels, but the manifest does not document whether this language restriction is intentional, optional, or region-specific. This can violate language/locale policy expectations when a skill implicitly enforces a language without offering user choice or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The manifest description and main README content present the skill entirely in Chinese while also embedding English pipeline terms, but they do not state that the skill is intended only for Chinese-language users or provide any language-selection option. This can be a locale/language policy issue because the skill effectively forces a specific language without documented opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This YAML file defines all genre names, comments, and content keywords exclusively in Chinese, with no indication that the skill supports other languages or that Chinese is an intentional region-specific constraint. Under the policy, forcing a specific language without user opt-in can be a natural-language policy issue.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: setuptools has 10 known advisory(ies) (CVE-2013-1633 (Setuptools vulnerable to Man-in-the-middle attacks); CVE-2025-47273 (setuptools has a path traversal vulnerability in PackageIndex.download that lead); CVE-2024-6345 (setuptools vulnerable to Command Injection via package URL) +7 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
64% confidence
Finding

Leaving wheel unpinned at build time makes the security posture of packaging workflows unverifiable across environments. The main danger is supply-chain inconsistency or exposure in build pipelines rather than direct exploitation through the skill's functionality.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: wheel has 4 known advisory(ies) (CVE-2026-24049 (Wheel Affected by Arbitrary File Permission Modification via Path Traversal in w); CVE-2022-40898 (pypa/wheel vulnerable to Regular Expression denial of service (ReDoS)); CVE-2022-40898 (An issue discovered in Python Packaging Authority (PyPA) Wheel 0.37.1 and earlie) +1 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
64% confidence
Finding

Leaving wheel unpinned at build time makes the security posture of packaging workflows unverifiable across environments. The main danger is supply-chain inconsistency or exposure in build pipelines rather than direct exploitation through the skill's functionality.

Content

No source excerpt is available for this finding.

Vague Triggers

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

This manifest file includes a Chinese-only description of the skill but does not clarify whether the skill is intended only for Chinese-language use cases or whether invocation is restricted to Chinese contexts. In a manifest, such broad natural-language metadata can create ambiguity about when the skill should be selected or matched.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: pyyaml has 8 known advisory(ies) (CVE-2019-20477 (Deserialization of Untrusted Data in PyYAML); CVE-2020-1747 (Improper Input Validation in PyYAML); CVE-2020-14343 (Improper Input Validation in PyYAML) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
68% confidence
Finding

The manifest allows any PyYAML version at or above 6.0.1, which makes it difficult to verify whether deployed environments consistently receive only non-vulnerable releases. While this file alone does not prove exploitation, unpinned dependencies can lead to supply-chain risk and accidental installation of affected versions in different environments.

Content

No source excerpt is available for this finding.

Unverifiable Dependency: pytest has 2 known advisory(ies) (CVE-2025-71176 (pytest has vulnerable tmpdir handling); CVE-2025-71176 (pytest has vulnerable tmpdir handling)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency is specified with a lower bound only, so builds may resolve to different versions over time. This weakens supply-chain reproducibility and can allow accidental adoption of a newly introduced vulnerable or incompatible release.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
pyyaml>=6.0.1
rich>=13.7.0

Unverifiable Dependency: pyyaml has 8 known advisory(ies) (CVE-2019-20477 (Deserialization of Untrusted Data in PyYAML); CVE-2020-1747 (Improper Input Validation in PyYAML); CVE-2020-14343 (Improper Input Validation in PyYAML) +5 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
91% confidence
Finding

PyYAML has a history of deserialization and input-validation issues, and because the manifest does not pin a specific version, it is impossible to verify whether deployed environments will receive a safe release. In a content-generation skill, YAML may plausibly be used for configuration or prompt assets, so an unsafe or vulnerable PyYAML version could become exploitable if untrusted YAML is ever parsed.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
94% confidence
Finding

The rich package is also unpinned, which makes installations non-reproducible and increases supply-chain risk if a bad or breaking release is published. Even without a known current CVE in this finding, floating versions reduce assurance about what code will actually be installed.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
pyyaml>=6.0.1
rich>=13.7.0

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This is a code file, so natural-language policy checks apply to its docstrings and user-facing strings. The top-level description explicitly presents the tool in Chinese, and the rest of the CLI output follows that language choice without any option for the user to select locale, which can violate a language/locale policy requiring user choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.