Back to skill

Security audit

Kunwu Builder

Security checks for vulnerabilities and agentic risk

Overview

This is a real Kunwu Builder control skill, but it exposes powerful scene-control actions through unsafe remote HTTP defaults and weak guardrails.

Install only if you intend to let an agent control a trusted, isolated Kunwu Builder instance. Set KUNWU_API_URL explicitly, avoid the hardcoded remote defaults, do not run the destructive test scripts on shared or production scenes, and require manual confirmation plus backups before reset, delete, export, batch, robot/equipment movement, or cloud model-loading actions.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
kunwu-tool.js:8
Finding

Unauthenticated plaintext communication with a hardcoded remote control endpoint

Content
View full analysis
{ const url = new URL(endpoint, BASE_URL); const body = JSON.stringify(data); const options = { hostname: API_HOST, port: API_PORT, path: endpoint, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body), }, }; const req = http.request(options, (res) => { let responseData = ''; res.on('data', (chunk) => { responseData += chunk; }); res.on('end', () => { try { const result = JSON.parse(responseData); ``` The same insecure pattern is hardcoded in the flagged test: ```js const HOST = '100.85.119.45'; // Tailscale IP const PORT = 16888; const req = http.request({ hostname: HOST, port: PORT, path: endpoint, method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(body), }, timeout: 30000, }, (res) => { ``` ### Technical Analysis The Skill transmits all API requests and responses through unauthenticated HTTP. The traffic may contain scene structure, model identifiers, robot state, sensor information, camera-trigger requests, equipment commands, and destructive scene-management operations. HTTP provides neither transport confidentiality nor endpoint authenticity. Any p ...[truncated 2226 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
test-50-rounds.js:6
Finding

Destructive randomized tests execute automatically against a hardcoded remote instance

Content
View full analysis
0.5 - Math.random()); const selected = shuffled.slice(0, numTests); ``` The related smart test also includes destructive behavior: ```js { name: 'Destroy object', endpoint: '/model/destroy', data: { id: 'test_box', useModeId: false }, expectSuccess: true, check: () => testEnv.models.some(m => m.modelName === 'test_box') }, ``` ### Technical Analysis Running the test script immediately connects to a hardcoded remote Kunwu instance and performs 50 rounds of randomly selected operations. The test set includes `/ResetScene`, `/model/destroy`, mode changes, pose changes, behavior modification, model creation, and camera operations. There is no dry-run mode, ...[truncated 2028 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
kunwu-tool.js:579
Finding

Unrestricted CLI endpoint forwarding exposes the full Kunwu API surface

Content
View full analysis
[json-data]'); console.log('Example: node kunwu-tool.js /GetAllModelInfo'); process.exit(0); } const endpoint = args[0]; let data = {}; if (args[1]) { try { data = JSON.parse(args[1]); } catch (e) { console.error('Invalid JSON data'); process.exit(1); } } try { const result = await callAPI(endpoint, data); ``` ### Technical Analysis The command-line entry point accepts an arbitrary endpoint and arbitrary JSON object and forwards them to the configured Kunwu service. It does not restrict requests to documented endpoints, distinguish read-only from mutating operations, validate endpoint-specific schemas, or require confirmation for destructive actions. The CLI does not create operating-system privileges. However, it converts any ability to control its arguments into access to the entire API authority available at the destination. This is especially consequential because the remote API is documented as having no authentication and includes reset, deletion, export, camera, robot, equipment-motion, and batch-execution operations. The generic forwarding behavior may be useful for development, but it exceeds the minimum privilege required by the Skill's declared model-building workflows. The unused `url` variable at line 47 does not mitigate the issue; the raw `endpoint` is placed directly into the HTTP request options. ### Attack Path 1. An untrusted workflow, wrapper, or user-controlled automation path influences the CLI arguments. 2. Instead of a benign query endpoint, it supplies a destructive or otherwise ...[truncated 1147 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (135)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**批量加载(推荐):使用 `scripts/model-loader.js`**

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**批量加载(推荐):使用 `scripts/model-loader.js`**

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
**批量加载(推荐):使用 `scripts/model-loader.js`**

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
**批量加载(推荐):使用 `scripts/model-loader.js`**

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

/ResetScene is a highly destructive endpoint because it can wipe the current working scene, yet the documentation presents it as a normal utility call without any warning about data loss. In an automation context, this materially increases the risk of accidental or unauthorized state destruction, especially since the API is unauthenticated and exposed over plain HTTP on an internal address.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guide instructs users to archive, transfer, extract, and then point the skill at a configurable HTTP API endpoint, including a non-local IP example, but it does not warn about verifying the destination host, transport security, or the sensitivity of the exported skill contents. In practice this can lead to accidental disclosure of internal code/configuration or connection to an unintended or untrusted API service, especially when operators copy-paste commands into production-like environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The documentation encourages state-changing actions such as resetting scenes, creating models, moving robots, starting conveyors, and exporting data without prominently warning that these commands can alter simulations or connected equipment state. In a control skill for industrial or robotics software, ambiguous natural-language examples can cause accidental disruptive actions, data loss, or unintended machine behavior if users invoke them without understanding the effects.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

The quickstart instructs users to control the software via natural-language examples exclusively in Chinese ('现在你可以通过自然语言控制软件了!' followed by Chinese-only phrases), which suggests a language constraint without opt-in or explanation. Under the policy, forcing a specific language without user choice can be a natural-language policy violation unless clearly justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README explicitly documents a scene-reset operation that can destroy current simulation state, but it provides no warning, confirmation guidance, or mention of data loss risk. In an agent skill context, natural-language invocation can cause an assistant or user to trigger destructive actions more easily, increasing the chance of accidental resets of active work.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill strongly encourages checkFromCloud:true, which may trigger automatic network downloads of models from a remote source without disclosing that external access occurs or what trust assumptions apply to the downloaded content. In an industrial simulation environment, silently fetching remote assets expands the attack surface and can introduce unreviewed third-party content into automated workflows.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This section documents destructive operations such as deleting local models and destroying scene objects without prominent warnings, confirmation requirements, or guidance on backup/recovery. In an agent skill, that omission is dangerous because an automated agent may invoke these endpoints directly and cause irreversible loss of local assets or scene state.

Content

No source excerpt is available for this finding.

Ae4

Medium
Category
analysis-evasion
Confidence
80% confidence
Finding

Suspicious Unicode normalization or mixed-script content

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The title and all instructional content are presented in Chinese, and the file does not indicate that language selection is optional or that the skill is region-specific. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The inline comment labels referenceAxis: 1 as the Y axis, but the documented enum mapping defines 1 as X_NEGATIVE. This kind of parameter mismatch is dangerous in motion-control documentation because it can directly induce incorrect movement along the wrong axis and create mechanical interference or unsafe robot behavior.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The documentation simultaneously promotes different methods for determining gripper motion axis, creating contradictory operational guidance. In a robotics/control skill, this can cause users or downstream agents to configure the wrong axis, leading to unintended motion, failed gripping, or collisions with nearby objects.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This is a markdown file, so missing user warnings apply to descriptions of behaviors that could affect user data or system state. The report states that /ResetScene clears all user-created models and only recommends avoiding frequent resets, but it does not present this as an explicit user warning about data loss or destructive impact.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The entire skill-facing document is written in Chinese and does not indicate that other languages are supported or that Chinese is an optional locale choice. Under the policy, forcing a specific language without user opt-in is a natural-language policy violation unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The document explicitly recommends using /ResetScene, notes that it clears all user-created models, but does not require confirmation, backup guidance, or any guardrail at the point of use. In a builder/scene-editing skill, this can lead to accidental destructive actions and loss of user work, especially if an agent follows the example automatically.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The comment at L0369-L0370 states '获取传送带运动距离', which is a read-only query. The actual code at L0371-L0372 calls '/ResetScene', a state-changing operation that can alter or clear the current scene, so the documentation actively misrepresents a destructive action as a benign read.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill exposes a destructive scene reset primitive that can be invoked programmatically with no confirmation, guardrail, or dry-run mechanism. In an agent/tooling context, a mistaken or manipulated call could wipe in-memory scene state, disrupt work, or cause loss of unsaved simulation changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This function provides direct deletion of models, including batch deletion, without any user-confirmation step, allowlist, or safety interlock. In an agent environment, malicious prompts or simple automation mistakes could irreversibly remove scene objects and corrupt project state or productivity.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Destroying components can permanently alter model behavior or collision/simulation settings, yet the API exposes this action without warning or verification. Because this tool is intended for remote control of industrial simulation software, silent destructive changes are more dangerous than in a read-only utility and can break automation logic or safety assumptions in the simulated workflow.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The file description states the skill purpose in Chinese, and the code consistently uses Chinese user-facing log messages. This imposes a specific language/locale on users without any opt-in or documented justification, which matches the language-policy violation criteria.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

Console output such as creation, waiting, rollback, and completion messages is hard-coded in Chinese, and no mechanism exists for user language selection. Because these messages are part of the natural-language interface, this creates a locale restriction without user opt-in.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access, suspicious.exposed_resource_identifier

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
kunwu-tool.js:11

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/model-loader.js:25

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
test-full.js:5

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
EXPORT-GUIDE.md:77

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
kunwu-tool.js:11

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-all-grippers-final.js:12

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-assemble-with-create.js:10

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-bracket-workaround.js:10

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-camera-bracket-assemble.js:24

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-check-all-tasks.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-check-grippers.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-create-gripper.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-final-assemble.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-final-report.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-gripper-download-debug.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-gripper-result.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-grippers-behavior.js:17

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-pick-sort-scene.js:10

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-proper-assemble.js:14

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
test-remote-camera.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
tests-deprecated/test-download-debug.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
tests-deprecated/test-download-direct.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
tests-deprecated/test-download-one-gripper.js:9

Plaintext HTTP endpoint targets a CGNAT/Tailscale-range address.

Critical
Code
suspicious.exposed_resource_identifier
Location
tests-deprecated/test-download-with-path.js:9