Back to skill

Security audit

Crypto Content Crafter

Security checks for vulnerabilities and agentic risk

Overview

This skill does not show malware behavior, but it can generate misleading NFT or crypto launch claims by default, including staking, yield, DAO, liquidity, and project-history promises the user never substantiated.

Install only if you will manually review and rewrite the generated copy. Do not publish claims about DAO rights, staking, yield, liquidity, partnerships, team history, floor prices, merchandise, or future utility unless they are true, documented, and legally reviewed for your jurisdiction and platform rules.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (2)

T09 · Insecure Skill Coding Practices

Note
Location
scripts/generate_content.py:148
Finding
Unescaped User Input Permits Terminal Control-Sequence Injection<![CDATA[ ## Vulnerability Details **File Location**: `scripts/generate_content.py:148-154, 201-224` **Vulnerability Type**: Terminal control-sequence injection **Risk Level**: Low ### Vulnerable Code ```python def interactive_mode(): """Prompt user for all collection details.""" print("=== Crypto Content Crafter - Interactive Mode ===\n") name = input("Collection Name: ").strip() tagline = input("Tagline: ").strip() theme = input("Theme/Vibe: ").strip() ``` The collected values are subsequently included in generated content and printed without escaping: ```python print(f"CONTENT GENERATED FOR: {name}") print("="*60) print("\n>>> SHORT DESCRIPTION <<<\n") print(generate_short_description(name, tagline, supply)) print("\n>>> COLLECTION DESCRIPTION <<<\n") print(generate_collection_description(name, tagline, supply, price, theme)) print("\n>>> TWITTER THREAD <<<\n") print(generate_twitter_thread(name, tagline, supply, price, theme, twitter)) print("\n>>> DISCORD WELCOME MESSAGE <<<\n") print(generate_discord_welcome(name, theme)) print("\n>>> ROADMAP <<<\n") print(generate_roadmap(name)) print("\n>>> MINT ANNOUNCEMENT <<<\n") print(generate_mint_announcement(name, supply, price, theme)) ``` ### Technical Analysis Interactive input and command-line arguments are treated as trusted display text. Values such as the collection name, tagline, theme, and Twitter handle are interpolated into generated strings and written directly to the terminal. No validation removes ASCII control characters, ANSI escape sequences, or other non-printable characters. If an attacker controls an input value, terminal emulators may interpret embedded sequences rather than displaying them literally. Depending on terminal capabilities and configuration, this could clear or reposition output, change colors, alter the terminal title, create misleading hyperlinks, or visually conceal subsequent messages. The script itself does not execute commands from th ...[truncated 1055 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Reject or escape terminal control characters before including external values in terminal output. 2. Permit only expected printable Unicode characters for fields such as names, themes, and handles. 3. Explicitly remove characters in the C0 and C1 control ranges, including the escape character `\x1b`. 4. Apply validation to both interactive input and command-line arguments. 5. Keep an unmodified value only if it is needed internally; use a separately sanitized representation for terminal output. 6. Add tests covering ANSI color sequences, cursor movement, terminal hyperlinks, carriage returns, backspaces, and multiline values. For example: ```python import re CONTROL_CHARACTERS = re.compile(r"[\x00-\x1f\x7f-\x9f]") def sanitize_terminal_text(value: str) -> str: return CONTROL_CHARACTERS.sub("", value) ``` Apply the function before values are passed into generation functions or printed. If multiline content is not required, reject newline and carriage-return characters rather than silently removing them. ]]>

other

Warning
Location
scripts/generate_content.py:18
Finding
Generator Invents Unverified Financial-Marketing and Project Claims<![CDATA[ ## Vulnerability Details **File Location**: `scripts/generate_content.py:18-31, 46-80, 105-129` **Vulnerability Type**: Deceptive financial marketing and content-integrity failure **Risk Level**: Medium ### Vulnerable Code The collection description unconditionally asserts governance, merchandise, events, team history, and other project characteristics: ```python def generate_collection_description(name: str, tagline: str, supply: int, price: float, theme: str) -> str: """Generate the main collection description.""" return f"""{name} — {tagline} Step into the {theme} universe, where generative art meets on-chain utility. {name} is a collection of {supply:,} uniquely crafted digital assets, each procedurally generated with hundreds of possible attributes — ensuring no two are exactly alike. This is not just a JPEG. Each {name} grants you: - Governance rights in our {name} DAO - Early access to all future mints - Exclusive holder-only events and Discord channels - Physical merchandise redemption for select traits Our team has been building in crypto since 2021. We've seen the bear seasons and the bull runs. This collection is our contribution to the next chapter. Mint Date: TBA | Price: {price} ETH | Supply: {supply:,} Join the Discord. Secure your spot. The future of {theme} starts here.""" ``` The Twitter template similarly invents production history and team experience: ```python 3/ Our artists spent 6 months crafting the {theme} universe. Hundreds of layers. Thousands of attribute combinations. Each piece is a 1/1 in the truest sense. 4/ {name} holders get: - Governance in our DAO - Early access to future mints - Exclusive holder events - Physical merch redemptions This is what separates us from the shelf. 5/ We've been in crypto since 2021. We've survived 3 bear markets. We've learned what lasts: community + utility. ``` The roadmap and mint announcement present unsupported liquidity, staking, yield, partnerships, and platfor ...[truncated 2571 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Replace every unsupported factual assertion with an explicit placeholder. 2. Require users to supply each factual claim separately, including team history, development duration, utility, DAO status, staking, yield, liquidity, partnerships, and merchandise. 3. Default optional claims to omitted rather than inventing plausible values. 4. Clearly label draft output as unverified marketing copy requiring factual and legal review before publication. 5. Distinguish implemented features from planned features and speculative ideas. 6. Require substantiation before generating claims involving yield, liquidity, investment returns, or financial utility. 7. Add confirmation flags for sensitive statements, for example: ```python parser.add_argument("--dao-live", action="store_true") parser.add_argument("--staking-confirmed", action="store_true") parser.add_argument("--team-start-year", type=int) parser.add_argument("--development-months", type=int) ``` 8. Generate corresponding statements only when the relevant data is explicitly provided. 9. Add a final review section listing every factual assertion and its user-provided source. 10. Update `SKILL.md` so that floor-price history and similar market claims require a cited, current source and are never fabricated. ]]>
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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 (5)

Vague Triggers

Medium
Confidence
92% confidence
Finding
The trigger list is broad enough to activate on many generic crypto, NFT, launch, and marketing requests without clear boundaries, which can cause the skill to be selected in contexts involving financial promotion or speculative asset marketing. In this domain, over-broad activation is riskier because the skill can help generate persuasive investment-adjacent content without surfacing caution, suitability, or compliance considerations.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill is explicitly designed to generate NFT/crypto marketing materials, including roadmap, tokenomics, urgency messaging, and references to similar collections, but it provides no warning against misleading claims, fabricated metrics, financial inducement, or manipulative hype. In the crypto/NFT context, this omission is more dangerous because users may repurpose the generated content to promote speculative assets in ways that mislead buyers or imply investment value.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The script is explicitly designed to generate NFT/crypto promotional copy and does so without any safeguards, disclaimers, or user controls to avoid investment-like claims. In this skill context, that increases the chance of producing misleading financial marketing content that users may publish directly, creating compliance, fraud, or platform-policy risk.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The templates make unqualified promises such as DAO governance rights, early access, exclusive events, and merchandise redemption as if they are guaranteed features. In an NFT marketing skill, this is more dangerous because the tool operationalizes potentially deceptive or non-compliant claims at scale, which could mislead buyers or be used in scam-style launches.

Natural-Language Policy Violations

Low
Confidence
94% confidence
Finding
Line L012 includes the Chinese term '审美' inside an otherwise English template. This imposes a mixed-language output expectation without user opt-in or any documented language/locale rationale, which can conflict with language-choice policy.

Static analysis

No suspicious patterns detected.