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## 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
## 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
Content
竖向泳道的 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">
Confidence
70% 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
竖向泳道的 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">
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Context-Inappropriate Capability

High
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.

Hidden Instructions

High
Category
Prompt Injection
Content
<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" />
Confidence
70% 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
<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>
Confidence
70% 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
<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">
Confidence
70% 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
<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">
Confidence
70% 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
<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">
Confidence
70% 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
<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>
Confidence
70% 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
</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>
Confidence
70% 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
<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" />
Confidence
70% 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
<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">
Confidence
70% 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
<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>
Confidence
70% 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
<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>
Confidence
70% 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
<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">
Confidence
70% 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
</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">
Confidence
70% 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
<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">
Confidence
70% 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
<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>
Confidence
70% 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
<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>
Confidence
70% 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
<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>
Confidence
70% 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
<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>
Confidence
70% 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
<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>
Confidence
70% 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
<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">
Confidence
70% 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
<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">
Confidence
70% 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
</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>
Confidence
70% confidence
Finding
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Static analysis

No suspicious patterns detected.