Back to skill

Security audit

Olympic Alert

Security checks for vulnerabilities and agentic risk

Overview

This skill is a disclosed Olympic event reminder that reads a bundled schedule, writes a small local notification state file, and does not show hidden or destructive behavior.

Install this only if you want Korean-language Olympic reminders and are comfortable with the agent running a local Python script on heartbeat and keeping a small notification history under ~/.config/olympic-alert. Review or narrow the triggers if you do not want ordinary Olympic or Milan mentions to activate the skill.

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
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (9)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding
코드는 전반적으로 선언된 목적과 상당히 일치한다. 실제로 경기 알림, 15분 이내 알림 조건, 일정 추가/삭제, 중계 링크 포함, 일정 목록 조회를 수행한다. 다만 설명에 있는 '2026 밀라노 동계올림픽 한국팀 기본 설정 포함'은 코드에서 확인되지 않는다. 기본값은 events.json이 없을 때 country='Unknown', events=[], links={}를 반환하는 수준이며, 한국팀이나 2026 밀라노 대회에 대한 사전 설정 데이터는 내장되어 있지 않다. 또한 모듈 docstring에는 30분 전 알림이라고 적혀 있으나 실제 로직은 15분 이내 알림으로 동작하므로, 사용자에게 노출된 선언과 비교하면 주요 불일치는 아니다. 따라서 부분적 설명 불일치가 있어 mismatch로 판단한다.

Ae1

High
Category
analysis-evasion
Content
| `SKILL.md` | 이 문서 |
Confidence
100% confidence
Finding
Referenced artifact was not completely inspected

Lp3

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding
The skill explicitly documents reading and writing local files (`scripts/events.json` and `~/.config/olympic-alert/state.json`) but does not declare any tool scope or permissions boundary. In an agent environment, undeclared file capabilities reduce transparency and can permit broader-than-expected filesystem access if the runtime trusts the manifest to describe behavior.

Natural-Language Policy Violations

Medium
Confidence
82% confidence
Finding
The manifest description, trigger examples, usage text, heartbeat handling, and output examples are written entirely in Korean, and the skill behavior appears oriented to Korean users by default without offering a language or locale choice. This can violate language/locale policy when a skill implicitly forces one language without opt-in or clear region-specific justification.

Vague Triggers

Medium
Confidence
90% confidence
Finding
The trigger list includes generic terms such as '올림픽', 'Olympic', and '밀라노', which are likely to appear in normal conversation unrelated to running this skill. Overly broad triggers can cause unintended activation, leading the agent to read/write local state or emit notifications in contexts where the user did not intend to invoke the skill.

Intent-Code Divergence

Medium
Confidence
99% confidence
Finding
The top-level documentation states the script sends alerts 30 minutes before scheduled events. In `check_upcoming`, the actual condition is `0 <= minutes_until <= 15`, which means alerts are generated only during the 15-minute window before the event. This is an active contradiction between documented intent and implemented behavior.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The script emits Korean-only strings such as "지금 시작!" and "분 후" directly in user-facing alerts. This forces a specific language/locale without user opt-in, and the file does not document that the skill is intentionally limited to Korean users or a Korean region.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The default and list-mode status messages, including "알림 없음", "다가오는 경기", and "남은 경기 없음", are presented only in Korean. Under the language/locale policy, this is a natural-language policy issue unless the user is given a choice or the locale constraint is explicitly documented and justified.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This JSON hard-codes Korean locale choices, including the country value and Korean-only link labels/content, with no indication that users can select another language or region. That creates a natural-language locale policy issue because the file appears tailored to a single language/locale without documented opt-in or justification.

Static analysis

No suspicious patterns detected.