Back to skill

Security audit

Geoskill: Renewable Energy Site Selection

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed renewable-energy GIS analysis tool with network data download and file-output behavior that users should understand before running.

Install only if you are comfortable with a GIS skill that writes analysis outputs and may contact NASA POWER and Planetary Computer when bbox/AOI and date-range inputs are used. Prefer running it in a project-specific directory, set an explicit output/cache directory, and review or pin dependencies for reproducible installs.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

eval() call detected

High
Category
Dangerous Code Execution
Content
Returns exit code (0 = ok, 2 = arg error)."""
    # File existence
    for flag, accessor in FILE_ARGS.items():
        path = eval(accessor)
        if path is None or path == "":
            continue
        if not Path(str(path)).exists():
Confidence
98% confidence
Finding
The use of eval() to resolve argument access is unnecessary and dangerous because it executes Python expressions at runtime. Today the accessor strings come from a constant dictionary, but this pattern creates a latent code-execution sink that becomes exploitable if the mapping is ever influenced by untrusted input or modified during maintenance; in a CLI/data-processing skill that may be run in automated environments, arbitrary code execution would have severe consequences.

Lp3

Medium
Category
MCP Least Privilege
Confidence
74% confidence
Finding
The skill advertises output generation and file-writing behavior but declares no permissions, creating a transparency and policy-enforcement gap. In agent environments, undeclared write capability can lead to unexpected filesystem modifications, overwriting files, or writing artifacts into sensitive locations if downstream code is not constrained.

Tp4

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding
The documented purpose describes a local GIS suitability analysis tool, but the behavior expands to remote data retrieval, DEM searching/downloading, synthetic data generation, and additional reporting outputs. This mismatch is dangerous because users and orchestrators may authorize the skill under a narrower trust model while it performs networked and broader side-effecting actions that increase attack surface, data exposure, and operational risk.

Description-Behavior Mismatch

Medium
Confidence
83% confidence
Finding
The skill explicitly advertises automatic downloading of external data from NASA POWER when only a bounding box and date range are supplied. Automatic network retrieval introduces supply-chain, privacy, and reproducibility risks, especially if users do not expect external requests or if the fetched content is later trusted for processing without strong validation.

Intent-Code Divergence

Medium
Confidence
80% confidence
Finding
The later documentation section introduces alternate inputs and an automatic download workflow that contradict the earlier CLI contract based on local raster inputs. Contract inconsistencies are dangerous because they defeat policy review and user expectations, making it easier for hidden network or file-processing behavior to slip through approval and increasing the chance of insecure invocation paths.

Unpinned Dependencies

Low
Category
Supply Chain
Content
geoskill-data-fetcher>=0.2.0

# Third-party dependencies used by this skill
numpy
rasterio
shapely
Confidence
95% confidence
Finding
The dependency is unpinned, so installs may resolve to different versions over time, reducing build reproducibility and increasing supply-chain risk if a bad or incompatible release is published. In a geospatial analysis skill, this can affect integrity and stability, though by itself it is not evidence of active compromise.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
numpy
rasterio
shapely
Confidence
95% confidence
Finding
The rasterio dependency is unpinned, which allows future installations to pull newer versions without review. That creates reproducibility and supply-chain exposure, especially for packages with native/GDAL-linked components that can introduce breaking changes or security issues.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
numpy
rasterio
shapely
Confidence
95% confidence
Finding
Shapely is declared without a fixed version, so dependency resolution is non-deterministic and could silently introduce vulnerable or incompatible releases. In this site-selection skill, that most directly threatens reliability and supply-chain hygiene rather than causing immediate direct exploitation.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Requirements for renewable-energy-site-selection
# Shared data-download library (Planetary Computer / NASA POWER / OSM)
geoskill-data-fetcher>=0.2.0

# Third-party dependencies used by this skill
numpy
Confidence
98% confidence
Finding
The custom/shared package geoskill-data-fetcher is only lower-bounded (>=0.2.0), so any later release may be installed automatically. Because it appears to handle external data downloads, an unexpected update in this package could materially affect network-facing behavior and increases supply-chain risk beyond a typical utility library.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/renewable_energy_site_selection.py:94