Back to skill

Security audit

Geoskill: Rooftop Solar Inventory

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent rooftop-solar analysis skill, with manageable cautions around public data downloads, generated files, dependency pinning, and synthetic/demo outputs.

Before installing, use a dedicated Python environment, pin or review dependencies, set explicit output and cache directories, and avoid sharing output-manifest.json if local paths are sensitive. For production feasibility work, provide real building inputs and verify dataset-manifest.json does not say synthetic before relying on the rankings.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (13)

Lp3

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding
The skill documentation describes code paths that write multiple output files such as CSV, GeoJSON, TIFF, logs, and manifests, but no permissions are declared. This creates a capability/permission mismatch that can lead to unexpected filesystem writes, unsafe execution in constrained environments, or operators granting broader trust than the manifest communicates.

Description-Behavior Mismatch

Medium
Confidence
92% confidence
Finding
The script can automatically fetch remote data from Microsoft Planetary Computer and NASA POWER when local inputs are absent, which changes it from a purely local analysis tool into a networked data-acquisition tool. This can surprise users, create unintended outbound network traffic, and introduce supply-chain or provenance risk because remote content is trusted and incorporated into results without explicit opt-in at execution time.

Description-Behavior Mismatch

Medium
Confidence
89% confidence
Finding
When building data is unavailable, the workflow can continue by generating synthetic buildings or by falling back after auto-download failure, producing plausible-looking outputs for nonexistent targets. In a decision-support skill, this is dangerous because users may act on fabricated site rankings, capacities, or economic estimates without realizing the analysis is no longer based on real assets.

Intent-Code Divergence

Low
Confidence
90% confidence
Finding
Persisting vars(args) into output-manifest.json captures all raw CLI parameters, which may include sensitive local file paths, AOI references, cache locations, or future secret-bearing flags. Because the manifest is an output artifact likely to be shared, this creates an avoidable information disclosure channel beyond what users may expect from a solar analysis tool.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The workflow may perform network retrieval and write multiple generated artifacts without a prominent runtime warning or explicit consent boundary. In security-sensitive or regulated environments, silent outbound connections and silent file creation can violate operator expectations, data-handling policies, and reproducibility controls.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
Storing raw CLI parameters without warning can expose operational details in a shareable report artifact, especially if users pass sensitive paths or future options containing secrets. The risk is elevated because the saved manifest is part of normal output generation, so disclosure may occur routinely rather than only during debugging.

Unpinned Dependencies

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

# Third-party dependencies used by this skill
geopandas
numpy
rasterio
scipy
Confidence
93% confidence
Finding
The dependency 'geopandas' is unpinned, so builds may resolve to different versions over time, including newly introduced vulnerable or breaking releases. In a geospatial data-processing skill that may ingest external data and optionally interface with databases, unpredictable dependency resolution increases supply-chain and reliability risk.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
geopandas
numpy
rasterio
scipy
shapely
Confidence
93% confidence
Finding
The dependency 'numpy' is unpinned, allowing package resolution to float across versions with different security and stability properties. This creates a supply-chain risk because future installs may silently pick up a vulnerable or incompatible release.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
geopandas
numpy
rasterio
scipy
shapely
Confidence
92% confidence
Finding
The dependency 'rasterio' is unpinned, which means the installed version can vary between deployments and over time. For a skill processing raster geospatial inputs, this can expose the environment to unreviewed changes or latent parser-related vulnerabilities introduced in later releases.

Unpinned Dependencies

Low
Category
Supply Chain
Content
geopandas
numpy
rasterio
scipy
shapely
Confidence
93% confidence
Finding
The dependency 'scipy' is unpinned, so dependency resolution may install versions with known flaws or regressions. This weakens reproducibility and increases exposure to supply-chain risk in analytical workloads.

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
rasterio
scipy
shapely
Confidence
92% confidence
Finding
The dependency 'shapely' is unpinned, allowing uncontrolled version drift across installations. In geospatial processing pipelines, this can introduce unvetted code changes or vulnerabilities affecting geometry parsing and processing.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Requirements for rooftop-solar-inventory
# Shared data-download library (Planetary Computer / NASA POWER / OSM)
geoskill-data-fetcher>=0.2.0

# Third-party dependencies used by this skill
geopandas
Confidence
95% confidence
Finding
The dependency 'geoskill-data-fetcher>=0.2.0' is only lower-bounded rather than pinned, so any newer release may be installed automatically. Because this appears to be a shared data-download library interacting with external services, uncontrolled upgrades increase both supply-chain risk and the chance of pulling in code that handles network data unsafely.

Known Vulnerable Dependency: geopandas — 2 advisory(ies): CVE-2025-69662 (geopandas SQL Injection Vulnerability in to_postgis() Allows Information Disclos); CVE-2025-69662 (SQL injection vulnerability in geopandas before v.1.1.2 allows an attacker to ob)

Critical
Category
Supply Chain
Confidence
83% confidence
Finding
A known vulnerable package name is present for 'geopandas', and because the requirement is unpinned, dependency resolution could install an affected version. The cited advisory involves SQL injection in 'to_postgis()', which is especially relevant in a data engineering or geospatial workflow if any user-influenced table/schema identifiers or database parameters are later passed into PostGIS export paths.

Static analysis

No suspicious patterns detected.