Back to skill

Security audit

猫咪塔罗占卜助手

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent Chinese-language cat-themed tarot CLI skill that reads bundled tarot data and generates prompts, with no evidence of hidden access, persistence, exfiltration, or destructive behavior.

Install this as a Chinese-language tarot assistant. Use a virtual environment and consider pinning dependency versions if you want better reproducibility. Do not treat tarot output as professional financial, medical, legal, or mental-health advice.

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

Note
Location
README.md:12
Finding

Unpinned Third-Party Dependencies Allow Mutable Supply-Chain Resolution

Content
View full analysis

Vulnerability Details

File Location: README.md:12-14
Vulnerability Type: Unpinned third-party dependency installation
Risk Level: Low

Vulnerable Code

bash
pip install "typer[all]" pydantic

Technical Analysis

The documented installation command resolves the latest available versions of typer, the dependencies included by its all extra, and pydantic. The project provides no lockfile, exact version constraints, package hashes, or trusted-index configuration.

Consequently, the dependency graph installed by a user can differ from the graph reviewed during this audit. If a future direct or transitive dependency release is compromised, malicious package code could execute during installation or when neko.py imports the affected package.

This is a supply-chain hardening weakness rather than evidence that the currently named packages are malicious. No dependency confusion, typosquatting, or malicious package was identified in the audited files.

Attack Path

  1. An attacker compromises a direct or transitive dependency resolved by the documented command and publishes a malicious release to the configured package index.
  2. A user follows the README and executes the unpinned pip install command.
  3. Package resolution selects the compromised release because no reviewed version or hash is enforced.
  4. Attacker-controlled code executes during package installation or when the application imports the compromised dependency.
  5. The malicious code operates with the permissions of the user running pip or the application.

Impact Assessment

Successful exploitation could provide access equivalent to the invoking user. Depending on that user's permissions and environment, this may include reading or modifying accessible files, accessing environment variables and credentials, making network connections, or altering the Python environment.

The scope is limited by the privileges and isolat ...[truncated 204 chars]

Remediation
View remediation

Remediation Suggestions

  1. Declare exact, reviewed dependency versions in a requirements or lock file, including all transitive dependencies.
  2. Generate and verify cryptographic hashes for every package, then install with:
    bash
    python -m pip install --require-hashes -r requirements.txt
    
  3. Install dependencies inside a dedicated virtual environment rather than into a global or privileged Python environment.
  4. Configure an explicitly trusted package index or an internally controlled package mirror.
  5. Add automated dependency vulnerability and integrity scanning to the release process.
  6. Periodically update pinned versions through a reviewed process, rerun tests, and regenerate hashes only after validating the new dependency graph.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (7)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The entire skill description, command explanations, examples, and output samples are presented only in Chinese, and the generated prompt example is explicitly Chinese-language. For a general-purpose CLI skill, this constitutes a language/locale policy concern because no alternative language option, opt-in, or justification for a Chinese-only scope is documented.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill content, prompts, and required interaction are all specified in Chinese, and there is no indication that the user may choose another language. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The file’s instructional content and examples are presented only in Chinese, and there is no indication that users may choose another language or that the locale restriction is intentional. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The CLI help text and user-facing behavior are presented only in Chinese, and the file contains no indication that users can opt into another language or locale. This can violate a language/locale policy when skills are expected to avoid forcing a specific language without user choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The shared prompt template is entirely in Chinese and instructs the model to answer in a specific Chinese 'cat-themed' tone, with no indication that the user can choose another language or locale. This is a natural-language policy concern because it imposes a language expectation on all invocations rather than offering opt-in or documenting a justified locale restriction.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This JSON dataset provides all interpretive text and keywords in Chinese (name_cn, Chinese keyword arrays, and Chinese interpretation strings) while giving no indication that language selection is optional or configurable. For a general-purpose skill asset, this effectively imposes a specific locale without user opt-in, which matches the language/locale policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This JSON manifest includes Chinese-language card names alongside English names throughout the file, but there is no accompanying natural-language indication that the skill is limited to Chinese/English users or that language selection is optional. Under the policy rule for language/locale handling, hardwiring locale-specific content without opt-in or justification can create an implicit language constraint.

Content

No source excerpt is available for this finding.