Back to skill

Security audit

Croatia Weather

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Croatian weather CLI that fetches public DHMZ weather feeds and does not show hidden persistence, credential access, destructive actions, or unrelated data handling.

Install this if you want an agent to retrieve Croatian weather and related DHMZ public-feed data. It will make outbound requests to DHMZ-related weather domains when invoked and uses optional environment variables for home-station configuration; review those settings if station names or aliases could reveal a private location preference.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (8)

Tainted flow: 'req' from os.environ.get (line 139, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · scripts/dhmz.py (reported line 140)May include surrounding context.

python
def fetch_xml(url):
    try:
        req = Request(url, headers={"User-Agent": "DHMZ-Weather-CLI/1.0"})
        with urlopen(req, timeout=15) as r:
            return ET.parse(r).getroot()
    except (URLError, ET.ParseError) as e:
        print(f"ERROR: Failed to fetch {url}: {e}", file=sys.stderr)

YARA rule 'agent_skill_mcp_tool_poisoning_metadata': MCP/tool metadata poisoning indicators in tool schemas or skill manifests [agent_skills]

High
Category
YARA Match
Confidence
80% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

Scanner excerpt · scripts/dhmz.py (reported line 518)May include surrounding context.

python
"
        icon = {"niska": "🟢", "umjerena": "🟡", "visoka": "🟠", "vrlo visoka": "🔴", "ekstremna": "🟣"}.get(t("indeks"), "⚪")
        print(f"{t('ime'):<20} {t('temperatura'):>5} {t('vlaga'):>5}% {t('vjetar'):>6} km/h {t('oborina'):>5} mm {t('fwi'):>5} {icon} {t('indeks')}")


def cmd_bio(args):
    """Biometeorological forecast."""
    root = fetch_xml(FEEDS["bio"])
    print("🧑‍⚕️ Biometeorološka prognoza\n")

    bio_levels = {"1": "🟢 Povoljno", "2": "🟡 Umjereno nepovoljno", "3": "🟠 Nepovoljno", "4": "🔴 Vrlo nepovoljno"}

    for pod in root.findall("Podaci"):
        date_el = pod.find("Datum")
        text_el = pod.find("Tekst")
        if date_el is None:
            continue
        print(f"📅 {date_el.text.strip()}")
        if text_el is not None and text_el.text:
            print(f"   {text_el.text.strip()}")
        regions = []
        for tag, label in [("istocna", "Istočna"), ("sredisnja", "Središnja"), ("gorska", "Gorska"), ("sje

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The README says the agent will automatically use this skill when the user 'asks about Croatian weather,' but it does not define clearer trigger boundaries, exclusions, or negative examples. In a markdown file, this is an ambiguous invocation description that could cause unintended activation for general conversation about weather, travel, or climate topics related to Croatia.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill explicitly requires Python and describes network-fetching behavior plus use of environment variables, but it does not declare any tool scope such as allowed tools or permissions. That creates an authorization gap: the runtime may grant broader-than-necessary access, making review and containment harder if the script is modified or abused.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 115)May include surrounding context.

md
# Croatia Weather — DHMZ Data

Fetches official weather data from **DHMZ** (Državni hidrometeorološki zavod) via their free XML feeds.
Data is licensed under [Open Licence (data.gov.hr)](https://data.gov.hr/open-licence-republic-croatia) — attribution: **Izvor: DHMZ**.

## Home Station (Configurable)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · README.md (reported line 141)May include surrounding context.

md
# Croatia Weather — DHMZ Data

Fetches official weather data from **DHMZ** (Državni hidrometeorološki zavod) via their free XML feeds.
Data is licensed under [Open Licence (data.gov.hr)](https://data.gov.hr/open-licence-republic-croatia) — attribution: **Izvor: DHMZ**.

## Home Station (Configurable)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 10)May include surrounding context.

md
# Croatia Weather — DHMZ Data

Fetches official weather data from **DHMZ** (Državni hidrometeorološki zavod) via their free XML feeds.
Data is licensed under [Open Licence (data.gov.hr)](https://data.gov.hr/open-licence-republic-croatia) — attribution: **Izvor: DHMZ**.

## Home Station (Configurable)

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code hardcodes the CLI description, examples, and nearly all user-facing output in Croatian, while also serving broader contexts such as European weather data. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation unless the locale restriction is explicitly justified or users are given a choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.