Back to skill

Security audit

Korea Weather

Security checks for vulnerabilities and agentic risk

Overview

This skill is a straightforward Korea weather helper that uses a KMA API key to fetch forecasts and warnings from official public endpoints.

Install only if you need South Korea KMA weather data and are comfortable storing a KMA service key for the skill. Treat KMA_SERVICE_KEY as a credential, avoid sharing logs or screenshots containing real request URLs, and expect much of the returned forecast and warning text to be in Korean.

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
  • 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 (20)

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The overall domain and resource are consistent with the description: it uses KMA weather APIs, requires a KMA service key indirectly via helper API code, and supports precise local forecasts based on grid conversion from latitude/longitude. However, the description materially overstates capabilities. This code only accesses short-term forecast endpoints: getUltraSrtNcst, getUltraSrtFcst, and getVilageFcst. Those support current conditions, ultra-short forecasts, and short-term forecasts, not weather warnings/advisories and not the broader 3–10 day forecast range claimed. Therefore the description does not accurately represent this code chunk's actual behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
This code chunk is a coordinate-conversion utility, likely a supporting component for a weather skill that needs KMA grid coordinates. However, on its own it does not implement the declared primary purpose of obtaining Korean weather data or special advisories. There are no network calls, no use of a KMA_SERVICE_KEY, no trigger handling, and no access to external resources. While the 5km grid detail aligns with the description, that is only a helper function and not the advertised end-user capability. Therefore the supplied code does not accurately represent the declared skill behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared description presents a broad weather skill covering multiple KMA data types: current weather, mid-range forecasts, warnings/advisories, and precise local forecasts. The supplied code only implements one specific capability: calling the MidFcstInfoService /getMidFcst endpoint to retrieve mid-term forecast text for a selected region/station and release time. There is no code for current observations, alerts/advisories, or short-term/village forecast grid lookups. The KMA_SERVICE_KEY requirement is consistent, and there are no suspicious extra behaviors, but the description materially overstates what this code chunk actually does.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The declared description presents a general-purpose Korean weather skill covering current conditions, multi-day forecasts, local grid forecasts, and weather warnings/advisories. However, the supplied code chunk is narrowly scoped to one function: retrieving current weather warning status from the KMA Weather Warnings API and formatting that status for display. It does not implement current weather, forecast retrieval, or precise local forecast behavior. The KMA_SERVICE_KEY requirement is consistent, and weather warnings/advisories are indeed supported, but the actual code is materially narrower than the declared purpose. Therefore this is a description/behavior mismatch.

Lp3

Medium
Category
MCP Least Privilege
Confidence
86% confidence
Finding
The skill declares use of environment variables and network access but does not explicitly scope or constrain those capabilities with permissions/allowed-tools metadata. In a skill ecosystem, missing capability boundaries can permit broader-than-expected access and weakens reviewability, making misuse of secrets like KMA_SERVICE_KEY or unintended outbound requests harder to prevent.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The description frames the skill around Korean weather data and uses Korean terms exclusively, and later usage/output examples are presented only in Korean. Because the file does not indicate that users may request English or choose a locale, this appears to impose a language preference without explicit opt-in.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The output example and region-based usage require Korean labels such as '현재 날씨' and region names like '서울' without stating whether alternative languages are supported. That creates a natural-language locale constraint that is not accompanied by an opt-in or clearly justified language policy.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The file explicitly tells users to use LLMs to parse Korean forecast text and lists Korean-only keywords for interpretation. This creates a natural-language workflow that assumes Korean handling without documenting any language choice, fallback, or opt-in, which is a locale/language policy concern under the stated rules.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The example prompt feeds Korean source text to an LLM but instructs it in English to extract information, implicitly fixing the interaction to a particular language pattern. The documentation does not offer the user a language or locale choice, nor justify the constraint as region-specific behavior.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
This code file contains many user-facing strings in Korean, including forecast headings, labels, and CLI help text, but it does not provide any opt-in or language selection mechanism. Under the policy, forcing a specific language without user choice is a natural-language policy violation unless the locale restriction is explicitly justified.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This code emits its primary user-facing output entirely in Korean, including status headings and result messages, but does not provide user opt-in, locale selection, or justification for restricting output language. That creates a natural-language policy concern because the skill forces a specific language for all users rather than offering a choice.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
This markdown includes endpoint descriptions in both English and Korean, such as '현재 날씨' and '기상특보목록조회', but does not explain whether Korean is required, optional, or intended for a specific audience. Under the language/locale policy, forcing or assuming a language without user opt-in can be a natural-language policy concern.

Natural-Language Policy Violations

Low
Confidence
85% confidence
Finding
The file includes Korean-only content such as the service name and several parenthetical labels, which can impose a locale-specific requirement on users without an explicit opt-in or justification. Under the language/locale policy, forcing a specific language should be documented or made optional.

Missing User Warnings

Low
Confidence
92% confidence
Finding
This markdown file documents curl commands that include the sensitive `serviceKey` parameter and uses a placeholder, but it does not explicitly warn users not to paste or share a real key in shells, logs, or screenshots. Because markdown files should warn about behaviors affecting privacy or credentials, a brief credential-handling warning is warranted.

Natural-Language Policy Violations

Low
Confidence
76% confidence
Finding
The best-practices section recommends presenting the original Korean text to users, but it does not note that users may need a translated or localized version. While the API is Korean, the guidance still lacks any mention of user language preference or opt-in for untranslated content.

Natural-Language Policy Violations

Low
Confidence
86% confidence
Finding
This markdown file includes user-facing content that assumes Korean language proficiency, such as the service name in Korean only. Under the policy for natural-language constraints, forcing a specific language without opt-in or explicit regional justification can be a locale-policy issue.

Natural-Language Policy Violations

Low
Confidence
94% confidence
Finding
The file explicitly tells integrators to check for Korean keywords such as 발표, 갱신, 상향, 하향, 해제. This imposes a Korean locale assumption in natural-language processing behavior without an opt-in or an explicit statement that the skill is intended only for Korean KMA data.

Natural-Language Policy Violations

Low
Confidence
81% confidence
Finding
This markdown reference includes Korean-only categorical values such as "강수없음" and "적설없음" alongside English descriptions, which can impose a locale assumption on users or downstream implementations. Because the file does not explicitly state that it is documenting a Korea-specific API or that Korean source values are expected, it may violate the language/locale policy requirement for explicit choice or justification.

Natural-Language Policy Violations

Low
Confidence
78% confidence
Finding
The examples for `wf3Am` and `wf3Pm` are given as Korean strings (e.g. "맑음", "구름많음") without a note explaining that the API emits Korean-language forecast text. That can be read as forcing a specific language output rather than documenting a region-specific source format.

Natural-Language Policy Violations

Low
Confidence
77% confidence
Finding
This file is a code file, so only SQP-2 and SQP-3 apply. The docstring repeatedly refers to KMA grid coordinates and Korean examples, but it does not explicitly warn that the conversion is specific to the Korea Meteorological Administration grid system and not a general global coordinate converter. That can create a mild locale/scope ambiguity in natural-language guidance.

Static analysis

No suspicious patterns detected.