Back to skill

Security audit

CAD Viewer

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real CAD viewer skill, but its local server can expose broad local files and execute implicit-CAD JavaScript without enough scoping or warning.

Install only if you are comfortable running a local CAD server with access to the selected project directory. Keep it bound to `127.0.0.1`, avoid non-loopback hosts, use only trusted model directories, and do not open or export untrusted `.implicit.js`/`.implicit.mjs` or same-stem Python generator files. Treat optional MoveIt2 setup as a real local environment mutation and review the Conda environment first.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (3)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/viewer/backend/server.mjs:26427
Finding

Unauthenticated Dynamic Root Selection Permits Access Outside the Intended Viewer Directory

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/viewer/backend/server.mjs:25991
Finding

Unauthenticated Implicit-CAD Export Dynamically Imports and Executes Local JavaScript

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/viewer/moveit2_server/environment.yml:1
Finding

Optional MoveIt2 Setup Uses Unpinned Conda Dependencies from Mutable Channels

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • 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
Findings (134)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description describes a high-level skill for launching or reusing a CAD viewer and producing review links for supported file formats. The supplied code does something materially different: it is a bundled utility library for manipulating Three.js buffer geometries. Its functions compute tangents, merge geometries and attributes, clone/deinterleave attributes, estimate memory, merge vertices, convert draw modes, compute morphed attributes, merge groups, and generate creased normals. These are supporting 3D rendering/math utilities, not viewer lifecycle management or link-returning behavior. There is no evidence of opening a viewer, reusing sessions, handling the listed file extensions, or producing review URLs. Therefore the code chunk does not accurately represent the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared purpose describes a higher-level skill for launching/reusing a CAD viewer and producing review links for many file types such as STEP, STL, DXF, URDF, SDF, and G-code. The supplied code does not implement session management, viewer orchestration, or link generation. Instead, it is a specific asset loader library for glTF/GLB in Three.js. While glTF/GLB is one of the declared file types, this chunk is only a low-level supporting parser/loader for that format and not the described skill behavior. Therefore the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The declared description is about a high-level skill that launches or reuses a CAD Viewer and returns review links for many supported file formats. The supplied code chunk does something materially different: it contains JavaScript and embedded GLSL for implicit CAD processing and rendering. Specifically, it parses GLSL functions, builds implicit CAD models, estimates bounds by sampling signed distance fields, manages uniforms/parameters, computes framing/camera bounds, and generates fragment shader code for raymarching with lighting, shadows, AO, and floor/background rendering. While this may be a supporting part of a CAD viewer implementation, the chunk itself neither launches/reuses the viewer nor returns links, and it appears focused narrowly on implicit CAD rendering rather than the broader declared multi-format review-link behavior. Therefore the description does not accurately represent this code chunk's actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description presents a narrow orchestration skill: launching/reusing a CAD Viewer and returning review links for supported files. The supplied code instead implements substantial viewer frontend behavior itself. It contains rendering pipelines, shader materials, camera/perspective serialization, screenshot export, DXF geometry processing, UI controls, metadata panels, and artifact/source file handling. Those are materially broader and different capabilities than merely returning viewer links. While the supported file types overlap with the description, the primary purpose and capabilities in the code are much richer and not accurately represented by the declaration.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding

The declared description emphasizes a narrow skill behavior: launching or reusing a CAD Viewer and returning review links for supported file types. The supplied code instead appears to be bundled client-side UI logic for the viewer itself. It implements rich interactive behavior inside the viewer: tree navigation, selecting/hiding/isolating model parts, parameter sliders, STEP module animations, URDF/SDF metadata panels, MoveIt2 target/solver/planning actions, drawing tools, screenshot copying, breadcrumb/file navigation, theme controls, and GitHub release checks. Those are materially broader and different capabilities than simply starting/reusing a viewer and returning links. While such UI code could belong to the overall viewer product, this chunk does not match the declared primary purpose of the skill as stated.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description suggests a narrow skill: launch or reuse a CAD Viewer and return review links for supported files. The supplied code does not primarily implement link-returning behavior. Instead, it is a substantial client-side application bundle for the viewer itself, with many interactive capabilities far beyond merely starting/reusing a viewer. It persists UI and file session state in localStorage/sessionStorage, manages themes, supports annotations and clipboard operations, handles assembly/topology selection logic, and communicates over WebSocket with a MoveIt2 server for robot pose solving and trajectory planning. These are material capabilities not reflected in the description. While the supported file types overlap with the declaration, the actual code's primary purpose and resource access patterns are significantly broader, so this is a clear description/behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about launching or reusing a CAD Viewer and producing review links for supported file types. The supplied code chunk does something materially different: it defines helpers to parse SRDF XML, validate structure and references against provided URDF data, compute group joints/links, validate end effectors and collision exclusions, and produce structured SRDF/motion objects. There is no code to start or reuse a viewer, no generation of review URLs for files, and no handling of CAD/G-code visualization flows. Although SRDF is one of the mentioned file types in the description, this chunk is an internal parser/validator for SRDF content rather than viewer orchestration, so the behavior does not accurately match the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description is about orchestrating a CAD Viewer session and returning review links for many file types. This code chunk does something materially different: it is a low-level STL mesh worker that downloads an STL, parses geometry, computes normals/bounds/indices, and returns mesh buffers to the caller. While this could be a supporting component of a viewer, the chunk itself neither starts/reuses a viewer nor returns review links, and it only implements STL handling. The direct network fetch is also an operational capability not mentioned in the description. Therefore this code chunk does not accurately match the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is for a high-level skill that launches or reuses a CAD viewer and produces links for reviewing supported engineering file formats. The supplied code chunk is instead a generic Three.js module bundle: constants, vectors, matrices, quaternions, colors, textures, materials, geometries, meshes, raycasting, and related rendering helpers. These are plausible supporting internals for a web-based viewer, but the chunk itself does not implement the declared primary behavior. There is no code for process/session management, viewer startup/reuse, URL/link generation, routing, file extension dispatch, or explicit support for STEP/STP/URDF/SDF/G-code/etc. Because the actual chunk's observable purpose is generic rendering infrastructure rather than the described skill behavior, this is a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The supplied code is a vendor icons JavaScript module. It imports React, defines utility functions for class-name formatting and icon naming, creates a generic SVG icon component, then declares many icon definitions (e.g., arrow, bot, check, eye, folder, play, trash) and exports them. There is no logic for launching or reusing a CAD viewer, no file-type detection, no URL/link generation, no interaction with CAD/STP/STL/G-code/URDF/SDF inputs, and no backend/service orchestration. This is materially different from the declared purpose, so it is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared purpose describes an application-level skill that launches or reuses a CAD viewer and provides review links for supported engineering file formats. The supplied code does not implement that behavior. Instead, it is minified/bundled vendor JavaScript for React DOM and positioning middleware (similar to Floating UI), handling generic UI rendering, reconciliation, hydration, DOM manipulation, and layout/tooltip positioning. While such code could be a supporting dependency of a viewer application, this chunk itself does not perform the described skill actions or expose the declared functionality. Therefore, the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The supplied chunk is clearly a minified/bundled Three.js vendor file containing generic graphics engine primitives: vectors, matrices, quaternions, colors, textures, materials, geometries, meshes, raycasting, render targets, and shader source. Those are plausible supporting components for a CAD viewer, but this specific code does not implement the declared skill behavior of launching/reusing a viewer session or producing review links for supported file types. No file-type routing, viewer lifecycle management, URL generation, or handoff logic appears in the chunk. Because the declared purpose is at the skill level and this code chunk only exposes generic rendering internals, the description does not accurately represent what this chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description says the skill should launch or reuse a CAD viewer and produce review links for explicit CAD, implicit CAD, robot-description, and G-code files. The supplied code instead is a minified/bundled vendor UI module composed of Radix-style React primitives for common interface elements and accessibility helpers. It manages refs, slots, dialogs, menus, popovers, selects, sliders, tabs, switches, toast notifications, focus scopes, portals, dismissable layers, and scroll locking. There is no evidence of CAD-specific logic, file extension handling, viewer process/session management, or link generation. This is a clear description-behavior mismatch; the code appears to be supporting UI infrastructure rather than the declared skill behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description claims user-facing viewer behavior: launching or reusing a CAD viewer and returning links for reviewing supported file types. The supplied code chunk does none of that. It only performs package initialization by appending a subdirectory to __path__, which is an internal module-loading/setup detail. This is materially different from the declared primary purpose, so it should be flagged as a mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about starting or reusing a CAD viewer and producing review links for various geometry and robot-description files. The supplied code does not interact with a viewer, does not inspect file types, and does not generate links. Instead, it prepares a Conda/ROS environment and runs python -m moveit2_server.server --check, which is a MoveIt2 server check operation. This is a materially different primary purpose and capability set from the declared CAD viewer behavior, so it is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description is about launching or reusing a CAD Viewer and returning review links for supported file formats. The supplied code does not handle CAD files, viewer processes, review links, or any of the listed file types. Instead, it provides infrastructure helpers for a MoveIt2 server: finding a conda installation and locating a repository root. These are materially different capabilities and indicate a different primary purpose from the declared behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The declared description centers on launching/reusing a CAD Viewer and producing review links for many geometry and robot-description formats. The actual code chunk provides only a package initializer docstring for a MoveIt2 websocket server focused on SRDF workflows. Even though the chunk is minimal, its stated purpose is materially different from CAD viewer management, and there is no evidence of the declared behaviors such as viewer startup, file handling, or review-link generation.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about a CAD viewer skill for visually reviewing many file types and returning review links. This code does not start a viewer, manage viewer sessions, or produce URLs/links. Instead, it is a MoveIt2 server context builder focused on SRDF/URDF robot models: it validates repository-bounded paths, reads SRDF sources, parses URDF XML, validates robot planning metadata, and assembles command settings for supported request types including IK/planning parameters. The actual behavior is materially different in primary purpose and supported inputs, so this is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about launching or reusing a CAD viewer to visually review files and returning review links. The code does not start a viewer, open files, or generate links. Instead, it dispatches SRDF-related motion requests to a MoveItPyAdapter for pose solving and motion planning. This is a materially different primary purpose and introduces undeclared motion-planning capabilities unrelated to CAD viewing.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about launching or reusing a CAD viewer and returning review links for various file types used in visual review workflows. The actual code does something entirely different: it is a ROS 2 utility that seeds robot joint states by publishing sensor_msgs/JointState messages to the /joint_states topic over time. It does not open or reuse any viewer, does not inspect CAD/G-code/URDF/SRDF/SDF files, and does not generate links. This is a clear material mismatch in primary purpose and capabilities.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about starting or reusing a CAD viewer and returning review links for visual inspection of various file types. The supplied code does not start a viewer, generate URLs/links, or handle visual review workflows. Instead, it is a robotics motion-planning component centered on MoveIt 2: it parses robot descriptions, configures kinematics/planning pipelines, initializes MoveItPy, computes IK solutions, and serializes planned joint trajectories. This is a materially different primary purpose and includes substantial undeclared capabilities related to ROS 2 robotics planning.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about a viewer utility for opening CAD/robot-description/G-code files and returning review links. The supplied code does not start a viewer, inspect files, generate links, or handle the listed file formats. Its primary purpose is request/response protocol validation for a MoveIt2 server, specifically SRDF motion requests. The code’s behavior is materially different from the declared purpose, so this is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about launching or reusing a CAD Viewer and returning review links for visual review of various geometry and robot-description files. The supplied code does not appear to manage a viewer or generate review links. Instead, it runs a websocket server named moveit2_server, parses inbound JSON messages, constructs a MoveIt2-specific context, dispatches requests, and returns JSON responses. It also includes a --check mode for validating ROS 2/MoveIt-related imports. This is a materially different primary purpose and introduces undeclared capabilities and dependencies centered on MoveIt2 server operation rather than CAD file viewing.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description says this skill should start or reuse a CAD Viewer and return review links for supported file types for visual review. The supplied code does not interact with any viewer, session manager, link generation, or rendering pipeline. Instead, it is a parser/validator for SRDF files: it reads an .srdf file from disk, parses XML, validates required fields, detects duplicates, classifies disabled collision reasons, and returns structured SRDF metadata. While SRDF is mentioned in the declared supported file types, the actual code’s primary purpose is materially different from viewer orchestration, so this is a clear description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is about starting or reusing a CAD Viewer for visual review of CAD- and robot-description-related files and returning review links. The supplied code does not mention a viewer, file visualization, or link generation. Instead, it launches a Python server module called moveit2_server.server in a Conda environment, with ROS 2/MoveIt2-related configuration and explicit host/port network binding. That is a materially different primary purpose and exposes undeclared server/network behavior, so this is a clear mismatch.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.dynamic_code_execution

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/viewer/backend/server.mjs:22971

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/viewer/packages/cadjs/scripts/run-tests.mjs:30

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/viewer/packages/implicitjs/scripts/run-tests.mjs:33

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/viewer/packages/cadpy/src/cadpy/assembly_spec.py:243

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/viewer/packages/cadpy/src/cadpy/generation.py:738