Back to skill

Security audit

Uuid Toolkit

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent local identifier utility, with some ordinary privacy and reliability caveats but no evidence of hidden, persistent, destructive, or exfiltrating behavior.

Install only if you are comfortable running a local Python CLI for identifiers. Avoid UUIDv1 for public or externally shared IDs unless you specifically need time-based UUIDs, and do not run bulk generation with very large --count or --size values in shared or resource-limited environments.

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 (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/uuid_toolkit.py:117
Finding

Unbounded generation parameters can cause CPU and memory exhaustion

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/uuid_toolkit.py:42
Finding

Non-canonical ULIDs can trigger an uncaught timestamp conversion exception

Content
View full analysis
> 80 ts = ts_ms / 1000.0 from datetime import datetime, timezone dt = datetime.fromtimestamp(ts, tz=timezone.utc) return { "type": "ULID", "value": ulid_str, "timestamp_ms": ts_ms, "timestamp": dt.isoformat(), "random_bits": 80, } ``` ### Technical Analysis A ULID contains 128 bits but is represented by 26 Base32 characters, which can encode 130 bits. Canonical ULIDs therefore require the first character to be between `0` and `7`; otherwise, the decoded value exceeds the valid 128-bit ULID range. The parser checks only the input length and whether each character exists in the decoding alphabet. It does not enforce the canonical leading-character constraint or explicitly limit the decoded value to 128 bits. After decoding, the function converts the extracted timestamp with `datetime.fromtimestamp()` without handling `ValueError`, `OverflowError`, or `OSError`. A non-canonical or out-of-range value can therefore terminate the `parse` or `validate` command with a traceback rather than being classified as invalid. ### Attack Path 1. An attacker supplies a 26-character string composed entirely of accepted Crockford Base32 characters. 2. The value uses an excessive leading character or otherwise produces a timestamp outside the runtime's supported datetime range. 3. The character and length validation succeeds. 4. `datetime.fromtimestamp()` raises ...[truncated 689 chars]
Remediation
View remediation
= (1 << 128): return None ts_ms = n >> 80 try: dt = datetime.fromtimestamp(ts_ms / 1000.0, tz=timezone.utc) except (ValueError, OverflowError, OSError): return None ``` 5. Ensure `parse` and `validate` report malformed values as invalid rather than exposing tracebacks. 6. Add tests for canonical maximum ULIDs, leading characters `8` through `Z`, invalid alphabet characters, and platform-specific datetime boundaries. ]]>
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 (1)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The tool explicitly supports generating UUIDv1 values, which embed timestamp and node information, and its parsing path further exposes that metadata by printing the creation time and node/MAC-derived value. In a general-purpose identifier toolkit, users may treat all UUIDs as privacy-neutral, so this can unintentionally leak host-identifying and timing information when IDs are shared, logged, or used externally.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.