Back to skill

Security audit

Swimlane Arch

Security checks for vulnerabilities and agentic risk

Overview

This is mostly a local Draw.io diagram generator, but it needs review because it can automatically upload diagram contents to a mismatched third-party endpoint when an API key is present.

Install only if you are comfortable with generated diagram content potentially leaving your environment when PROCESSON_API_KEY is set. Prefer using the default local Draw.io output, remove or unset the API key unless you intentionally want cloud export, and verify the external endpoint before sending confidential business or architecture diagrams.

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
SKILL.md:196
Finding

Automatic Diagram Upload to a Mismatched Third-Party API Endpoint

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 196-204
Vulnerability Type: Unintended third-party data disclosure caused by insecure integration configuration
Risk Level: Medium

Vulnerable Code Snippet

The following is a faithful English rendering of the complete affected section:

markdown
### ProcessOn (API key required)

If the user has configured a ProcessOn API key through the
`PROCESSON_API_KEY` environment variable, prioritize the ProcessOn API:

1. Convert the diagram into a format supported by ProcessOn.
2. Call `POST https://open.pingcode.com/v1/graph` to upload it and generate an image.
3. Return the ProcessOn online link for collaboration.

If no ProcessOn API key is configured, output Draw.io XML by default.

Technical Analysis

The Skill describes the remote integration as ProcessOn but instructs the Agent to upload diagram data to open.pingcode.com, which is a different service domain. This provider-to-endpoint mismatch prevents a user from reliably identifying the recipient of the uploaded information.

The integration is selected automatically whenever PROCESSON_API_KEY is detected. The instructions do not require explicit confirmation before transmission and do not define:

  • Which diagram fields or user inputs are transmitted.
  • Whether confidential content must be removed before upload.
  • How the API key is placed in the request.
  • Whether request data or credentials may be logged.
  • The external service's retention and access policies.
  • How the endpoint's ownership and authenticity are verified.

Diagram content may contain internal architecture, database names, service relationships, approval processes, external integrations, or organizational responsibilities. Automatically sending such content to an ambiguously identified service creates a confidentiality risk. The unspecified authentication procedure also creates a potential credential-exposure r ...[truncated 1840 chars]

Remediation
View remediation

Remediation Suggestions

  1. Verify the provider's official API documentation and replace the endpoint with an authenticated, provider-owned ProcessOn domain. If open.pingcode.com is intentionally used, identify it accurately and document the relationship between the services.
  2. Default to local Draw.io generation. Do not enable remote upload merely because an environment variable exists.
  3. Before every remote upload, display the exact recipient domain and categories of data being sent, then require explicit user confirmation.
  4. Apply data minimization by excluding prompts, metadata, credentials, and diagram fields that are not required by the remote API.
  5. Send API keys only through the provider's documented authorization header over HTTPS. Never place credentials in URLs, diagram XML, filenames, returned links, logs, or error messages.
  6. Validate the destination against a fixed allowlist and reject redirects to unapproved domains.
  7. Document retention, deletion, access-control, and privacy behavior for uploaded diagrams.
  8. Handle remote failures securely by falling back to local generation without exposing credentials or complete sensitive response bodies.
  9. Add tests that verify the destination hostname, ensure authorization headers are redacted from logs, and confirm that uploads cannot occur without affirmative consent.
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • 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 (39)

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 · SKILL.md (reported line 84)May include surrounding context.

竖向泳道的 Draw.io XML 关键差异:

xml
<!-- 竖向泳道:使用 horizontal=0 或在 style 中指定方向 -->
<mxCell id="swimlane1" value="角色名称" 
  style="swimlane;horizontal=0;fillColor=#f5f5f5;strokeColor=#666666;fontSize=14;fontStyle=1;startSize=40;" 
  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 · SKILL.md (reported line 84)May include surrounding context.

竖向泳道的 Draw.io XML 关键差异:

xml
<!-- 竖向泳道:使用 horizontal=0 或在 style 中指定方向 -->
<mxCell id="swimlane1" value="角色名称" 
  style="swimlane;horizontal=0;fillColor=#f5f5f5;strokeColor=#666666;fontSize=14;fontStyle=1;startSize=40;" 
  vertex="1" parent="1">

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

This section instructs the agent to upload generated diagrams to an external ProcessOn endpoint, which is a material capability increase over local file/XML generation. User-provided diagram content may contain sensitive business workflows or architecture details, so automatic or preferred remote upload creates a real confidentiality and data-governance risk.

Content

No source excerpt is available for this finding.

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 · references/arch-template.xml (reported line 7)May include surrounding context.

text
<mxCell id="0" />
    <mxCell id="1" parent="0" />
    
    <!-- ==================== 用户层 ==================== -->
    <!-- 用户层标签 -->
    <mxCell id="layer_user_label" value="用户层" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;fontSize=14;fontStyle=1;fontColor=#82b366;fillColor=none;strokeColor=none;" vertex="1" parent="1">
      <mxGeometry x="20" y="30" width="80" height="30" as="geometry" />

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 · references/arch-template.xml (reported line 214)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 服务层 → 数据层 -->
    <mxCell id="edge_svc_db1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=1.5;" edge="1" parent="1" source="svc_auth" target="db_person">
      <mxGeometry relative="1" as="geometry" />
    </mxCell>

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 · references/arch-template.xml (reported line 252)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 应用层 → 外部系统 -->
    <mxCell id="edge_app_ext1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#999999;strokeColor=#999999;strokeWidth=1.5;dashed=1;" edge="1" parent="1" source="app_share" target="ext_3party">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/arch-template.xml (reported line 284)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 同层连接(数据层内部) -->
    <mxCell id="edge_db_db1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#888888;strokeColor=#888888;strokeWidth=1;dashed=1;" edge="1" parent="1" source="db_person" target="db_corp">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/arch-template.xml (reported line 284)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 同层连接(数据层内部) -->
    <mxCell id="edge_db_db1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#888888;strokeColor=#888888;strokeWidth=1;dashed=1;" edge="1" parent="1" source="db_person" target="db_corp">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-template.xml (reported line 7)May include surrounding context.

text
<mxCell id="0" />
    <mxCell id="1" parent="0" />
    
    <!-- 泳道1: 群众/申请人 -->
    <mxCell id="swimlane1" value="群众/申请人" style="swimlane;fillColor=#f5f5f5;strokeColor=#666666;fontSize=14;fontStyle=1;verticalAlign=top;align=left;spacingLeft=10;spacingTop=10;" vertex="1" parent="1">
      <mxGeometry x="0" y="0" width="1400" height="200" as="geometry" />
    </mxCell>

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 · references/swimlane-template.xml (reported line 132)May include surrounding context.

text
</mxGeometry>
    </mxCell>
    
    <!-- 窗口接收 → 材料审核 -->
    <mxCell id="edge3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_window_receive" target="node_review">
      <mxGeometry relative="1" as="geometry" />
    </mxCell>

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 · references/swimlane-template.xml (reported line 142)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 判断1是 → 转报部门 -->
    <mxCell id="edge5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#82b366;strokeColor=#82b366;strokeWidth=2;" edge="1" parent="1" source="node_judge1" target="node_transfer">
      <mxGeometry relative="1" as="geometry">
        <mxPoint as="offset" />

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 · references/swimlane-template.xml (reported line 154)May include surrounding context.

text
<mxGeometry x="620" y="80" width="30" height="20" as="geometry" />
    </mxCell>
    
    <!-- 转报部门 → 初审 -->
    <mxCell id="edge6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_transfer" target="node_approve1">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-template.xml (reported line 169)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 复核 → 判断2 -->
    <mxCell id="edge8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_approve2" target="node_judge2">
      <mxGeometry relative="1" as="geometry" />
    </mxCell>

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 · references/swimlane-template.xml (reported line 179)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 判断2是标签 -->
    <mxCell id="edge9_label" value="是" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;fontSize=11;fontColor=#82b366;fontStyle=1;" vertex="1" parent="1">
      <mxGeometry x="530" y="55" width="30" height="20" as="geometry" />
    </mxCell>

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 · references/swimlane-template.xml (reported line 199)May include surrounding context.

text
<mxGeometry x="320" y="100" width="30" height="20" as="geometry" />
    </mxCell>
    
    <!-- 退回补正 → 一次性告知 -->
    <mxCell id="edge11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#d9574a;strokeColor=#d9574a;strokeWidth=2;" edge="1" parent="1" source="node_return" target="node_notify_all">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-template.xml (reported line 219)May include surrounding context.

text
</mxGeometry>
    </mxCell>
    
    <!-- 判断1否 → 一次性告知 -->
    <mxCell id="edge13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#d9574a;strokeColor=#d9574a;strokeWidth=2;dashed=1;" edge="1" parent="1" source="node_judge1" target="node_notify_all">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-template.xml (reported line 235)May include surrounding context.

text
<mxGeometry x="545" y="130" width="30" height="20" as="geometry" />
    </mxCell>
    
    <!-- 群众补充材料 → 窗口接收 -->
    <mxCell id="edge14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_receive" target="node_window_receive">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-template.xml (reported line 250)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 自动通知 → 领取结果 -->
    <mxCell id="edge16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_auto_notify" target="node_result">
      <mxGeometry relative="1" as="geometry" />
    </mxCell>

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 · references/swimlane-vertical-template.xml (reported line 7)May include surrounding context.

text
<mxCell id="0" />
    <mxCell id="1" parent="0" />
    
    <!-- 泳道1: 申请人 - 竖向排列,startSize=40左侧标签区 -->
    <mxCell id="swimlane1" value="申请人" style="swimlane;horizontal=0;fillColor=#f5f5f5;strokeColor=#666666;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;spacingLeft=5;startSize=40;" vertex="1" parent="1">
      <mxGeometry x="0" y="0" width="1700" height="120" as="geometry" />
    </mxCell>

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 · references/swimlane-vertical-template.xml (reported line 7)May include surrounding context.

text
<mxCell id="0" />
    <mxCell id="1" parent="0" />
    
    <!-- 泳道1: 申请人 - 竖向排列,startSize=40左侧标签区 -->
    <mxCell id="swimlane1" value="申请人" style="swimlane;horizontal=0;fillColor=#f5f5f5;strokeColor=#666666;fontSize=14;fontStyle=1;verticalAlign=middle;align=center;spacingLeft=5;startSize=40;" vertex="1" parent="1">
      <mxGeometry x="0" y="0" width="1700" height="120" as="geometry" />
    </mxCell>

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 · references/swimlane-vertical-template.xml (reported line 158)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 材料审核 → 判断1 -->
    <mxCell id="edge3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_review" target="node_judge1">
      <mxGeometry relative="1" as="geometry" />
    </mxCell>

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 · references/swimlane-vertical-template.xml (reported line 168)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 判断1是标签 -->
    <mxCell id="edge4_label" value="是" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;fontSize=11;fontColor=#82b366;fontStyle=1;" vertex="1" parent="1">
      <mxGeometry x="480" y="75" width="20" height="20" as="geometry" />
    </mxCell>

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 · references/swimlane-vertical-template.xml (reported line 187)May include surrounding context.

text
<mxGeometry x="400" y="135" width="20" height="20" as="geometry" />
    </mxCell>
    
    <!-- 一次性告知 → 提交申请 (循环回到开头) -->
    <mxCell id="edge6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#d9574a;strokeColor=#d9574a;strokeWidth=2;dashed=1;" edge="1" parent="1" source="node_notify_all" target="node_submit">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-vertical-template.xml (reported line 202)May include surrounding context.

text
<mxGeometry relative="1" as="geometry" />
    </mxCell>
    
    <!-- 分发审批 → 审批部门A (初审) -->
    <mxCell id="edge8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_distribute" target="node_approve_a1">
      <mxGeometry relative="1" as="geometry">
        <Array as="points">

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 · references/swimlane-vertical-template.xml (reported line 220)May include surrounding context.

text
</mxGeometry>
    </mxCell>
    
    <!-- 审批部门A: 初审 → 判断 -->
    <mxCell id="edge10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;arrowColor=#333333;strokeColor=#333333;strokeWidth=2;" edge="1" parent="1" source="node_approve_a1" target="node_judge_a">
      <mxGeometry relative="1" as="geometry" />
    </mxCell>