Back to skill

Security audit

realtime-interact-overlay

Security checks for vulnerabilities and agentic risk

Overview

This skill is intended for confirmations and popups, but its password and browser modes can expose sensitive input or unsafe page scripts.

Review before installing. Use this only for low-risk confirmations unless it is fixed; do not enter passwords, payment codes, API keys, recovery phrases, or other secrets. Avoid injecting its browser JavaScript into logged-in or sensitive pages until message rendering is changed to literal text and the browser confirmation result flow is fully implemented.

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
scripts/browser_modal.py:108
Finding

DOM-based cross-site scripting through unsanitized modal messages

Content
View full analysis
'); # ... }})(); ''' ``` ### Technical Analysis The modal message is derived from the command-line-controlled `message` argument. The implementation escapes selected JavaScript string characters, but it does not apply HTML escaping or sanitization before assigning the value to `innerHTML`. JavaScript string escaping and HTML sanitization address different parsing contexts. Consequently, an input containing HTML elements and event handlers can be parsed as active markup when the generated JavaScript is injected into a browser page. For example, a malicious message can contain an image element with an error handler. When the browser parses that message through `innerHTML`, the handler may execute in the security context of the active page. The title uses `textContent` and is not affected by this specific flaw. The message should use the same safe rendering approach. Exploitation requires the generated JavaScript to be executed in a browser page, as intended by the Skill's browser mode. Content Security Policy and the browser injection mechanism may constrain individual payloads, but they do not make the unsafe sink secure. ### Attack Path 1. An attacker causes untrusted content to be used as the modal `--message`, such as content copied from a ...[truncated 1502 chars]
Remediation
View remediation
` tags through HTML parsing. 3. If formatted HTML is an explicit product requirement, sanitize it with a well-maintained HTML sanitizer and a strict allowlist. Disallow scripts, event-handler attributes, dangerous URL schemes, embedded frames, and active SVG or MathML content. 4. Serialize Python values into JavaScript with `json.dumps()` rather than implementing partial JavaScript-string escaping manually. This protects the JavaScript-string context, although HTML sanitization or `textContent` is still required separately. 5. Treat modal titles, messages, defaults, and options as untrusted data regardless of whether they originate from command-line arguments, websites, files, or Agent-generated content. 6. Add security tests using payloads containing event handlers, closing tags, SVG constructs, quotes, backticks, Unicode line separators, and multiline content. Verify that all payloads are displayed literally and never interpreted as markup. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/macos_dialog.py:67
Finding

Sensitive input is visibly displayed and can be emitted as plaintext

Content
View full analysis
1: raw_value = parts[1].strip() result["value"] = sanitize_input(raw_value) else: result["value"] = sanitize_input(output) # ... if args.json: print(json.dumps(result, ensure_ascii=False, indent=2)) ``` The browser modal always creates a text input rather than a password input: ```html ``` The browser implementation also returns the entered value directly: ```javascript confirmBtn.onclick = function() { var value = input.value; m ...[truncated 2984 chars]
Remediation
View remediation
Vulnerability Patterns
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • 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
94% confidence
Finding

The documented behavior claims trusted real-time confirmation and password/input collection via system or browser popups, but the file only describes partial/manual mechanisms and lacks a clear authenticated result-return path. That mismatch is dangerous because downstream agents or users may rely on confirmations that are not actually enforced, enabling accidental execution of sensitive actions without a reliable user-approved control point.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
87% confidence
Finding

The skill explicitly instructs use of shell commands to invoke local Python scripts, but it declares no tool scope or allowed-tools boundary. In an agent environment, undeclared shell capability weakens least-privilege controls and can let a seemingly simple UI skill trigger broader local execution than reviewers or policy engines expect.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The natural-language content of the skill, including its description and operating instructions, is presented only in Chinese. Under the policy, forcing a specific language without user opt-in or a documented justification is a language/locale policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The HTML document declares lang="zh-CN", and all visible UI text in the demo is presented in Chinese. This creates a natural-language locale constraint with no user opt-in, alternate language path, or documented region-specific justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The module docstring and later CLI/help text are written only in Chinese, which imposes a specific language on users. The policy for this audit flags language/locale restrictions unless the skill provides user opt-in or clearly documents that it is intended for a specific region or language context.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/interact.py (reported line 32)May include surrounding context.

python
cmd.extend(["--options", options])
    
    try:
        result = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
        if result.returncode == 0:
            return json.loads(result.stdout)
        else:

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file’s natural-language UI and help text are written in Chinese, including the module description and later user-facing argument descriptions and dialog button labels. Because the skill does not offer any language selection or explain that it is intentionally region-specific, it imposes a locale choice on users without opt-in.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

When --hidden is requested, the code claims to provide password-style concealed entry, but the generated AppleScript still uses a normal display dialog with visible input. In this skill's context, that can expose passwords or other secrets entered during payment or confirmation flows to shoulder-surfing, screen recording, or other local observation.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/macos_dialog.py (reported line 117)May include surrounding context.

python
"""执行 AppleScript 并返回结果"""
    try:
        # 使用 osascript 执行
        process = subprocess.Popen(
            ['osascript', '-e', script],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,

Static analysis

No suspicious patterns detected.