Back to skill

Security audit

Pollen rapporten

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it claims: it fetches Swedish pollen forecasts from a disclosed public API, with no hidden persistence, credential access, or file mutation.

Before installing, understand that forecast lookups contact api.pollenrapporten.se and depend on that service. Use the grass-pollen alert output as general allergy guidance only, not as personalized medical advice.

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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (9)

Lp3

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding
The skill invokes a Python script that fetches data from an external API, but the manifest does not declare any tool scope or permissions for network use. Missing capability declarations weaken governance and review controls, making it easier for a skill to perform external communication without explicit approval or user visibility.

External Transmission

Medium
Category
Data Exfiltration
Content
## Data Sources

- **API**: https://api.pollenrapporten.se/v1/
- **Source**: Swedish Museum of Natural History (Naturhistoriska riksmuseet)
- **Coverage**: 24 regions across Sweden
- **Update frequency**: Daily during pollen season
Confidence
74% confidence
Finding
The skill sends user-supplied location queries to an external third-party API, which is an external data transmission event. In context, this is expected functionality for a forecast skill, but it still creates privacy and supply-chain risk because user input and fetched content leave the local environment and depend on a remote service.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The note says 'You must send in Swedish, and also in English,' which imposes a language behavior unconditionally. This is a natural-language policy concern because it forces a specific locale/language choice rather than offering the user an option or documenting a justified region-specific exception for output language.

External Transmission

Medium
Category
Data Exfiltration
Content
import urllib.request
from pathlib import Path

API_BASE = "https://api.pollenrapporten.se/v1"
SKILL_DIR = Path(__file__).parent.parent
REGIONS_FILE = SKILL_DIR / "references" / "regions.json"
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Intent-Code Divergence

Low
Confidence
80% confidence
Finding
Line L134 states 'You must send in Swedish, and also in English,' which implies bilingual output behavior. Elsewhere in the file, the documented implementation only fetches Swedish forecasts from the API and formats them; no translation step or dual-language rendering is described in the examples or workflow.

Natural-Language Policy Violations

Low
Confidence
81% confidence
Finding
This JSON file is entirely built around Swedish region names and mappings, including accented Swedish place names and English-to-Swedish aliases. Because SQP-3 applies to all file types, this can be flagged as a locale-specific constraint that is encoded without any accompanying natural-language justification or user opt-in in the file itself.

Intent-Code Divergence

Low
Confidence
77% confidence
Finding
The top-level docstring frames the script as a simple forecast fetcher, while the implementation supports an extra '--alert' mode that produces tailored warning and medication/behavior recommendations. This is more than an omitted implementation detail because it changes the apparent intent from data retrieval to advisory alerting.

Natural-Language Policy Violations

Low
Confidence
86% confidence
Finding
The script hardcodes bilingual and Swedish-specific output strings such as level names and forecast text labels, while the usage and other messages are in English. This imposes a locale choice in the user-facing output without any opt-in or configuration mechanism.

Context-Inappropriate Capability

Low
Confidence
88% confidence
Finding
The manifest describes a Sweden pollen forecast skill that reports pollen levels and severity. The code adds a special-purpose capability keyed to a specific user's grass allergy and later emits behavioral and medication recommendations, which is not necessary to fetch or present forecast data and is not declared in the skill description.

Static analysis

No suspicious patterns detected.