Back to skill

Security audit

Output Forge

Security checks for vulnerabilities and agentic risk

Overview

This is a local text-formatting skill, but users should review outputs because it removes AI-disclosure wording by default and does not sanitize generated HTML.

Install only if you want a local formatter for text you already control. Review output before publishing, use --no-clean when AI provenance, capability limits, or uncertainty statements must remain, and do not use the HTML formats on untrusted input unless you sanitize the result separately.

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

Error
Location
output_templates.py:16
Finding
Unescaped User-Controlled Content Enables HTML and Script Injection<![CDATA[ ## Vulnerability Details **File Location**: `output_templates.py:16-49` and `output_templates.py:83-129` **Vulnerability Type**: Unescaped HTML content injection / stored cross-site scripting **Risk Level**: High ### Vulnerable Code #### WordPress template (`output_templates.py:16-49`) ```python def wordpress_template(content, metadata, options): """WordPress HTML format with proper structure""" title = metadata.get('title', 'Untitled') author = metadata.get('author', 'Anonymous') date = metadata.get('date', datetime.now().strftime('%Y-%m-%d')) tags = metadata.get('tags', []) description = metadata.get('description', '') # Convert markdown-style formatting to HTML content = content.replace('\n\n', '</p>\n<p>') content = re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>', content) content = re.sub(r'\*(.+?)\*', r'<em>\1</em>', content) content = re.sub(r'`(.+?)`', r'<code>\1</code>', content) # Handle headers content = re.sub(r'^### (.+)$', r'<h3>\1</h3>', content, flags=re.MULTILINE) content = re.sub(r'^## (.+)$', r'<h2>\1</h2>', content, flags=re.MULTILINE) content = re.sub(r'^# (.+)$', r'<h1>\1</h1>', content, flags=re.MULTILINE) # Add image placeholders if requested if options.get('image_placeholders'): content = content.replace('[IMAGE]', '<!-- wp:image -->\n<figure class="wp-block-image"><img src="" alt=""/></figure>\n<!-- /wp:image -->') tags_html = ' '.join(f'<span class="tag">{html.escape(tag)}</span>' for tag in tags) return f"""<!-- wp:post-title /--> <!-- wp:post-meta --> <div class="post-meta"> <span class="author">By {html.escape(author)}</span> <span class="date">{html.escape(date)}</span> </div> <!-- /wp:post-meta --> <!-- wp:post-content --> <p>{content}</p> <!-- /wp:post-content --> ``` #### Email template (`output_templates.py:83-129`) ```python def email_template(content, metadata, options): """Email newslet ...[truncated 4320 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Escape all raw text before inserting it into HTML: ```python safe_content = html.escape(content, quote=True) ``` 2. Apply Markdown-style transformations only after escaping the input, so only markup generated by the application is treated as HTML: ```python safe_content = html.escape(content, quote=True) safe_content = safe_content.replace('\n\n', '</p>\n<p>') safe_content = re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>', safe_content) safe_content = re.sub(r'\*(.+?)\*', r'<em>\1</em>', safe_content) safe_content = re.sub(r'`(.+?)`', r'<code>\1</code>', safe_content) ``` 3. If intentional raw HTML support is required, use a maintained HTML sanitizer with a strict allowlist. Permit only necessary elements and attributes, and reject: - `script`, `iframe`, `object`, `embed`, and unsafe SVG or MathML elements; - attributes beginning with `on`, such as `onclick` and `onerror`; - `javascript:`, unsafe `data:`, and other dangerous URL schemes; - inline styles or other attributes that are not explicitly required. 4. Treat downstream platform sanitization as defense in depth rather than the primary control. 5. Add automated security tests covering: - `<script>` elements; - event-handler attributes such as `onerror`; - `javascript:` links; - SVG-based payloads; - malformed and nested HTML; - encoded payloads; - normal Markdown to verify that escaping does not break expected formatting. 6. Clearly distinguish trusted raw-HTML mode from the safe default if raw HTML must remain available. Require an explicit option to enable it and display a security warning. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (15)

Hidden Instructions

High
Category
Prompt Injection
Content
---
name: "OutputForge AI Output Formatter"
description: "Transform raw AI output into platform-ready content with proper formatting, metadata, and cleanup. Markdown, HTML, plain text, and structured data output."
author: "@TheShadowRose"
Confidence
60% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Hidden Instructions

High
Category
Prompt Injection
Content
---
name: "OutputForge AI Output Formatter"
description: "Transform raw AI output into platform-ready content with proper formatting, metadata, and cleanup. Markdown, HTML, plain text, and structured data output."
author: "@TheShadowRose"
Confidence
60% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The README explicitly promotes removing AI-origin disclosures and similar disclaimers from generated text, which can facilitate deceptive content laundering. In contexts involving compliance, education, customer support, or regulated disclosures, stripping provenance or capability limits can mislead readers about authorship and reliability.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### 🧹 AI-ism Cleanup

Automatically removes common AI hedging and disclaimers:

- "As an AI language model..."
- "It's important to note that..."
Confidence
80% 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.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
### 🧹 AI-ism Cleanup

Automatically removes common AI hedging and disclaimers:

- "As an AI language model..."
- "It's important to note that..."
Confidence
80% 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.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
This section normalizes automatic deletion of AI hedging, capability limits, and disclosure language without safeguards. That behavior can remove important context about uncertainty, limitations, or non-human authorship, increasing the risk of deceptive or overconfident outputs being published.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The before/after example demonstrates removing an AI-origin disclosure specifically to make text appear more natural and confident. That is a direct pattern for concealing machine origin and capability boundaries, which can be abused to misrepresent content authenticity or expertise.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The cleanup details explicitly categorize AI references, capability disclaimers, and training-limit disclosures as text to remove. This creates a built-in mechanism for laundering AI-generated content into text that appears fully human-authored or more authoritative than warranted.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The skill explicitly markets removal of AI disclosures such as "As an AI..." disclaimers to make generated content sound more natural. This creates a transparency and misrepresentation risk by helping users conceal AI involvement or model limitations from downstream readers without any policy guardrails or disclosure-preserving options.

Natural-Language Policy Violations

Medium
Confidence
97% confidence
Finding
The cleanup section repeatedly lists AI identity, opinion, internet-access, and training-cutoff disclaimers as targets for automatic removal. In context, this goes beyond harmless editing and enables users to strip signals that content was AI-generated or that claims may be constrained by model limitations, increasing deception and compliance risk.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The code explicitly removes uncertainty, limitation, and disclosure phrases such as lack of internet access, knowledge cutoff, and personal-opinion disclaimers. In a text-cleaning skill, this can cause safety-relevant caveats and factual limitations to be silently stripped, making outputs appear more authoritative or capable than they are. The risk is elevated because the removal is broad, regex-driven, and applied without contextual checks or user warnings.

Natural-Language Policy Violations

Medium
Confidence
89% confidence
Finding
The default rule set encodes a blanket policy of stripping AI self-identification and capability-limit statements, which undermines transparency about the origin and reliability boundaries of generated text. If used in user-facing or compliance-sensitive contexts, this can mislead recipients into believing content was produced without AI involvement or without known limitations, increasing trust in potentially flawed output.

Scope Creep

Low
Category
Excessive Agency
Content
**USE AT YOUR OWN RISK.**

- The author(s) are NOT liable for any damages, losses, or consequences arising from 
  the use or misuse of this software — including but not limited to financial loss, 
  data loss, security breaches, business interruption, or any indirect/consequential damages.
- This software does NOT constitute financial, legal, trading, or professional advice.
- Users are solely responsible for evaluating whether this software is suitable for
Confidence
70% confidence
Finding
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Scope Creep

Low
Category
Excessive Agency
Content
**USE AT YOUR OWN RISK.**

- The author(s) are NOT liable for any damages, losses, or consequences arising from 
  the use or misuse of this software — including but not limited to financial loss, 
  data loss, security breaches, business interruption, or any indirect/consequential damages.
- This software does NOT constitute financial, legal, trading, or professional advice.
- Users are solely responsible for evaluating whether this software is suitable for
Confidence
70% confidence
Finding
Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Intent-Code Divergence

Low
Confidence
79% confidence
Finding
The DATA DISCLAIMER states that the software does not transmit data externally unless explicitly configured by the user. However, the same README includes multiple external URLs and service references, creating an intent-level inconsistency in the documentation about external connectivity expectations. This is a documentation contradiction rather than confirmed code behavior, so severity is low.

Static analysis

No suspicious patterns detected.