Back to skill

Security audit

Geoskill: Infrastructure Site Selection

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to perform disclosed geospatial site-suitability analysis, with optional online data download and local output/cache files.

Before installing, consider whether outbound geospatial data requests and local caching are acceptable for your environment. If you use this in production or a controlled setting, pin the dependencies and set an explicit cache/output directory.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (6)

Vague Triggers

Medium
Confidence
85% confidence
Finding
The skill description uses broad trigger language such as 'Use when the user wants to analyze changes, compare multi-temporal rasters, compute indices, or generate assessment reports,' which expands invocation beyond clearly bounded infrastructure site-selection tasks. In an agent setting, vague routing criteria can cause the skill to be selected for unrelated geospatial requests, increasing the chance of unexpected execution paths, unintended network use, or misuse of local/remote data handling behaviors.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The documentation states that the skill can automatically download data from Microsoft Planetary Computer and cache it locally, but it does not present a clear user-facing warning or consent requirement before network access and disk writes occur. In an agent environment, silent remote access and persistent caching can violate user expectations, leak contextual information through outbound requests, and create privacy or compliance issues on restricted systems.

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 `numpy` is unpinned, so installs may resolve to different versions over time, reducing build reproducibility and increasing supply-chain risk. In a security-sensitive or production environment, this can unexpectedly introduce vulnerable or incompatible releases.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
numpy
rasterio
shapely
Confidence
95% confidence
Finding
The dependency `rasterio` is unpinned, allowing future installs to pull arbitrary newer releases. This creates reproducibility and supply-chain exposure because security posture can change without review.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
numpy
rasterio
shapely
Confidence
95% confidence
Finding
The dependency `shapely` is unpinned, which means dependency resolution can drift over time and introduce unreviewed code changes. While not an exploit by itself, it increases the chance of pulling a compromised or vulnerable release.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Requirements for infrastructure-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
`geoskill-data-fetcher>=0.2.0` uses a lower-bound specifier rather than an exact pin, so any later version may be installed. Because this is a less common third-party package and appears central to data acquisition, the supply-chain risk is somewhat higher than for widely scrutinized libraries.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/infrastructure_site_selection.py:369