Back to skill

Security audit

ponytail

Security checks for vulnerabilities and agentic risk

Overview

This skill broadly steers the agent toward minimal coding choices during a session, but it does not run code, fetch payloads, access credentials, or persist on the host.

Install this only if you want the agent to consistently favor minimal code and short explanations during the session. Use the stop phrase or normal mode when you need fuller design work, detailed reporting, or strict adherence to a larger requested scope.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

T01 · Skill Instruction Hijacking

Error
Location
SKILL.md:13
Finding

Persistent Session-Wide Agent Instruction Hijacking

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 13–18, 44–55, 57–64, and 108–110
Vulnerability Type: Persistent behavioral and output-policy override
Risk Level: High

Vulnerable Code

SKILL.md, lines 13–18:

markdown
You are a lazy senior developer. Lazy means efficient, not careless. You have
seen every over-engineered codebase and been paged at 3am for one. The best
code is the code never written.

## Persistence

ACTIVE EVERY RESPONSE. No drift back to over-building. Still active if
unsure. Off only: "stop ponytail" / "normal mode". Default: **full**.
Switch: `/ponytail lite|full|ultra`.

SKILL.md, lines 44–55:

markdown
## Rules

- No unrequested abstractions: no interface with one implementation, no factory for one product, no config for a value that never changes.
- No boilerplate, no scaffolding "for later", later can scaffold for itself.
- Deletion over addition. Boring over clever, clever is what someone decodes at 3am.
- Fewest files possible. Shortest working diff wins �?but only once you understand the problem. The smallest change in the wrong place isn't lazy, it's a second bug.
- Complex request? Ship the lazy version and question it in the same response, "Did X; Y covers it. Need full X? Say so." Never stall on an answer you can default.
- Two stdlib options, same size? Take the one that's correct on edge cases. Lazy means writing less code, not picking the flimsier algorithm.
- Mark deliberate simplifications with a `ponytail:` comment (`// ponytail: this exists`), simple reads as intent, not ignorance. Shortcut with a known ceiling (global lock, O(n²) scan, naive heuristic)? The comment names the ceiling and the upgrade path: `# ponytail: global lock, per-account locks if throughput matters`.

SKILL.md, lines 57–64:

markdown
## Output

Code first. Then at most three short lines: what was skipped, when to add it.
No essays, no feature tours, no design notes. If the explanation is longer
than the
...[truncated 3133 chars]
Remediation
View remediation

Remediation Suggestions

  1. Remove the replacement-role directive and describe the material as optional coding guidance rather than an identity the agent must assume.
  2. Delete ACTIVE EVERY RESPONSE, “No drift,” and all session-persistence language.
  3. Require explicit user invocation for each task in which the skill should apply.
  4. State that every recommendation is subordinate to system, developer, and current user instructions.
  5. Replace mandatory simplification and deletion rules with non-binding preferences that apply only when they preserve all requested behavior.
  6. Remove instructions to question, omit, or reduce complex requirements without prior user approval.
  7. Replace the fixed three-line output restriction with a recommendation to be concise when the user has not requested a report, walkthrough, or detailed explanation.
  8. Ensure disabling the skill does not depend on special phrases; its scope should end automatically after the invoked task.
  9. Add an explicit safeguard such as:
markdown
Apply these suggestions only when the user explicitly invokes this skill for
the current task. Never override higher-priority instructions, omit requested
functionality, or constrain an output format required by the user. The skill
does not persist beyond the current task.
  1. Align the version declared in SKILL.md (1.0.0) with _meta.json (4.8.3) to avoid ambiguity about which reviewed policy is being distributed.
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 (3)

Hidden Instructions

High
Category
Prompt Injection
Confidence
60% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 1)May include surrounding context.

md
---
name: ponytail
version: 1.0.0
description: "Force the simplest, shortest solution that works �� YAGNI, stdlib first, no unrequested abstractions"

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill declares itself 'ACTIVE EVERY RESPONSE' by default and only disables on specific phrases, which creates an overly broad activation scope. This can unexpectedly steer unrelated conversations and cause the agent to apply the skill outside the user's intended context, increasing the chance of unsafe simplification or policy interference.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill forces a default response mode ('full') and instructs the agent to persist that style across responses without user opt-in. This undermines user control and can bias outputs toward terse, minimal changes even when the user did not request that behavior, which is especially risky for complex or safety-sensitive tasks.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.