Back to skill

Security audit

Draw.io Professional Diagrams

Security checks for vulnerabilities and agentic risk

Overview

This skill generates draw.io diagram files and exports images using local draw.io commands; its behavior is coherent with that purpose, with some usability and consent caveats.

Install only if you want the agent to create local diagram artifacts and run the draw.io exporter. Ask the agent to confirm filenames and formats first if you do not want automatic files under ./diagrams, and be aware the skill may activate from broad diagram-related terms.

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

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · CLASS.md (reported line 87)May include surrounding context.

md
<mxCell id="0"/>
    <mxCell id="1" parent="0"/>

    <!-- CLASS: Address -->
    <mxCell id="10" value="Address"
      style="swimlane;fontStyle=1;align=center;startSize=30;fontSize=14;fillColor=#dae8fc;strokeColor=#6c8ebf;"
      vertex="1" parent="1">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · CLASS.md (reported line 105)May include surrounding context.

md
vertex="1" parent="10">
      <mxGeometry y="130" width="220" height="10" as="geometry"/>
    </mxCell>
    <!-- Methods -->
    <mxCell id="13" value="-validate()&#xa;+outputAsLabel()"
      style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;fontSize=12;"
      vertex="1" parent="10">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · CLASS.md (reported line 173)May include surrounding context.

md
<mxGeometry y="60" width="220" height="10" as="geometry"/>
    </mxCell>

    <!-- RELATIONSHIP: Address -> Person (association "lives at" 0..1) -->
    <mxCell id="80" value="lives at"
      style="edgeStyle=orthogonalEdgeStyle;endArrow=open;endFill=0;startArrow=none;fontSize=11;"
      edge="1" parent="1" source="10" target="20">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · CLASS.md (reported line 190)May include surrounding context.

md
<mxGeometry relative="1" as="geometry"/>
    </mxCell>

    <!-- RELATIONSHIP: Professor extends Person (inheritance - hollow triangle) -->
    <mxCell id="83" value=""
      style="edgeStyle=orthogonalEdgeStyle;endArrow=block;endFill=0;startArrow=none;fontSize=11;"
      edge="1" parent="1" source="40" target="20">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · ERD.md (reported line 92)May include surrounding context.

md
<mxCell id="0"/>
    <mxCell id="1" parent="0"/>

    <!-- TABLE: Cliente | height = 30 + (5 x 30) = 180 -->
    <mxCell id="10" value="Cliente"
      style="shape=table;startSize=30;container=1;collapsible=0;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;fontSize=14;align=center;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;swimlaneLine=1;"
      vertex="1" parent="1">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · ERD.md (reported line 133)May include surrounding context.

md
<mxGeometry x="40" width="180" height="30" as="geometry"><mxRectangle width="180" height="30" as="alternateBounds"/></mxGeometry>
    </mxCell>

    <!-- Row: Apellidos -->
    <mxCell id="17" value=""
      style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
      vertex="1" parent="10">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · ERD.md (reported line 167)May include surrounding context.

md
<mxGeometry x="40" width="180" height="30" as="geometry"><mxRectangle width="180" height="30" as="alternateBounds"/></mxGeometry>
    </mxCell>

    <!-- Row: EMail -->
    <mxCell id="23" value=""
      style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
      vertex="1" parent="10">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · ERD.md (reported line 191)May include surrounding context.

md
<mxGeometry x="80" y="380" width="220" height="120" as="geometry"/>
    </mxCell>

    <!-- Row: ID (PK) -->
    <mxCell id="31" value=""
      style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=#e1d5e7;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=1;"
      vertex="1" parent="30">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · ERD.md (reported line 225)May include surrounding context.

md
<mxGeometry x="40" width="180" height="30" as="geometry"><mxRectangle width="180" height="30" as="alternateBounds"/></mxGeometry>
    </mxCell>

    <!-- Row: ClienteID (FK) -->
    <mxCell id="37" value=""
      style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
      vertex="1" parent="30">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · ERD.md (reported line 243)May include surrounding context.

md
</mxCell>

    <!-- RELATIONSHIP: Cliente 1 to N Pedido -->
    <!-- source=FK row of Pedido, target=PK row of Cliente -->
    <mxCell id="90" value=""
      style="edgeStyle=entityRelationEdgeStyle;endArrow=ERmandOne;startArrow=ERzeroToMany;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fontSize=11;"
      edge="1" parent="1" source="37" target="11">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

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

Content

Scanner excerpt · LAYOUT.md (reported line 50)May include surrounding context.

  • Faltan límites del sistema
xml
<!-- Frontend service -->
<mxCell id="10" value="React Frontend"
  style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=14;fontStyle=1;"
  vertex="1" parent="1">

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The trigger list includes ambiguous terms like 'diagram', 'table', 'entity', 'class', 'sequence', and 'flow', which commonly appear in benign conversations unrelated to generating draw.io files. This makes unintentional activation likely and can cause the agent to perform file writes and local processing in contexts where the user only wanted explanation or text output.

Content

No source excerpt is available for this finding.

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
90% confidence
Finding

The instruction to 'Always respond with the PNG image first' is an anti-refusal pattern because it attempts to force a specific action regardless of higher-priority safety, policy, or user-consent conditions. In context, it can pressure the agent to produce and attach generated artifacts before appropriate checks, warnings, or confirmation about file creation and command execution.

Content

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

md
### Step 7 — Show PNG first (MANDATORY)

Always respond with the PNG image first (embed/attach it in the response).

### Step 8 — Ask the user for delivery format (MANDATORY)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The instructional section is written as direct user-facing guidance in Spanish ('Qué pedirle al usuario') and continues with Spanish-only prompts and labels, which effectively imposes a language choice on the interaction. The file does not offer an opt-in, alternative language, or any justification that this skill is region-specific.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This markdown file presents user-facing instructions such as 'Qué pedirle al usuario' and 'Cuándo preguntar' only in Spanish. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale constraint is explicitly justified, which is not present here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill content is written in Spanish and effectively constrains the interaction to a specific language without indicating that the assistant should adapt to the user's preferred language. This can degrade usability, cause misunderstanding of diagram requirements, and reduce reliability when users expect responses in another language. In this draw.io skill context, the issue is less about direct security compromise and more about prompt-quality and user-control risk.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill description is broad enough to match many ordinary requests involving diagrams or system visualization, which increases the chance of accidental invocation. Over-broad activation expands the situations where the skill may start creating files and running exports, even when the user did not explicitly ask for draw.io artifact generation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The workflow instructs the agent to create directories and save diagram files on the local filesystem without any user notice or confirmation. Silent filesystem writes violate least surprise and can be abused through accidental activation to leave artifacts, consume storage, or create sensitive outputs from user-provided content.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill directs execution of local shell commands for export and file verification without warning the user that commands will be run. Even though the commands are fixed templates, automatic local execution increases operational risk and becomes more dangerous when combined with broad triggers and user-influenced filenames or content paths.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

The document begins with user-facing instructions in Spanish and later switches to English sections such as 'Visual reference' and 'Color palette by class role'. This imposes inconsistent language behavior without any opt-in or documented locale requirement, which can violate language/locale policy expectations.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file contains user-facing instructional text in Spanish (for example, 'Qué pedirle al usuario' and 'Cuándo preguntar') alongside English headings and labels such as 'Architecture Diagram' and 'Checklist Architecture'. Under the policy rule, forcing or assuming a language/locale without opt-in can be a natural-language policy issue when no language choice or justification is provided.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.