Back to skill

Security audit

Cultural Naming & AI Art Creation

Security checks for vulnerabilities and agentic risk

Overview

The skill’s cultural naming and art workflow is coherent, but it needs Review because it handles identity-related user inputs while using broad triggers, session memory, external model providers, and telemetry with uneven disclosure.

Review before installing if you are comfortable sharing names, preferences, poems, and generated art context with configured AI providers, and consider disabling telemetry or requiring explicit confirmation before the full-package flow. Install dependencies only in an isolated environment with pinned, reviewed versions.

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:6
Finding
Unpinned Third-Party Dependencies Permit Unreviewed Package Installation<![CDATA[ ## Vulnerability Details **File Location**: `requirements.txt:6-15` **Vulnerability Type**: Unbounded dependency versions without integrity hashes **Risk Level**: Medium ### Vulnerable Code ```text openai>=1.30.0 anthropic>=0.28.0 # ─── Image Generation (optional) ──────────────────────────────────── stability-sdk>=0.8.0 # Stable Diffusion XL — optional fallback # ─── Utilities ────────────────────────────────────────────────────── python-dotenv>=1.0.0 # .env environment variable loading pydantic>=2.0.0 # Data validation & serialization tencent-cloud-sdk-python>=0.1.0 # Tencent Hunyuan API — optional China image model ``` ### Technical Analysis Every dependency is specified using an open-ended minimum version constraint. There are no exact version pins, upper bounds, lockfile entries, or package hashes. Consequently, a future installation may resolve to package versions that were never reviewed with this project. Python packages can execute code during installation, import, or ordinary runtime use. If an allowed future release or its distribution infrastructure is compromised, installing this requirements file could introduce attacker-controlled code. The submitted artifact also contains no Python implementation that directly demonstrates a need for these dependencies, increasing the avoidable supply-chain attack surface. This finding does not establish that any currently named package or release is malicious. The vulnerability is the absence of deterministic version and integrity controls. ### Attack Path 1. A developer or deployment service runs `pip install -r requirements.txt`. 2. The package resolver queries the configured package index and selects any release satisfying each `>=` constraint. 3. A compromised or malicious future release satisfies the unrestricted constraint and is downloaded without hash verification. 4. Attacker-controlled package code executes during installation, import, or subsequen ...[truncated 723 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Remove dependencies that are not required by executable code shipped with the project. 2. Pin every required direct dependency to an exact, reviewed version using `==`. 3. Generate and commit a lockfile that includes resolved transitive dependencies. 4. Require package integrity hashes, for example through `pip-compile --generate-hashes` and `pip install --require-hashes`. 5. Install packages only from approved HTTPS indexes, and disable untrusted supplemental indexes. 6. Use automated dependency vulnerability and provenance scanning in CI. 7. Review and deliberately update locked dependencies on a controlled schedule rather than resolving arbitrary new releases during deployment. 8. Perform installation and execution in an isolated, least-privileged environment without unnecessary credentials or host filesystem access. ]]>
Vulnerability Patterns
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (16)

Credential Access

High
Category
Privilege Escalation
Content
stability-sdk>=0.8.0          # Stable Diffusion XL — optional fallback

# ─── Utilities ──────────────────────────────────────────────────────
python-dotenv>=1.0.0          # .env environment variable loading
pydantic>=2.0.0                # Data validation & serialization
tencent-cloud-sdk-python>=0.1.0 # Tencent Hunyuan API — optional China image model
Confidence
60% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The trigger phrases include generic requests like 'classical poem', 'ink wash painting', and 'Chinese portrait avatar', which can match ordinary user requests that are not intended to invoke this specific skill. Overbroad activation can cause the agent to enter this workflow unexpectedly, leading to prompt/skill hijacking of unrelated conversations and unrequested image-generation behavior.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The activation rule says the skill activates when a 'foreign user' wants several broad cultural outputs, but it does not define how the system should reliably determine eligibility or when not to activate. This ambiguity increases the chance of unintended activation, misclassification of user intent, and inappropriate takeover of sessions that only partially match the described scenario.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
2. **Gender sensitivity**: Never assume gender; always ask or offer neutral options
3. **Regional variants**: Note Cantonese vs. Mandarin pronunciation differences for HK/Macau visitors
4. **Historical accuracy**: All dynasty references must be factually grounded
5. **Art prompt safety**: No depictions of real historical figures without consent framing
6. **Attribution**: Always credit the classical poets/styles being referenced

---
Confidence
75% confidence
Finding
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The skill stores sensitive personal profile data in session memory, including the user's original name and derived identity attributes, but the manifest does not disclose this retention to the user. Even if limited to session scope, undisclosed storage creates privacy risk, especially because the skill processes identity-related content and generated outputs tied to that identity.

Vague Triggers

Medium
Confidence
87% confidence
Finding
Several triggers rely on common phrases such as 'write a poem', 'stamp', or 'Chinese painting' without enough contextual constraints. In an agent framework, this can misroute general user requests into this skill, leading to unintended activation, unexpected image generation, and collection/storage of user profile inputs not clearly requested by the user.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The full-package trigger includes very broad phrases like 'everything', 'all of it', and 'the whole thing', which can match ordinary conversation without clear reference to this skill. That can cause unintended invocation and auto-chaining into multiple generation flows, increasing unnecessary processing and unexpected handling of personal name and preference data.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
Telemetry is enabled with a remote endpoint, but the manifest provides no user-facing notice that usage metadata may be transmitted off the local runtime. Although the config states 'no_pii_in_logs', absent transparency and verifiable enforcement, users cannot make an informed decision, and accidental inclusion of identity-linked events remains a privacy concern.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The manifest declares image generation and optional internet access, and the runtime lists third-party providers, but it does not clearly warn users that their provided name, preferences, poem content, and profile-like details may be sent to external model vendors. This weakens informed consent and can expose personal or culturally sensitive user inputs to outside services during multi-step generation.

Vague Triggers

Medium
Confidence
95% confidence
Finding
The full-package module uses very broad trigger intents and entry phrases such as 'everything' and 'all_art', which can cause accidental invocation when a user makes a general request. Because this module auto-chains multiple generation steps, unintended activation can disclose more user-supplied context to downstream model providers and trigger unnecessary image generation actions.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Python: >= 3.10

# ─── Core ───────────────────────────────────────────────────────────
openai>=1.30.0
anthropic>=0.28.0

# ─── Image Generation (optional) ────────────────────────────────────
Confidence
97% confidence
Finding
Using `openai>=1.30.0` leaves the build non-reproducible and permits installation of newer releases without review, which can introduce breaking changes or vulnerable transitive code. While not an exploit by itself, unpinned dependencies increase supply-chain risk and make it harder to verify what version is actually deployed.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# ─── Core ───────────────────────────────────────────────────────────
openai>=1.30.0
anthropic>=0.28.0

# ─── Image Generation (optional) ────────────────────────────────────
stability-sdk>=0.8.0          # Stable Diffusion XL — optional fallback
Confidence
98% confidence
Finding
Using `anthropic>=0.28.0` allows any later version to be installed, including versions that may contain security defects or incompatible behavior. This weakens supply-chain control, especially because the package is already associated with known advisories and the manifest does not prove a safe version will be selected.

Unverifiable Dependency: anthropic has 4 known advisory(ies) (CVE-2026-34450 (Claude SDK for Python has Insecure Default File Permissions in Local Filesystem ); CVE-2026-34452 (Claude SDK for Python: Memory Tool Path Validation Race Condition Allows Sandbox); CVE-2026-34450 (The Claude SDK for Python provides access to the Claude API from Python applicat) +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
96% confidence
Finding
The manifest includes `anthropic` without an exact version, and advisories exist for some releases of that package. Because the installed version is unconstrained above a minimum, environments may resolve to an affected release, making this a real supply-chain exposure rather than a purely theoretical issue.

Unverifiable Dependency: python-dotenv has 2 known advisory(ies) (CVE-2026-28684 (python-dotenv: Symlink following in set_key allows arbitrary file overwrite via ); CVE-2026-28684 (python-dotenv reads key-value pairs from a .env file and can set them as environ)), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
93% confidence
Finding
`python-dotenv` is unpinned and has published advisories for some versions, so the manifest cannot demonstrate that installations will avoid affected releases. In this skill, the package likely supports local configuration only, which reduces impact, but a vulnerable version could still create file-handling or secret-management risk depending on surrounding code.

Unverifiable Dependency: pydantic has 4 known advisory(ies) (CVE-2021-29510 (Use of "infinity" as an input to datetime and date fields causes infinite loop i); CVE-2024-3772 (Pydantic regular expression denial of service); CVE-2021-29510 (Pydantic is a data validation and settings management using Python type hinting.) +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
92% confidence
Finding
`pydantic` is referenced without an exact version despite known advisories affecting some releases. That means deployments may resolve to a vulnerable version, and if untrusted input is parsed extensively, issues such as ReDoS or parser-related defects could become reachable.

Vague Triggers

Low
Confidence
82% confidence
Finding
Phrases like "write a Chinese poem with my name" and especially the Chinese phrase "写一首古诗" are broad requests that could refer to many poetry tasks beyond this skill's specific Jueju workflow. The manifest does not clarify boundaries or provide negative examples distinguishing general poetry help from this named cultural-identity feature.

Static analysis

No suspicious patterns detected.