Back to skill

Security audit

Geoskill: Flood Extent Mapping

Security checks for vulnerabilities and agentic risk

Overview

This skill performs disclosed flood-mapping work and does not show hidden data access, persistence, destructive behavior, or credential use.

Install only in an environment where geospatial Python packages can be safely resolved, prefer pinned dependency versions, and review the public-data auto-download path if network access matters for your workflow. The skill writes analysis outputs under the chosen output directory and does not appear to access credentials or run persistently.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • 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 (5)

eval() call detected

High
Category
Dangerous Code Execution
Content
# Auto-download route: skip file check, will populate args.sar
            pass
    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
96% confidence
Finding
The code uses eval() on a string to resolve an argument accessor, which creates an unnecessary code-execution primitive. In this file the current accessor values come from a hardcoded dictionary, so immediate exploitability is limited, but any future refactor, plugin influence, or attacker-controlled modification of FILE_ARGS could turn this into arbitrary code execution within argument validation.

Unpinned Dependencies

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

# Third-party dependencies used by this skill
numpy
rasterio
Confidence
97% confidence
Finding
The dependency 'numpy' is unpinned, so installations may resolve to different versions over time, including versions with known defects or incompatible behavior. In a supply-chain context this weakens reproducibility and can expose the skill to newly introduced or already known vulnerabilities depending on what version gets installed.

Unpinned Dependencies

Low
Category
Supply Chain
Content
# Third-party dependencies used by this skill
numpy
rasterio
Confidence
96% confidence
Finding
The dependency 'rasterio' is unpinned, which allows non-deterministic package resolution and increases supply-chain risk. A future install could pull a vulnerable or breaking release without review, affecting reliability and potentially security depending on transitive changes.

Unpinned Dependencies

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

# Third-party dependencies used by this skill
numpy
Confidence
99% confidence
Finding
Using 'geoskill-data-fetcher>=0.2.0' permits any newer version, including unreviewed major or minor releases and vulnerable transitive dependency sets. Because this package appears to handle external data fetching, an uncontrolled upgrade path is more sensitive than a purely local utility library and increases supply-chain exposure.

Known Vulnerable Dependency: numpy — 10 advisory(ies): CVE-2014-1859 (Numpy arbitrary file write via symlink attack); CVE-2021-41495 (NumPy NULL Pointer Dereference); CVE-2021-33430 (NumPy Buffer Overflow (Disputed)) +7 more

Critical
Category
Supply Chain
Confidence
89% confidence
Finding
The requirement references 'numpy' without a version bound, and static analysis indicates multiple advisories affecting some NumPy releases. Because no safe version is specified, environments may install a vulnerable build; while exploitability depends on the runtime version and how NumPy is used, the absence of version constraints makes this a real dependency risk rather than a pure false positive.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/flood_extent_mapping.py:64