Back to skill

Security audit

Aholo 3DGS reconstruction and generation

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a legitimate Aholo 3D reconstruction helper, but installing it means letting the agent upload chosen media and use your Aholo API key to create or inspect 3D tasks.

Install this only if you trust Aholo with the media you choose and with task metadata associated with your API key. Create actions may consume credits, and the list action can show accessible Aholo world-task metadata. Do not set AHOLO_INSECURE_SKIP_VERIFY unless you knowingly accept TLS interception risk; prefer a trusted CA bundle. For stronger supply-chain hygiene, pin and audit the Python dependencies before production use.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (15)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

The top-level description says the skill is for upload, create, and poll/status, but the body also authorizes listing tasks via /global/world/v1/list. That hidden enumeration capability expands behavior beyond the declared purpose and could expose metadata about prior jobs or other accessible world tasks without the user clearly understanding that the skill can browse them.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill instructs the agent to use environment variables, local file paths, and network access, but it does not declare any corresponding tool scope or permissions metadata. This weakens reviewability and enforcement because an execution environment may grant broader capabilities than users or policy expect, increasing the risk of unintended file access, secret use, or outbound requests.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
88% confidence
Finding

The skill documents an environment flag that disables TLS certificate verification, which can expose API keys, uploaded media, and task metadata to man-in-the-middle attacks if used on untrusted networks. Although the text warns against casual use and prefers CA bundles, normalizing an insecure bypass inside the skill still increases the chance that operators will trade security for convenience.

Content

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

md
### TLS (script default behavior)

- Script **enables** SSL verification by default (secure by default).
- Corporate/self-signed certs: set `AHOLO_INSECURE_SKIP_VERIFY=1` (or `true` / `yes` / `on`) to explicitly disable verification; prefer `REQUESTS_CA_BUNDLE` to point at your enterprise CA.
- On `CERTIFICATE_VERIFY_FAILED`, configure CA certs first; use `AHOLO_INSECURE_SKIP_VERIFY` only when you accept the risk.

### Responses & errors

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
| 11 | **Multiple videos:** ask before create (**do not** choose for user): **A** one 3DGS (one create, all in `videoPaths`); **B** one 3DGS per video (see #9). Only 1 video → skip question |
| 9 | **Create POST (high cost)** — **Default:** one user **single** 3D intent → at most **one** create per conversation round; no retry on same intent after fail/timeout/missing `worldId` unless user **explicitly re-orders**. **Pre-upload failure** (POST not sent) → one first create after fix. **Charged but no worldId** → task list / status/list, not another create. **Multi-video B:** user chose separate 3DGS → create **per video** (`videoPaths` one each), warn N tasks/charges upfront; **no** duplicate create for same video; failed video → no retry, continue with remaining. Use `forbidCreate` only to block accidental **duplicate for the same completed task**, not the next video in B |
| 10 | `projectName` only if user explicitly asks; never invent from folder name or timestamp |
| 5–6 | After each `worldId` → **ask** wait or not; if wait → **sync** `poll` (`intervalSeconds=60`, `timeoutSeconds=14400`); if not → link only. **No** background poll + "I'll notify you"; **no** poll without asking |

### `taskQuality` display names (API values unchanged)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill defines a world listing endpoint in addition to the manifest-described upload/create/status workflow. That expands capability from single-task handling to account-wide enumeration, which can expose unrelated project metadata and violates least privilege for the stated purpose.

Content

No source excerpt is available for this finding.

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
88% confidence
Finding

The client can disable TLS certificate verification via the AHOLO_INSECURE_SKIP_VERIFY environment variable, which enables man-in-the-middle interception or tampering of API requests, upload tokens, and uploaded media. Even though this is opt-in, it creates an insecure execution mode for a skill that handles credentials and potentially sensitive user files.

Content

Scanner excerpt · aholo_reconstruct.py (reported line 175)May include surrounding context.

python
insecure_skip = str(os.environ.get("AHOLO_INSECURE_SKIP_VERIFY", "")).strip().lower()
        if insecure_skip in {"1", "true", "yes", "on"}:
            # Explicit opt-out only (e.g. corporate self-signed certs).
            self.verify_ssl = False
            urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
        else:
            self.verify_ssl = True

Cloud Storage Exfiltration

Medium
Category
Data Exfiltration
Confidence
55% confidence
Finding

Data is uploaded to cloud storage (S3 / GCS / Azure Blob). This may be a legitimate backup or exfiltration to an external bucket. Manual review is recommended.

Content

Scanner excerpt · aholo_reconstruct.py (reported line 443)May include surrounding context.

python
results.append({"success": True, "url": item, "originalPath": item, "isUrl": True})
            else:
                print(f"Uploading {input_label}: {item}")
                up = self.upload_file(item)
                if up.get("success"):
                    print(f"{input_label} upload succeeded: {item}")
                else:

Cloud Storage Exfiltration

Medium
Category
Data Exfiltration
Confidence
55% confidence
Finding

Data is uploaded to cloud storage (S3 / GCS / Azure Blob). This may be a legitimate backup or exfiltration to an external bucket. Manual review is recommended.

Content

Scanner excerpt · aholo_reconstruct.py (reported line 800)May include surrounding context.

python
results.append({"success": True, "url": item, "originalPath": item, "isUrl": True})
            else:
                print(f"Uploading {input_label}: {item}")
                up = self.upload_file(item)
                if up.get("success"):
                    print(f"{input_label} upload succeeded: {item}")
                else:

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The list_worlds method enables enumeration of all worlds available to the API key, which is not necessary for a single-intent reconstruction/generation skill. In context, this broadens the data-access surface from operating on a user-specified worldId to discovering unrelated tasks and their metadata.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The CLI advertises a list action even though the skill description only promises upload, create, and poll/status. Hidden or undocumented account-wide operations are dangerous because they enable broader data access than users and reviewers expect.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Main dispatch includes a top-level list operation that permits account-wide querying outside the core create/status flow. This increases abuse potential because any caller who can run the skill with the API key can enumerate projects without first knowing a worldId.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency specifier requests>=2.28.0 is unpinned, so builds may resolve to different versions over time and can silently pick up vulnerable or breaking releases. For a skill that performs network/API operations, this weakens supply-chain integrity and makes security posture non-reproducible.

Content

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

text
requests>=2.28.0
urllib3>=2.0.0

Unverifiable Dependency: requests has 16 known advisory(ies) (CVE-2014-1830 (Exposure of Sensitive Information to an Unauthorized Actor in Requests); CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi) +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
82% confidence
Finding

requests has known security advisories, and because the manifest does not pin a specific version, it is impossible to verify whether deployed environments are using a safe release. In a skill that interacts with remote APIs, an affected HTTP client could enable credential leakage, TLS/request handling flaws, or other network-layer weaknesses depending on the resolved version.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency specifier urllib3>=2.0.0 is unpinned, which allows environment-dependent resolution and undermines reproducible, auditable installs. Because urllib3 is a core HTTP transport library, unexpected version selection can expose the skill to newly introduced vulnerabilities or incompatible TLS/network behavior.

Content

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

text
requests>=2.28.0
urllib3>=2.0.0

Unverifiable Dependency: urllib3 has 16 known advisory(ies) (CVE-2025-66471 (urllib3 streaming API improperly handles highly compressed data); CVE-2024-37891 (urllib3's Proxy-Authorization request header isn't stripped during cross-origin ); CVE-2026-21441 (Decompression-bomb safeguards bypassed when following HTTP redirects (streaming ) +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
82% confidence
Finding

urllib3 has multiple known advisories, but the unpinned requirement prevents determining whether installations are affected. Given this skill's reliance on outbound HTTP communication, a vulnerable transport library could increase exposure to redirect, proxy header, decompression, or other protocol-handling issues if a bad version is resolved.

Content

No source excerpt is available for this finding.