Back to skill

Security audit

Weather via OpenMeteo (via openmeteo-sh cli; advanced ver)

Security checks for vulnerabilities and agentic risk

Overview

The skill’s weather-query behavior is coherent, but its README documents unpinned third-party install paths that can run with root privileges.

Review the install path before using this skill. Prefer a pinned, verified release of `openmeteo-sh`; avoid running `sudo make install` from an unreviewed default branch, and verify any APT signing-key fingerprint or package source before adding it to system trust. The weather-query instructions themselves appear purpose-aligned.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Warning
Location
README.md:48
Finding
Unpinned Third-Party Installation Can Execute Mutable Upstream Code with Elevated Privileges## Vulnerability Details **File Location**: `README.md`, lines 48–70 **Vulnerability Type**: Supply-chain risk from unpinned third-party installation sources **Risk Level**: Medium ### Vulnerable Code ```sh brew tap lstpsche/tap brew install openmeteo-sh ``` ```sh # Import the signing key curl -fsSL https://lstpsche.github.io/apt-repo/pubkey.gpg \ | sudo gpg --dearmor -o /usr/share/keyrings/openmeteo-sh.gpg # Add the repository echo "deb [signed-by=/usr/share/keyrings/openmeteo-sh.gpg] https://lstpsche.github.io/apt-repo stable main" \ | sudo tee /etc/apt/sources.list.d/openmeteo-sh.list # Install sudo apt update sudo apt install openmeteo-sh ``` ```sh git clone https://github.com/lstpsche/openmeteo-sh.git cd openmeteo-sh sudo make install ``` ### Technical Analysis The documented installation methods trust mutable external repositories without pinning a reviewed release tag, commit hash, package version, checksum, or signature identity. The source installation is particularly sensitive because it clones the upstream repository's current default branch and then invokes `make install` with `sudo`. A Makefile can execute arbitrary commands, so this grants mutable upstream content root-level execution during installation. The APT procedure downloads a signing key from an externally controlled site and installs it into the system trust configuration without verifying its expected fingerprint through an independent channel. The package repository is hosted under the same upstream-controlled namespace. Consequently, compromise of that namespace could allow an attacker to replace both the repository content and the key presented to new users. The Homebrew procedure similarly adds and installs from a mutable third-party tap without version or artifact-integrity pinning. These practices create a dependency supply-chain exposure beyond the minimum runtime privileges needed to query weather data. ### Attack Path 1. An attacker compromises the upstream Git ...[truncated 1440 chars]
Remediation
## Remediation Suggestions 1. Pin source installations to a reviewed, immutable release tag and full commit hash instead of cloning and executing the current default branch. 2. Publish SHA-256 checksums for release archives and package artifacts, and require users to verify them before installation. 3. Cryptographically sign releases and document a trusted, independently verifiable signing identity. 4. Publish the expected APT signing-key fingerprint and require fingerprint verification before placing the key in the system keyring. 5. Avoid obtaining the APT repository and its initial trust anchor exclusively from the same administrative namespace where practical. 6. Pin package versions in installation examples and document a controlled update process. 7. Replace `sudo make install` on an unverified checkout with installation from a verified release artifact. Where possible, build without privileges and elevate only for the narrowly scoped file-copy step. 8. Document the files, commands, and privileges used by installation so users can review the privileged changes. 9. Consider sandboxing or packaging the CLI so its installation and runtime permissions are limited to those necessary for HTTPS weather queries.
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (10)

Credential Access

High
Category
Privilege Escalation
Content
```sh
# Import the signing key
curl -fsSL https://lstpsche.github.io/apt-repo/pubkey.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/openmeteo-sh.gpg

# Add the repository
echo "deb [signed-by=/usr/share/keyrings/openmeteo-sh.gpg] https://lstpsche.github.io/apt-repo stable main" \
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
```sh
# Import the signing key
curl -fsSL https://lstpsche.github.io/apt-repo/pubkey.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/openmeteo-sh.gpg

# Add the repository
echo "deb [signed-by=/usr/share/keyrings/openmeteo-sh.gpg] https://lstpsche.github.io/apt-repo stable main" \
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Chaining Abuse

High
Category
Tool Misuse
Content
```sh
# Import the signing key
curl -fsSL https://lstpsche.github.io/apt-repo/pubkey.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/openmeteo-sh.gpg

# Add the repository
echo "deb [signed-by=/usr/share/keyrings/openmeteo-sh.gpg] https://lstpsche.github.io/apt-repo stable main" \
Confidence
88% confidence
Finding
This is a classic risky shell chain: remote content retrieved by curl is piped directly into a privileged command. Even though the stated purpose is to install a repository key, the pattern bypasses inspection and can amplify compromise of the remote source into root-level package trust establishment.

Chaining Abuse

High
Category
Tool Misuse
Content
# Add the repository
echo "deb [signed-by=/usr/share/keyrings/openmeteo-sh.gpg] https://lstpsche.github.io/apt-repo stable main" \
  | sudo tee /etc/apt/sources.list.d/openmeteo-sh.list

# Install
sudo apt update
Confidence
75% confidence
Finding
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
- `bash` 3.2+ (pre-installed on macOS and Linux)
- `curl` (pre-installed on macOS and Linux)
- `jq` — install if missing: `brew install jq` (macOS) or `sudo apt install jq` (Debian/Ubuntu)

## Installation
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
- `bash` 3.2+ (pre-installed on macOS and Linux)
- `curl` (pre-installed on macOS and Linux)
- `jq` — install if missing: `brew install jq` (macOS) or `sudo apt install jq` (Debian/Ubuntu)

## Installation
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
```sh
# Import the signing key
curl -fsSL https://lstpsche.github.io/apt-repo/pubkey.gpg \
  | sudo gpg --dearmor -o /usr/share/keyrings/openmeteo-sh.gpg

# Add the repository
echo "deb [signed-by=/usr/share/keyrings/openmeteo-sh.gpg] https://lstpsche.github.io/apt-repo stable main" \
Confidence
81% confidence
Finding
This command pipes data fetched from the network directly into a privileged command that writes a trusted APT keyring file. Although common in setup docs, this creates a trust-on-first-use risk: if the source URL or transport were compromised, an attacker could install a signing key that authorizes malicious packages as root.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
| sudo tee /etc/apt/sources.list.d/openmeteo-sh.list

# Install
sudo apt update
sudo apt install openmeteo-sh
```
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
| sudo tee /etc/apt/sources.list.d/openmeteo-sh.list

# Install
sudo apt update
sudo apt install openmeteo-sh
```
Confidence
70% confidence
Finding
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
```sh
git clone https://github.com/lstpsche/openmeteo-sh.git
cd openmeteo-sh
sudo make install
```

## What the agent can do with this skill
Confidence
72% confidence
Finding
sudo make install executes installation logic from source code with root privileges, which can run arbitrary commands from the Makefile or invoked scripts. In a skill context, this is more dangerous because an agent or user may follow README steps without auditing the repository contents first.

Static analysis

No suspicious patterns detected.