Back to skill

Security audit

image-to-3d-part-stl

Security checks for vulnerabilities and agentic risk

Overview

The skill is a disclosed image-to-STL workflow/template, not malware, but it is incomplete as a turnkey converter and should be used carefully.

Before installing, understand that this is a workflow and code template for an agent to adapt, not a finished automatic image-to-STL converter. Run dependency installation in an isolated virtual environment, pin reviewed package versions where possible, and copy generate.py into the project workspace before editing so task-specific geometry does not persist in the installed skill.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
requirements.txt:1
Finding

Unpinned Third-Party Dependencies Create Supply-Chain Risk

Content
View full analysis

Vulnerability Details

File Location: requirements.txt, lines 1-4
Vulnerability Type: Unpinned and unhashed third-party dependencies
Risk Level: Medium

Complete Vulnerable Code Snippet:

text
numpy
trimesh
shapely
mapbox_earcut

The affected dependencies are installed by the workflow in SKILL.md, lines 39-43:

powershell
python -m venv venv
./venv/Scripts/pip install -r <path_to_skill>/requirements.txt
./venv/Scripts/python <path_to_skill>/src/generate.py --output part.stl --thickness 2.0

Technical Analysis

The dependency declarations contain neither exact version constraints nor cryptographic hashes. Consequently, each installation may resolve to different package releases from the configured Python package index. The actual code installed and executed is therefore not fixed to the versions reviewed during this audit.

Python package installation can execute build backends and package installation logic. If a dependency release, transitive dependency, maintainer account, package index, or distribution artifact is compromised, following the documented workflow could execute attacker-controlled code. Unintentional breaking or incompatible releases may also affect model integrity and availability.

This finding is limited to supply-chain exposure. The reviewed project does not itself retrieve a separate remote payload or contain confirmed malicious package names.

Attack Path

  1. An attacker compromises a listed package, one of its transitive dependencies, its maintainer account, or the package distribution channel.
  2. The attacker publishes a malicious release that still satisfies the unconstrained dependency declaration.
  3. An Agent follows SKILL.md and runs pip install -r requirements.txt.
  4. Pip resolves and downloads the malicious release.
  5. Malicious build or runtime code executes with the privileges and environmental access of the Agent process ...[truncated 684 chars]
Remediation
View remediation

Remediation Suggestions

  1. Pin every direct dependency to an exact, reviewed version using ==.
  2. Generate a lock file that also fixes all transitive dependencies.
  3. Require cryptographic hashes for every distribution, for example by using a hash-locked requirements file with pip install --require-hashes.
  4. Download packages only from an explicitly approved package index or internal artifact repository.
  5. Review dependency provenance, release history, and known vulnerabilities before updating pins.
  6. Use an automated dependency-update process that tests proposed upgrades before merging them.
  7. Install dependencies in an isolated environment with minimal filesystem, credential, and network access.
  8. Prefer pre-reviewed binary wheels where appropriate and prevent unexpected source builds when the deployment policy permits.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The description promises a functional image-to-3D conversion tool that consumes user-provided images and metric constraints to produce STL files. The supplied code does not do that. It contains placeholder comments, initializes empty contour/hole lists, and prints an implementation reminder. While the imports and commented example suggest an intended future capability to extrude a polygon and export STL, the current code neither reads images nor computes geometry from them. This is a material mismatch in primary purpose and implemented capability, not merely an incomplete supporting detail.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `SKILL.md`: Skill description and workflow documentation.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill advertises image-to-3D STL generation, but the implementation is only a stub and never processes images or produces an STL. This is dangerous because downstream agents or users may rely on a capability that does not exist, leading to unsafe automation decisions, incorrect engineering workflows, or silent task failure in contexts where model generation accuracy matters.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The docstring instructs that geometry should be rewritten based on image dimension analysis results, but no such logic exists. This mismatch can mislead maintainers or orchestration systems into believing image-derived geometry is being handled, increasing the chance of incorrect assumptions, unsafe generated parts, or improper use in manufacturing-related workflows.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The dependency list uses unpinned package names, so builds may resolve to different versions over time. This weakens reproducibility and can unintentionally introduce vulnerable or incompatible releases through normal installs or supply-chain compromise.

Content

Scanner excerpt · requirements.txt (reported line 1)May include surrounding context.

text
numpy
trimesh
shapely
mapbox_earcut

Unverifiable Dependency: numpy has 16 known advisory(ies) (CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +13 more), but the manifest does not pin a version, so it is unknown whether the installed release is affected

Low
Category
Supply Chain
Confidence
90% confidence
Finding

numpy has known advisories, and because no version is pinned, there is no way to verify whether deployment will select an affected release. In this image-to-3D processing skill, external files may be parsed and transformed, so dependency-level memory safety or file-handling flaws could become reachable if a vulnerable version is installed.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The trimesh dependency is not version-pinned, allowing unpredictable package resolution across environments. That increases supply-chain risk and may pull in a release with known vulnerabilities or breaking behavior.

Content

Scanner excerpt · requirements.txt (reported line 2)May include surrounding context.

text
numpy
trimesh
shapely
mapbox_earcut

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
96% confidence
Finding

The shapely dependency is unpinned, which means installations are not reproducible and may consume a vulnerable release. In package ecosystems, this expands exposure to dependency confusion, malicious upstream changes, or accidental insecure upgrades.

Content

Scanner excerpt · requirements.txt (reported line 3)May include surrounding context.

text
numpy
trimesh
shapely
mapbox_earcut

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The mapbox_earcut package is also unpinned, creating the same non-deterministic installation risk as the other entries. Even when a package is legitimate, leaving versions open can silently introduce insecure releases or regressions.

Content

Scanner excerpt · requirements.txt (reported line 4)May include surrounding context.

text
numpy
trimesh
shapely
mapbox_earcut

Static analysis

No suspicious patterns detected.