Back to skill

Security audit

JLC EDA Drawing

Security checks for vulnerabilities and agentic risk

Overview

The skill is a coherent EasyEDA automation helper, but its bundled bridge exposes powerful EasyEDA code execution without adequate access controls.

Review before installing. Use this only in a trusted local environment, do not expose or forward ports 49620-49629, stop the bridge when done, and avoid enabling EasyEDA external file-system permissions unless you specifically need them. Prefer a version that binds to 127.0.0.1, requires a per-session token for HTTP and WebSocket calls, validates browser origins, and asks before destructive design or file operations.

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
scripts/bridge-server.mjs:126
Finding

Unauthenticated Network-Accessible Arbitrary Code Execution in the EasyEDA Bridge

Content
View full analysis
{ // CORS res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); ``` ```javascript // lines 190-215 if (req.method === 'POST' && req.url === '/execute') { let body = ''; for await (const chunk of req) body += chunk; try { const payload = JSON.parse(body); const code = payload.code; const windowId = payload.windowId; // optional, uses active window if not specified if (!code || typeof code !== 'string') { res.writeHead(400, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: 'Missing "code" field (string)' })); return; } const result = await executeOnEda(code, windowId); res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ success: true, result, windowId: windowId || activeEdaWindowId })); } catch (err) { const status = err.message?.includes('not connected') ? 503 : 500; res.writeHead(status, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ success: false, error: err.message })); } return; } ``` ```javascript // lines 230-316 const wss = new WebSocketServer({ server: httpServer }); wss.on('connection', (ws, req) => { const clientType = req.url === '/eda' ? 'eda' : 'agent'; console.log(`[WS] New ${clientType} connection from ${req.socket.remoteAddress}`); // Send handshake message for client verification ws.send(JSON.stringify({ type: 'handshake', service: SERVICE_ID, clientType, timestamp: Date.now(), })); if (clientType === 'ed ...[truncated 6140 chars]
Remediation
View remediation
{ // startup handling }); ``` If IPv6 loopback support is required, create an explicitly controlled listener rather than accepting connections on unspecified interfaces. 2. **Require per-session authentication** - Generate a cryptographically random token at startup. - Require it in an `Authorization: Bearer ` header for every non-health HTTP endpoint. - Require the same token during the WebSocket upgrade, preferably through an authorization header or a short-lived challenge-response mechanism. - Do not place persistent secrets in source code, command-line arguments, or URLs. 3. **Authenticate EasyEDA clients separately** - Do not trust a client merely because it connects to `/eda`. - Pair the EasyEDA extension with the bridge using a one-time code or cryptographic session secret. - Reject duplicate or unrecognized window identifiers. - Bind pending responses to the authenticated EDA connection that received the request. 4. **Restrict browser access** - Replace `Access-Control-Allow-Origin: *` with a strict allowlist if browser-based callers are genuinely required. - Reject missing or unapproved `Origin` values on WebSocket upgrades. - If browser callers are unnecessary, omit CORS headers entirely. 5. **Reduce arbitrary execution capability** - Prefer a typed, allowlisted command protocol for required EDA operations. - Validate command names, argument types, project context, and target document type. - If arbitrary JavaScript must remain available, make it an explicit opt-in development mode with prominent warnings and stronger authentication. 6. **Apply request safeguards** - Enforce a small maximum HTTP request-body size and terminate oversized requests. - Limit WebSocket message size through the WebSocket server configuration. - Add rate limiting a ...[truncated 809 chars]
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (474)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
1. `references/easyeda-api-reference/_quick-reference.md`

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/easyeda-api-reference/_index.md (reported line 62)May include surrounding context.

md
| [ISCH_PrimitiveCbbSymbolComponent](classes/ISCH_PrimitiveCbbSymbolComponent.md) | 复用模块符号图元 |  |
| [ISCH_PrimitiveCircle](classes/ISCH_PrimitiveCircle.md) | 圆图元 |  |
| [ISCH_PrimitiveComponent](classes/ISCH_PrimitiveComponent.md) | 器件图元 |  |
| [ISCH_PrimitiveComponentPin](classes/ISCH_PrimitiveComponentPin.md) | 器件引脚图元 | 器件引脚图元是一个特殊的图元,它指的是在原理图画布上关联到符号的引脚  器件引脚图元仅可更改 `pinNumber`<!-- -->、`noConnected` 属性,其它所有属性均为只读, 并且你只能通过 [器件类的 getAllPinsByPrimitiveId 方法](./pro-api.sch_primitivecomponent.getallpinsbyprimitiveid.md) 或  获取到器件引脚图元 |
| [ISCH_PrimitivePin](classes/ISCH_PrimitivePin.md) | 引脚图元 | 引脚图元仅符号编辑器可用,在原理图图页内,关联到符号的引脚被称为 [器件引脚图元](./pro-api.isch_primitivecomponentpin.md) |
| [ISCH_PrimitivePolygon](classes/ISCH_PrimitivePolygon.md) | 多边形(折线)图元 |  |
| [ISCH_PrimitiveRectangle](classes/ISCH_PrimitiveRectangle.md) | 矩形图元 |  |

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/easyeda-api-reference/_index.md (reported line 62)May include surrounding context.

md
| [ISCH_PrimitiveCbbSymbolComponent](classes/ISCH_PrimitiveCbbSymbolComponent.md) | 复用模块符号图元 |  |
| [ISCH_PrimitiveCircle](classes/ISCH_PrimitiveCircle.md) | 圆图元 |  |
| [ISCH_PrimitiveComponent](classes/ISCH_PrimitiveComponent.md) | 器件图元 |  |
| [ISCH_PrimitiveComponentPin](classes/ISCH_PrimitiveComponentPin.md) | 器件引脚图元 | 器件引脚图元是一个特殊的图元,它指的是在原理图画布上关联到符号的引脚  器件引脚图元仅可更改 `pinNumber`<!-- -->、`noConnected` 属性,其它所有属性均为只读, 并且你只能通过 [器件类的 getAllPinsByPrimitiveId 方法](./pro-api.sch_primitivecomponent.getallpinsbyprimitiveid.md) 或  获取到器件引脚图元 |
| [ISCH_PrimitivePin](classes/ISCH_PrimitivePin.md) | 引脚图元 | 引脚图元仅符号编辑器可用,在原理图图页内,关联到符号的引脚被称为 [器件引脚图元](./pro-api.isch_primitivecomponentpin.md) |
| [ISCH_PrimitivePolygon](classes/ISCH_PrimitivePolygon.md) | 多边形(折线)图元 |  |
| [ISCH_PrimitiveRectangle](classes/ISCH_PrimitiveRectangle.md) | 矩形图元 |  |

Missing User Warnings

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The markdown documents deleteFileInFileSystem, saveFile, and saveFileToFileSystem, which can delete or overwrite user files, but provides no warning about file loss, overwrite risk, or need for confirmation. Because this is a markdown description of behaviors affecting user data, the omission qualifies as a missing user warning.

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/easyeda-api-reference/classes/DMT_EditorControl.md (reported line 467)May include surrounding context.

md
</td><td>

标签页 ID,此处支持 [IDMT\_SchematicPageItem.uuid](../interfaces/IDMT_SchematicPageItem.md)<!-- -->、[IDMT\_PcbItem.uuid](../interfaces/IDMT_PcbItem.md)<!-- -->、[IDMT\_PanelItem.uuid](../interfaces/IDMT_PanelItem.md) 作为输入


</td></tr>

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/easyeda-api-reference/classes/DMT_EditorControl.md (reported line 880)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_EditorTabItem](../interfaces/IDMT_EditorTabItem.md)<!-- -->&gt;&gt;

标签页列表

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/easyeda-api-reference/classes/DMT_EditorControl.md (reported line 880)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_EditorTabItem](../interfaces/IDMT_EditorTabItem.md)<!-- -->&gt;&gt;

标签页列表

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/easyeda-api-reference/classes/DMT_Project.md (reported line 179)May include surrounding context.

md
</td><td>

_(可选)_ 工程名称,不可重复,仅支持字母 `a-zA-Z`<!-- -->、数字 `0-9`<!-- -->、中划线 `-`<!-- -->,如若不指定,则根据工程友好名称自动生成


</td></tr>

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/easyeda-api-reference/classes/DMT_Project.md (reported line 179)May include surrounding context.

md
</td><td>

_(可选)_ 工程名称,不可重复,仅支持字母 `a-zA-Z`<!-- -->、数字 `0-9`<!-- -->、中划线 `-`<!-- -->,如若不指定,则根据工程友好名称自动生成


</td></tr>

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/easyeda-api-reference/classes/DMT_Schematic.md (reported line 682)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_SchematicPageItem](../interfaces/IDMT_SchematicPageItem.md)<!-- -->&gt;&gt;

所有原理图图页的详细属性的数组

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/easyeda-api-reference/classes/DMT_Schematic.md (reported line 682)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_SchematicPageItem](../interfaces/IDMT_SchematicPageItem.md)<!-- -->&gt;&gt;

所有原理图图页的详细属性的数组

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/easyeda-api-reference/classes/DMT_Schematic.md (reported line 724)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_SchematicPageItem](../interfaces/IDMT_SchematicPageItem.md)<!-- -->&gt;&gt;

所有原理图图页的详细属性的数组

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/easyeda-api-reference/classes/DMT_Schematic.md (reported line 724)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_SchematicPageItem](../interfaces/IDMT_SchematicPageItem.md)<!-- -->&gt;&gt;

所有原理图图页的详细属性的数组

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/easyeda-api-reference/classes/DMT_Team.md (reported line 92)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IDMT\_TeamItem](../interfaces/IDMT_TeamItem.md)<!-- -->&gt;&gt;

所有参与的团队的详细属性

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/easyeda-api-reference/classes/IPCB_ComplexPolygon.md (reported line 119)May include surrounding context.

md
</td><td>

[TPCB\_PolygonSourceArray](../types/TPCB_PolygonSourceArray.md) \| Array&lt;[TPCB\_PolygonSourceArray](../types/TPCB_PolygonSourceArray.md)<!-- -->&gt; \| [IPCB\_Polygon](./IPCB_Polygon.md) \| Array&lt;[IPCB\_Polygon](./IPCB_Polygon.md)<!-- -->&gt;


</td><td>

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/easyeda-api-reference/classes/IPCB_PrimitiveArc.md (reported line 478)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveArc](./IPCB_PrimitiveArc.md)<!-- -->&gt;

圆弧线图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveArc.md (reported line 478)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveArc](./IPCB_PrimitiveArc.md)<!-- -->&gt;

圆弧线图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveArc.md (reported line 561)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IPCB\_PrimitiveLine](./IPCB_PrimitiveLine.md) \| [IPCB\_PrimitiveArc](./IPCB_PrimitiveArc.md)<!-- -->&gt;&gt;

整段导线内的所有直线和圆弧线

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/easyeda-api-reference/classes/IPCB_PrimitiveArc.md (reported line 561)May include surrounding context.

md
## 返回值

Promise&lt;Array&lt;[IPCB\_PrimitiveLine](./IPCB_PrimitiveLine.md) \| [IPCB\_PrimitiveArc](./IPCB_PrimitiveArc.md)<!-- -->&gt;&gt;

整段导线内的所有直线和圆弧线

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/easyeda-api-reference/classes/IPCB_PrimitiveComponent.md (reported line 616)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveComponent](./IPCB_PrimitiveComponent.md)<!-- -->&gt;

器件图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveComponent.md (reported line 616)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveComponent](./IPCB_PrimitiveComponent.md)<!-- -->&gt;

器件图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveComponentPad.md (reported line 193)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveComponentPad](./IPCB_PrimitiveComponentPad.md)<!-- -->&gt;

器件焊盘图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveComponentPad.md (reported line 193)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveComponentPad](./IPCB_PrimitiveComponentPad.md)<!-- -->&gt;

器件焊盘图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveDimension.md (reported line 364)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveDimension](./IPCB_PrimitiveDimension.md)<!-- -->&gt;

尺寸标注图元对象

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/easyeda-api-reference/classes/IPCB_PrimitiveDimension.md (reported line 364)May include surrounding context.

md
## 返回值

Promise&lt;[IPCB\_PrimitiveDimension](./IPCB_PrimitiveDimension.md)<!-- -->&gt;

尺寸标注图元对象

Static analysis

No suspicious patterns detected.