Back to skill

Security audit

Japanese Smart Home Command Normalizer

Security checks for vulnerabilities and agentic risk

Overview

The skill does not appear to steal data or run device APIs itself, but it can emit fast-path smart-home intents beyond its stated scope and mishandle ambiguous commands.

Review before installing into any automation path. Use it only behind an explicit allowlist of permitted domains and intents, and require downstream confirmation for multi-device, contradictory, or undeclared-device outputs until the skill narrows or fully documents its runtime scope.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
lib/normalize.js:99
Finding

Ambiguous and cross-domain commands can bypass confirmation safeguards

Content
View full analysis
[domainName, domain.deviceAliases || []]), ); const actions = Object.entries(domains).reduce((acc, [, domain]) => { for (const [actionName, aliases] of Object.entries(domain.actions || {})) { acc[actionName] = Array.from(new Set([...(acc[actionName] || []), ...aliases, ...(SHARED_ALIASES.action[actionName] || [])])); } return acc; }, {}); const modes = Object.entries(domains).reduce((acc, [, domain]) => { for (const [modeName, aliases] of Object.entries(domain.modes || {})) { acc[modeName] = Array.from(new Set([...(acc[modeName] || []), ...aliases])); } return acc; }, {}); return { domains, devices, actions, modes }; } ``` `lib/normalize.js:99-150`: ```js function inferAction(text, profile = DEFAULT_PROFILE) { const normalized = normalizeText(text); if (/(つけて|つける|オン)/.test(normalized)) return { value: 'on', alias: 'つけて', score: 0.96, matchedBy: 'rule' }; if (/(消して|けして|オフ|止めて|とめて)/.test(normalized)) return { value: 'off', alias: '消して', score: 0.96, matchedBy: 'rule' }; if (/(にして|して)/.test(normalized)) return { value: 'set_mode', alias: 'にして', score: 0.94, matchedBy: 'rule' }; return findBestAlias(text, profile.actions, 0.72); } function deriveIntent(slots) { if (slots.device === 'light' && slots.action === 'on') return { intent: 'light_on', reason: 'matched light on' }; if (slots.device === 'light' && slots.action === 'off') return { intent: 'light_off', reason: 'matched light off' }; if (slots.device === 'aircon' && slots.action === 'on' && !slots.mode) return { intent: ...[truncated 5233 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
lib/domains.js:45
Finding

Runtime device capabilities exceed the Skill's declared current scope

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (16)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The description claims a skill that normalizes Japanese STT transcripts into safe structured intents and slots, especially for lights and air conditioners with drifted terms like れーぼー, だんぼー, そうふう, and similar. The code does include alias tables and required-slot metadata that would support such normalization, and it includes the cited AC mode variants. However, this chunk itself only defines configuration and a buildProfile function that aggregates aliases; it does not parse transcripts or produce normalized intents/slots. Additionally, it includes undeclared support for curtains and TVs, which is a meaningful capability beyond the stated lights/air-conditioners focus. Therefore the description does not accurately represent this code chunk's actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The code largely matches the stated smart-home/STT-normalization purpose for Japanese commands, especially for air conditioners and lights. It includes replacements for examples like れーぼー, だんぼー, そうふう, エアコントメテ, and 電気化して, and returns structured intents/slots. However, the implementation goes beyond the declared scope in two material ways: (1) it supports additional device domains not mentioned in the description—curtains and TVs via deriveIntent and alias-based device inference; and (2) it is not just a normalizer, but a full classifier that fuzzily infers device, mode, action, derives intents, computes confidence, and determines whether confirmation is needed. Because these are substantive undeclared capabilities, this is a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
3. Reuse `lib/normalize.js` as the core pure module.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
3. Reuse `lib/normalize.js` as the core pure module.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
78% confidence
Finding

All natural-language utterance examples in the file are Japanese-only, including transliterated variants, with no indication that users may choose another language or that the skill is intentionally limited to a Japanese locale. Under the policy, a language constraint should be opt-in or clearly justified.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The sample set expands the skill from the declared scope of lights and air conditioners into curtains and TV control. In a smart-home command normalizer, this scope drift can cause downstream systems to execute actions on devices the caller or orchestrator did not intend this skill to control, weakening policy boundaries and increasing the chance of unauthorized actuation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The phrases "つけて" and "にして" are highly underspecified and can occur in ordinary conversation without identifying a device or safe target state. If normalized too aggressively, they could trigger unintended smart-home actions based on stale context or wrong assumptions, which is especially risky for physical device control.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The file defines all device and action aliases exclusively in Japanese text such as 'つけて', '消して', and '電気', with no indication that the skill is intentionally limited to a Japanese locale or that users can opt into another language. Per the policy, forcing a specific language without user choice or clear justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest limits the skill's stated purpose to Japanese smart-home commands for lights and air conditioners. This file expands supported intents to additional device classes (curtain and tv), which is broader than the declared behavior and changes what intents the normalizer can emit.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The normalization and intent-detection rules are built around Japanese phrases and transliterations, and there is no visible natural-language indication in this file that the skill is limited to Japanese users or that users can choose another language/locale. Under the policy, forcing a specific language without opt-in is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest says this skill normalizes Japanese smart-home commands specifically for lights and air conditioners. However, deriveIntent also emits intents for curtains and TVs, expanding the skill's actual device scope beyond the declared purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The package name explicitly identifies the skill as "japanese-smart-home-command-normalizer," which indicates a Japanese-only language scope. In this file there is no accompanying natural-language justification or indication that users can choose another language, so it may violate the language/locale policy for unrestricted skills.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
79% confidence
Finding

SQP-3 applies to all file types, including markdown. The trigger definitions are entirely in Japanese and do not indicate that language selection is optional or configurable, which can violate a policy requiring user choice for language or locale.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Single-word commands like 「つけて」 and 「消して」 are underspecified and can overlap across multiple devices or casual speech, especially after STT normalization. Without documented scope constraints, the normalizer may produce incorrect structured intents that turn devices on or off unintentionally.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The air-conditioner action mapping uses very broad phrases like 「つけて」 and especially 「して」 for set_mode, which can match many ordinary utterances and create unsafe intent resolution. In a smart-home control context, this increases the chance of issuing the wrong device command or changing HVAC state from noisy or incomplete STT output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
85% confidence
Finding

The note states that the hook should not own a giant Japanese regex table, which indicates language-specific behavior baked into the skill design. This appears to constrain handling to a specific language without any nearby user choice, opt-in, or documented region-specific justification.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.