Back to skill

Security audit

Map Grabber

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims: it fetches OpenStreetMap data for a user-provided place and exports map files, with some ordinary privacy and dependency hygiene cautions.

Install this only if you are comfortable sending requested addresses or place names to external OpenStreetMap/geocoding-related services and creating local map output files. Use a virtual environment and consider pinning dependency versions before installation for better reproducibility.

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 and Unverified Third-Party Dependencies

Content
View full analysis

Vulnerability Details

File Location: requirements.txt:1-2
Vulnerability Type: Unpinned third-party dependencies and missing package integrity verification
Risk Level: Medium

Complete Code Snippet:

text
osmnx
ezdxf

The installation instruction appears at SKILL.md:18:

text
pip install -r requirements.txt

Technical Analysis

The dependency declarations do not specify reviewed versions or cryptographic hashes. Consequently, pip install -r requirements.txt resolves the packages—and their transitive dependencies—from the active Python package index at installation time.

This makes the installed code mutable relative to the audited project. A future compromised or malicious release, compromised transitive dependency, unsafe package-index configuration, or unexpected incompatible update could be installed without changes to this repository. Python packages can execute build-system or installation-related code during installation, and imported dependencies execute with the privileges of the user running the Skill.

The audit did not establish that the currently named packages are malicious. The finding concerns the absence of controls that make dependency resolution reproducible and integrity-verifiable.

Attack Path

  1. An attacker compromises a future release of a declared dependency or one of its transitive dependencies, or influences the package index used by the installer.
  2. A user follows the documented setup instruction:
    bash
    pip install -r requirements.txt
    
  3. pip resolves the mutable, unpinned dependency set from the configured index.
  4. The compromised package is downloaded and installed without hash validation.
  5. Malicious installation or runtime code executes under the installing or invoking user's account when installation occurs or when grab_map.py imports and uses the affected package.

Impact Assessment

Successful exploitation could execute arbitrary code with the privileges o ...[truncated 463 chars]

Remediation
View remediation

Remediation Suggestions

  1. Pin each direct dependency to a reviewed, exact version:
    text
    osmnx==<reviewed-version>
    ezdxf==<reviewed-version>
    
  2. Generate and commit a lock file containing reviewed transitive dependency versions.
  3. Record cryptographic hashes and install with hash enforcement, for example:
    bash
    python -m pip install --require-hashes -r requirements.txt
    
  4. Generate hashes only after obtaining packages from a trusted index and reviewing the resolved dependency set.
  5. Use a dedicated virtual environment and run installation and map generation as a least-privileged user.
  6. Add automated dependency vulnerability and provenance scanning to the release process.
  7. Periodically update pinned versions through a controlled review process rather than allowing implicit upgrades at installation time.
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
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (7)

Scope Creep

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The script geocodes user-supplied addresses and downloads OSM data via network calls, but the declared permissions only mention shell execution. This creates a capability mismatch where sensitive location input is transmitted externally without corresponding manifest disclosure or approval, undermining least-privilege and informed consent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill instructs the agent to execute a script directly, perform network retrievals, write files, and send generated media without confirmation or an explicit warning to the user. In an agent setting, this weakens informed consent and can cause unintended outbound requests, local file creation, and automatic actions based on ambiguous or adversarial prompts.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

User-provided addresses are sent to third-party geocoding/OSM services without clear user-facing disclosure. Because addresses can be highly sensitive location data, silent transmission can expose private information and create compliance and trust issues even if the network use is functionally necessary for the skill.

Content

No source excerpt is available for this finding.

Lp4

Low
Category
MCP Least Privilege
Confidence
65% confidence
Finding

Declared permissions with no matching code capability may indicate removed functionality or pre-staging for future abuse.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency osmnx is unpinned, so installs may resolve to different versions over time, including versions with breaking changes or newly introduced vulnerabilities. In a skill with shell:exec permission, a compromised or malicious upstream package version could have an amplified impact during installation or runtime.

Content

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

text
osmnx
ezdxf

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
95% confidence
Finding

The dependency ezdxf is also unpinned, which makes builds non-reproducible and exposes the skill to supply-chain risk if a future release is malicious or vulnerable. Because this skill can execute shell commands, dependency compromise is more operationally dangerous than in a purely sandboxed, no-exec context.

Content

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

text
osmnx
ezdxf

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest describes exporting fetched map data to SVG, GeoPackage, or DXF for CAD/Rhino. The implementation also offers PNG export via the --png option and writes PNG files, which is additional behavior beyond the stated export formats.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.