Back to skill

Security audit

Yu Copywriter Pro

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly a copywriting template helper, but it also ships an under-disclosed script that stores user-supplied copywriting inputs in a persistent plaintext local history file.

Review before installing if you may paste confidential marketing plans, customer details, unreleased product information, or proprietary copy into the CLI. The main template script is coherent, but the extra script's local history logging should be disabled, disclosed, permission-hardened, or removed before use with sensitive content.

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 (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:5
Finding

Undisclosed Persistent Plaintext Logging of User-Supplied Content

Content
View full analysis

Vulnerability Details

File Location: scripts/script.sh, lines 5–8, 26, and 28–78
Vulnerability Type: Plaintext storage of potentially sensitive user input
Risk Level: Medium

Vulnerable Code

bash
DATA_DIR="${COPYWRITER_PRO_DIR:-${XDG_DATA_HOME:-$HOME/.local/share}/copywriter-pro}"
DB="$DATA_DIR/data.log"
mkdir -p "$DATA_DIR"
bash
_log() { echo "$(date '+%m-%d %H:%M') $1: $2" >> "$DATA_DIR/history.log"; }

cmd_draft() {
    echo "  Draft: $1
      Target: ${2:-800} words"
    _log "draft" "${1:-}"
}

cmd_headline() {
    echo "  1. How to $1
      2. $1: Complete Guide
      3. Why $1 Matters"
    _log "headline" "${1:-}"
}

cmd_outline() {
    echo "  1. Intro | 2. Problem | 3. Solution | 4. Examples | 5. CTA"
    _log "outline" "${1:-}"
}

cmd_seo() {
    echo "  Keywords: $1 | Title tag | Meta desc | H1-H3 | Internal links"
    _log "seo" "${1:-}"
}

cmd_schedule() {
    echo "  Mon: Research | Tue: Write | Wed: Edit | Thu: Publish | Fri: Promote"
    _log "schedule" "${1:-}"
}

cmd_hooks() {
    echo "  Question | Statistic | Story | Bold claim | Controversy"
    _log "hooks" "${1:-}"
}

cmd_cta() {
    echo "  Subscribe | Share | Comment | Try it | Learn more"
    _log "cta" "${1:-}"
}

cmd_repurpose() {
    echo "  Blog -> Thread -> Video -> Carousel -> Newsletter"
    _log "repurpose" "${1:-}"
}

cmd_metrics() {
    echo "  Views | Clicks | Shares | Time on page | Conversions"
    _log "metrics" "${1:-}"
}

cmd_ideas() {
    echo "  How-to | Listicle | Case study | Interview | Comparison"
    _log "ideas" "${1:-}"
}

Technical Analysis

The script creates a persistent data directory and appends the first user-supplied argument from each operational command to history.log. The content is stored in plaintext, and the script does not explicitly establish restrictive permissions for the directory or log fi ...[truncated 1767 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove persistent argument logging unless it is essential to the documented functionality.

  2. If logging is required, make it explicitly opt-in and clearly document the data location, captured fields, retention period, and deletion procedure.

  3. Do not store raw user content. Record only non-sensitive operational metadata, such as the command name, or redact and truncate arguments before storage.

  4. Establish restrictive permissions before creating storage:

    bash
    umask 077
    mkdir -p -- "$DATA_DIR"
    chmod 700 -- "$DATA_DIR"
    touch -- "$DATA_DIR/history.log"
    chmod 600 -- "$DATA_DIR/history.log"
    
  5. Validate a user-supplied COPYWRITER_PRO_DIR and reject unsafe locations, including shared or unexpectedly writable directories.

  6. Provide a command to inspect and securely delete retained history, and implement a short automatic retention limit.

  7. Update SKILL.md so that every executable entry point and all persistent data behavior are accurately disclosed.

Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • 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 (6)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The code is related to content/copy assistance, so it is in the same broad domain, but the description does not accurately represent the actual behavior. The implementation is a basic shell CLI that outputs fixed templates and logs commands to local files. It lacks several prominently declared capabilities (e.g., 100 headline formulas, AIDA, pain points, testimonials, landing-page copy) and instead includes other functions like SEO, content scheduling, repurposing, metrics, and ideas that are not declared. The undeclared local logging/storage is also an access/resource behavior absent from the description.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The help text and command descriptions present the skill as a Chinese-language copywriting assistant, and subsequent prompts instruct the AI entirely in Chinese. There is no indication that the user can opt into another language or that the skill is intentionally restricted to a China-specific or Chinese-only use case.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script logs raw user input to a persistent local history file without any notice, consent, or controls. Even though this is a local CLI tool, prompts may contain sensitive marketing plans, customer data, unpublished copy, or proprietary business information, which can later be exposed to other local users, backups, or support bundles.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

User-provided content is written verbatim to a plain-text history log, creating a persistent data-retention risk. In this skill's context, users may paste drafts, customer pain points, testimonials, SEO plans, or confidential campaign material, so retaining them indefinitely in cleartext increases the chance of accidental disclosure through local compromise, shared accounts, backups, or log collection.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The natural-language description and heading present the skill in both Chinese and English, but the operational instructions and command descriptions are primarily in Chinese with no explicit opt-in or language selection guidance. This can amount to an implicit language preference rather than a documented user choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This markdown file contains user-facing instructional content exclusively in Chinese, but it does not indicate that the skill is region-specific or provide any user opt-in for language preference. Under the policy, forcing a specific language without user choice can be a natural-language policy violation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.