Back to skill

Security audit

Geoskill: Powerline Vegetation Risk

Security checks for vulnerabilities and agentic risk

Overview

The skill performs a plausible powerline vegetation analysis, but it can send sensitive location inputs to remote geospatial services and persist raw run parameters without clear upfront disclosure.

Install only if you are comfortable with the skill making outbound geospatial data requests when bbox or AOI plus date range are used. Avoid sensitive corridor coordinates in remote-download mode unless approved, prefer local image inputs in restricted environments, and review or redact generated manifests before sharing outputs.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • 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 not None and not Path(path).exists():
            print(f"ERROR: --{flag} not found: {path}", file=sys.stderr)
            return 2
Confidence
98% confidence
Finding
The use of eval() on a string to access CLI argument values is unsafe because it executes Python expressions rather than performing simple attribute lookup. In this file the strings come from a hardcoded map, which reduces immediate exploitability, but it still creates an unnecessary code-execution primitive that could become dangerous if the mapping is later modified, made data-driven, or influenced indirectly.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The top-level description presents the skill as a local vegetation-risk analysis tool, but later documentation reveals automatic network access to download remote imagery and query external geospatial services. This hidden behavior can cause unanticipated data egress, violate offline or regulated-environment assumptions, and expose sensitive AOI, bbox, date-range, or infrastructure-related metadata through outbound requests and manifest logging.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The documentation materially changes the operating model from local analysis to automatic remote data retrieval late in the file, which can mislead users and downstream policy engines about the skill's actual trust boundary. Security review, user consent, and sandbox rules may be bypassed if operators rely on the earlier local-only framing.

Intent-Code Divergence

Medium
Confidence
95% confidence
Finding
The file states that sensitive line data is processed locally and not uploaded, but then introduces network-based automatic retrieval without clarifying whether user-supplied AOIs, corridors, or derived request metadata may leave the environment. In a powerline-inspection context, location and corridor information can be operationally sensitive, so contradictory statements increase the risk of accidental disclosure and policy noncompliance.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
Automatic remote downloads are described without a clear warning that running the skill may initiate outbound network connections. Users operating in restricted, air-gapped, or compliance-sensitive environments could trigger prohibited traffic or unintentionally disclose analysis locations and timing to an external provider.

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The script persists multiple files containing analysis parameters and raw CLI arguments, including manifest metadata and vars(args), without obvious minimization or warning. In operational environments, CLI arguments commonly contain sensitive paths, AOI details, date ranges, cache locations, or other internal metadata, so automatic persistence can create unintended information disclosure and forensic residue.

Unpinned Dependencies

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

# Third-party dependencies used by this skill
numpy
rasterio
Confidence
96% confidence
Finding
The dependency 'numpy' is unpinned, so installations may resolve to different versions over time, reducing build reproducibility and increasing exposure to newly introduced or transitively selected vulnerable releases. In a skill that processes external geospatial data, dependency drift can expand the attack surface and make supply-chain review difficult.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
numpy
rasterio
Confidence
94% confidence
Finding
The dependency 'rasterio' is unpinned, allowing arbitrary future versions to be installed and making the environment non-reproducible. Because rasterio handles complex geospatial file parsing and native libraries, version drift can introduce security regressions or unexpected vulnerable builds.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Requirements for powerline-vegetation-risk
# 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 dependency specification 'geoskill-data-fetcher>=0.2.0' permits any later version, which creates supply-chain risk because future releases may change behavior or introduce vulnerable code without review. This is especially relevant here because the package appears to fetch remote data, so compromise could affect network-facing functionality and imported data handling.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/powerline_vegetation_risk.py:1039