Back to skill

Security audit

geoskill-dinsar-coherence-analysis

Security checks across malware telemetry and agentic risk

Overview

The main D-InSAR tool appears locally focused, but the package includes under-disclosed credential and network helper code unrelated to the stated offline analysis purpose.

Review this package before installing in any environment with credentials or sensitive location data. The D-InSAR entrypoint itself looks like local raster processing, but the bundled unused core includes credential discovery, hardcoded Earthdata credentials, network geocoding/download helpers, and a provenance mismatch. Prefer a cleaned package that removes unused helpers, removes hardcoded credentials, pins dependencies, and documents any network or credential behavior.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (19)

Lp3

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding
The skill documentation declares no permissions, yet the detected capability set includes environment access, file read/write, shell, and network use. This creates a transparency and least-privilege failure: users may run a supposedly offline/local analysis skill without understanding it can access local data, invoke commands, or communicate externally.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The documented purpose is narrow, offline D-InSAR coherence estimation, but the analyzed behavior reportedly includes unrelated network access, geocoding, generic downloading, broad credential handling, and even embedded fallback Earthdata credentials. That mismatch is highly dangerous because it can conceal data exfiltration paths, unauthorized remote access, and secret exposure inside a skill users would reasonably trust to be local-only.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The vendored core metadata claims this package is for the different skill 'landsat-download' even though the surrounding manifest context identifies a D-InSAR coherence-analysis skill. This metadata mismatch breaks provenance and integrity assumptions, making it harder to verify that the bundled core files belong to the intended skill and increasing the risk of accidental supply-chain mixups or deceptive repackaging.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
This credential module is scoped far beyond the declared D-InSAR coherence-analysis skill and exposes helpers for unrelated third-party services such as OpenAI, CMA, FIRMS, and EOG. Expanding a skill's credential surface increases the chance of accidental credential access or later misuse, especially because the module centralizes retrieval of multiple secrets that this skill likely does not need.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The code is designed to automatically inspect user-home secret material via ~/.geoskill/secrets.json and .netrc-style locations, which broadens access to credentials outside the skill's stated purpose. In a plugin or skill context, silent discovery of user secrets creates unnecessary privilege and can expose unrelated credentials if any downstream code is compromised or extended.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The file exposes a generic remote download primitive that can fetch arbitrary URLs and write attacker-influenced filenames into an output directory. In a skill whose stated purpose is D-InSAR coherence analysis on provided SLC inputs, this expands capability beyond the declared scope and creates a supply-chain/SSRF-style risk surface if upstream inputs can control URLs or download lists.

Description-Behavior Mismatch

Medium
Confidence
81% confidence
Finding
The helper introduces remote asset retrieval behavior despite the skill description implying analysis of supplied SLC data rather than network fetching. This mismatch is dangerous because hidden network access can be abused to pull untrusted content, bypass operator expectations, and enlarge the attack surface for malicious inputs or data exfiltration workflows.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
User-supplied place names are sent to third-party geocoding services without any visible disclosure or consent mechanism in this file. In a security-sensitive or regulated environment, place queries may reveal locations of interest, operations, projects, or other sensitive intent, creating an avoidable data-leakage path to external providers.

Missing User Warnings

Low
Confidence
80% confidence
Finding
The code persistently stores resolved query data under the user's home directory without clear disclosure, retention control, or sensitivity checks. Cached place names and AOI metadata can expose past analyst interests or operational locations to other local users, backups, or forensic collection, especially on shared systems.

Missing User Warnings

High
Confidence
99% confidence
Finding
The module contains hardcoded fallback credentials with a real-looking Earthdata username and password. Hardcoded secrets are dangerous because anyone with source access can recover and reuse them, and the code will silently authenticate with those credentials when no environment or user secret is configured.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The module automatically loads a user secrets file on first use and mutates in-process defaults without clear user consent at call time. Silent secret ingestion is risky in a skill ecosystem because users may not expect this module to read broad credential stores, and any later compromise of the skill can leverage already-loaded secrets.

Credential Access

High
Category
Privilege Escalation
Content
def _read_netrc(host: str) -> Optional[Tuple[str, ...]]:
    """从 ~/.netrc 读指定 host 的凭证(无 token 格式)。"""
    for path in (Path.home() / ".netrc", Path.home() / "_netrc"):
        if not path.is_file():
            continue
Confidence
90% confidence
Finding
~/.netrc

Credential Access

High
Category
Privilege Escalation
Content
def _read_netrc(host: str) -> Optional[Tuple[str, ...]]:
    """从 ~/.netrc 读指定 host 的凭证(无 token 格式)。"""
    for path in (Path.home() / ".netrc", Path.home() / "_netrc"):
        if not path.is_file():
            continue
        try:
Confidence
90% confidence
Finding
.netrc

Credential Access

High
Category
Privilege Escalation
Content
def load_user_secrets(path: Optional[Path] = None, *, force: bool = False) -> bool:
    """从 ``~/.geoskill/secrets.json`` 加载用户级凭证到 _DEFAULTS.

    Phase 7 (2026-07-27): 第一次调用自动加载(lazy)。之后每个 helper
    调用也会 lazy 加载,除非显式 ``force=True`` 强制重读。返回 True
Confidence
88% confidence
Finding
secrets.json

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
rasterio
scipy
Confidence
95% confidence
Finding
numpy

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
rasterio
scipy
Confidence
95% confidence
Finding
rasterio

Unpinned Dependencies

Low
Category
Supply Chain
Content
numpy
rasterio
scipy
Confidence
95% confidence
Finding
scipy

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
88% confidence
Finding
numpy

Known Vulnerable Dependency: scipy — 4 advisory(ies): CVE-2013-4251 (SciPy creates insecure temporary directories); CVE-2013-4251 (The scipy.weave component in SciPy before 0.12.1 creates insecure temporary dire); CVE-2023-25399 (A refcounting issue which leads to potential memory leak was discovered in scipy) +1 more

High
Category
Supply Chain
Confidence
87% confidence
Finding
scipy

VirusTotal

VirusTotal findings are pending for this skill version.

View on VirusTotal

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
tests/conftest.py:15