Back to skill

Security audit

Geoskill: NASA Power Download

Security checks across malware telemetry and agentic risk

Overview

The advertised NASA POWER downloader is mostly coherent, but the package includes under-disclosed credential-handling code and privacy/supply-chain issues that warrant Review before installation.

Review before installing. Prefer removing the bundled credential helper or hardcoded credentials, pinning dependencies, and updating the privacy notice to disclose Nominatim/Open-Meteo place lookup. Use explicit lat/lon or bbox if you do not want place names sent to geocoding services.

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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The docstring states the function applies an ellipsoidal correction, but the implementation uses only a spherical trapezoid formula with WGS84_A as a constant radius. In a geospatial validation module, this mismatch can cause downstream users to trust scientifically inaccurate area calculations for compliance, planning, or threshold-based decisions, especially at high latitudes or large extents.

Intent-Code Divergence

Medium
Confidence
89% confidence
Finding
The module-level policy says antimeridian-crossing bounding boxes must be rejected unless specially handled, but check_bbox_wgs84 mainly flags out-of-range longitudes and w >= e, which can miss or ambiguously classify wrapped cases encoded within [-180, 180]. In geospatial processing, mishandling dateline-crossing extents can produce incorrect area, clipping, download, or reprojection results over very large regions.

Intent-Code Divergence

High
Confidence
99% confidence
Finding
The module documentation asserts that passwords are not hardcoded in source, but the file embeds a live fallback username and password in `_DEFAULTS`. This creates a direct secret-exposure risk and misleads reviewers and operators into believing credentials are handled safely when they are not.

Intent-Code Divergence

Medium
Confidence
86% confidence
Finding
The docstring claims passwords are not cached and are read each call, but `load_user_secrets()` loads secrets into `_DEFAULTS` and retains them in process memory. This discrepancy weakens security assumptions and increases the lifetime of sensitive material in memory in long-running processes.

Intent-Code Divergence

Medium
Confidence
97% confidence
Finding
The privacy notice states that only NASA POWER receives user data, but the code also sends user-supplied place queries to third-party Nominatim endpoints when --place is used. This is a genuine transparency and privacy issue because users may disclose sensitive location intent under a false assumption about where their data is sent.

Missing User Warnings

High
Confidence
99% confidence
Finding
Hardcoded fallback credentials are present in the repository and will be used automatically when no stronger source is configured. This can expose the account to anyone with source access and may cause unintended credential reuse across environments, making compromise or abuse much easier.

Natural-Language Policy Violations

Medium
Confidence
79% confidence
Finding
The code hardcodes an Accept-Language preference of zh-CN,zh;q=0.9 for Nominatim requests without user awareness or configuration. While this is not direct code execution or data exfiltration, it can unnecessarily disclose a locale preference, alter returned results, and create misleading behavior inconsistent with user expectations.

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
81% confidence
Finding
~/.netrc

Unpinned Dependencies

Low
Category
Supply Chain
Content
nasa_power_download
requests>=2.28.0
tqdm>=4.64.0
Confidence
96% confidence
Finding
nasa_power_download

Unpinned Dependencies

Low
Category
Supply Chain
Content
nasa_power_download
requests>=2.28.0
tqdm>=4.64.0
Confidence
99% confidence
Finding
requests>=2.28.0

Unpinned Dependencies

Low
Category
Supply Chain
Content
nasa_power_download
requests>=2.28.0
tqdm>=4.64.0
Confidence
95% confidence
Finding
tqdm>=4.64.0

Known Vulnerable Dependency: requests==2.28.0 — 8 advisory(ies): CVE-2024-47081 (Requests vulnerable to .netrc credentials leak via malicious URLs); CVE-2024-35195 (Requests `Session` object does not verify requests after making first request wi); CVE-2026-25645 (Requests has Insecure Temp File Reuse in its extract_zipped_paths() utility func) +5 more

High
Category
Supply Chain
Confidence
99% confidence
Finding
requests==2.28.0

Known Vulnerable Dependency: tqdm==4.64.0 — 2 advisory(ies): CVE-2024-34062 (tqdm CLI arguments injection attack); CVE-2024-34062 (tqdm CLI arguments injection attack)

Low
Category
Supply Chain
Confidence
90% confidence
Finding
tqdm==4.64.0

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/test_nasa-power-download.py:28