Back to skill

Security audit

geoskill-geometric-correction

Security checks across malware telemetry and agentic risk

Overview

The skill appears to perform local geometric correction, but it also ships undisclosed credential, downloader, geocoding, and hardcoded-password code that does not fit the advertised purpose.

Review this carefully before installing. The main script may work as an offline raster correction utility, but the package should remove or clearly isolate the unrelated network, downloader, and credential modules, delete and rotate the hardcoded Earthdata credentials, and document any network or secret access before it is suitable for normal use.

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 (22)

Lp3

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding
The skill advertises local geometric correction but declares no permissions while static analysis detected capabilities for environment access, file read/write, network, and shell execution. Even in documentation form, this mismatch reduces user visibility into sensitive operations and can lead to unexpected data access, command execution, or outbound connections when the skill is run.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
This is a significant description-behavior mismatch: a skill presented as GCP-based geometric correction reportedly also includes networking, generic download logic, credential management, and hardcoded default EARTHDATA credentials. Hidden or undocumented behaviors materially expand the attack surface, and hardcoded credentials are especially dangerous because they can enable unauthorized access, credential leakage, or abusive downstream use.

Description-Behavior Mismatch

Medium
Confidence
88% confidence
Finding
The vendored metadata declares a different skill capability ('landsat-download') than the advertised geometric-correction purpose, which indicates a supply-chain or packaging mismatch. In a security review, unexplained capability drift is dangerous because operators may approve and run a skill under false assumptions while hidden download-related code is present in the bundle.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
The vendored file list includes modules such as safe_download.py and credentials.py, which are not obviously required for a geometric-correction skill that should operate on provided imagery and GCP inputs. Unnecessary download and credential-handling capabilities expand the attack surface, create opportunities for secret misuse or exfiltration, and make the package behavior inconsistent with user expectations.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
The code sends user-supplied place queries to external geocoding services (Open-Meteo and optionally Nominatim), which can disclose potentially sensitive locations to third parties. In a skill described as geometric correction, this network exfiltration is not obviously necessary, making the behavior more surprising and therefore riskier in context.

Context-Inappropriate Capability

Low
Confidence
74% confidence
Finding
The code stores resolved AOI queries under the user’s home directory, creating a local record of searched places that may reveal sensitive operational interests. This is a privacy issue rather than a direct compromise, but it can expose location history to other local users, backups, or forensic collection.

Description-Behavior Mismatch

High
Confidence
94% confidence
Finding
This credential module is materially over-scoped for a skill whose stated purpose is geometric correction. It aggregates access paths for multiple unrelated external services and local secret sources, which expands the attack surface and creates unnecessary capability for credential harvesting or later exfiltration if any dependent code is compromised.

Context-Inappropriate Capability

High
Confidence
91% confidence
Finding
Support for retrieving an OpenAI API key is unrelated to the declared geospatial correction function and grants access to a valuable secret with no clear operational need. In the context of an agent skill, unnecessary secret access is dangerous because it enables privilege expansion and makes secret misuse harder to detect.

Context-Inappropriate Capability

High
Confidence
93% confidence
Finding
The module supports credentials for several external services beyond the apparent needs of geometric correction, violating least privilege. In a skill context, broad credential support increases the chance that unrelated secrets from the user's environment, .netrc, or home directory are accessed and later exposed by compromised or poorly reviewed code paths.

Context-Inappropriate Capability

Medium
Confidence
86% confidence
Finding
A generic network downloader inside a skill whose stated purpose is geometric correction expands the skill's capabilities beyond user-visible expectations and creates an unnecessary fetch surface. If attacker-controlled URLs or filenames reach this helper elsewhere in the skill, it can enable unreviewed external content retrieval, SSRF-like access to internal endpoints, or delivery of untrusted files unless tightly constrained.

Description-Behavior Mismatch

High
Confidence
96% confidence
Finding
This file exposes place-resolution and external geocoding behavior that does not align with the declared purpose of a GCP-based geometric correction skill. Hidden or undeclared network-capable functionality expands the skill’s effective permissions and data flows, creating a supply-chain risk where user-provided place names and metadata may be sent to third-party services unexpectedly.

Description-Behavior Mismatch

High
Confidence
98% confidence
Finding
The legacy fallback preserves full network geocoding capability via Open-Meteo and Nominatim, even when the unified core import fails. That means undeclared external behavior remains reachable under error conditions, which is especially risky because fallback paths are often less reviewed and can silently exfiltrate user input to third-party endpoints.

Context-Inappropriate Capability

Medium
Confidence
93% confidence
Finding
The external geocoding routines introduce unnecessary outbound network access for a skill whose stated function is image geometric correction. Even if not overtly malicious, unjustified network capability increases attack surface, leaks user-supplied location queries to external services, and weakens the principle of least privilege.

Description-Behavior Mismatch

Medium
Confidence
96% confidence
Finding
When a real input raster is supplied without a GCP file, the code silently generates synthetic control points from the requested bbox instead of failing closed. This can produce plausible-looking corrected output and RMS metrics that are not tied to real ground truth, creating integrity risk for downstream geospatial decisions because users may trust a fabricated georeferencing result as valid.

Missing User Warnings

Medium
Confidence
87% confidence
Finding
Place names are transmitted to external services without any user-facing disclosure in this file, which undermines informed consent and can leak sensitive geographic intent. Because the skill’s stated purpose is correction rather than geocoding, users are less likely to expect such outbound data sharing.

Missing User Warnings

High
Confidence
99% confidence
Finding
The file contains hardcoded fallback credentials, including a plaintext Earthdata username and password. Hardcoded secrets are immediately dangerous because anyone with source access can reuse them, and a silent fallback means downstream operations may authenticate without the user's knowledge, concealing misuse and hampering incident response.

Natural-Language Policy Violations

Medium
Confidence
84% confidence
Finding
Forcing the Accept-Language header to Chinese without user choice is a questionable privacy and policy behavior because it silently imposes a locale preference and may influence returned data or downstream logging. In isolation this is low severity, but in combination with undeclared third-party geocoding it reinforces that the skill is performing surprising network behavior outside its stated purpose.

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
84% 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
82% 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

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