Back to skill

Security audit

Windows TTS Notification

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says: sends user-provided text to a configured Windows TTS server, with some privacy and local-network setup risks users should understand.

Install only if you control the Windows TTS server and network. Avoid sending private medical, financial, credential, or sensitive household details through TTS, prefer HTTPS or authentication if supported, keep the server off the public Internet, and review any heartbeat or cron reminders before enabling automated broadcasts.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
client.ts:87
Finding
Unauthenticated Plaintext Transport for TTS Commands<![CDATA[ ## Vulnerability Details **File Location**: `client.ts:87-94`; related configuration examples in `SKILL.md:33, 53, 79` and validation in `config.ts:9-16` **Vulnerability Type**: Unauthenticated and unencrypted network communication **Risk Level**: Medium ### Vulnerable Code ```typescript response = await fetch(`${this.baseUrl}${path}`, { method, headers: { "Content-Type": "application/json" }, body: body === undefined ? undefined : JSON.stringify(body), signal: controller.signal }); ``` The documentation explicitly promotes a plaintext HTTP endpoint: ```json { "url": "http://192.168.1.60:5000", "defaultVoice": "zh-CN-XiaoxiaoNeural", "defaultVolume": 1.0, "timeout": 10000 } ``` ### Technical Analysis The HTTP client sends TTS text and control commands without authentication headers or a transport-level client identity. The documented configuration uses plaintext HTTP, meaning message contents and control requests are not protected for confidentiality or integrity while crossing the network. Although the service is intended for a local network, local networks should not be assumed trustworthy. A compromised wireless client, malicious LAN participant, or attacker controlling network infrastructure could observe or manipulate traffic. If the TTS server is reachable directly, the lack of application-layer authentication may also permit unauthenticated requests without intercepting an existing connection. The affected operations include: - `POST /play_tts`, containing arbitrary text, voice, and volume data - `POST /volume`, changing playback volume - `GET /status` - `GET /voices` No operating-system or OpenClaw privilege escalation is provided by this issue. The obtainable capability is limited to the network-accessible TTS service and the confidentiality and integrity of messages sent to it. ### Attack Path 1. A user configures the plugin with the documented `http://<windows-ip>:5000` endpoint. 2. The plugin sends a remind ...[truncated 1030 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require HTTPS for non-loopback endpoints and reject plaintext HTTP by default. 2. Permit HTTP only through an explicit development or trusted-LAN override accompanied by a security warning. 3. Add application-layer authentication, such as a bearer token or request signing: ```typescript headers: { "Content-Type": "application/json", "Authorization": `Bearer ${config.apiToken}` } ``` 4. Prefer mutual TLS when the TTS server supports it, particularly on shared or enterprise networks. 5. Validate that the configured URL uses only the `https:` protocol, or narrowly allow `http:` for loopback/private-network use when explicitly requested. 6. Configure the TTS service firewall to accept connections only from the OpenClaw host. 7. Apply authentication and authorization checks on the server to all status, voice, playback, and volume endpoints. 8. Avoid logging TTS text or authentication credentials, because reminder content may contain private information. 9. Document the network trust assumptions and warn users not to expose the service directly to the Internet. ]]>

T08 · Insecure Dependencies

Note
Location
package-lock.json:18
Finding
Build Dependencies Retrieved from a Non-Official Registry Mirror<![CDATA[ ## Vulnerability Details **File Location**: `package-lock.json:18, 28, 42`; installation instruction in `SKILL.md:41` **Vulnerability Type**: Third-party dependency source and supply-chain trust risk **Risk Level**: Low ### Vulnerable Configuration ```json "node_modules/@types/node": { "version": "25.5.0", "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.5.0.tgz", "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", "dev": true, "license": "MIT", "dependencies": { "undici-types": "~7.18.0" } }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0" } ``` The same mirror is used for `undici-types` at `package-lock.json:42`. ### Technical Analysis The lockfile resolves build dependencies through `registry.npmmirror.com` rather than the official npm registry. This expands the software supply-chain trust boundary to include the mirror and its distribution infrastructure. The lockfile includes SHA-512 integrity hashes, which materially reduce the risk of transparent artifact substitution. Consequently, this is not evidence that the listed packages are malicious, and no malicious dependency behavior was identified during the audit. The residual concern is that a compromised mirror combined with an unauthorized lockfile change, or an improperly reviewed dependency update, could introduce altered build-time code. The affected dependencies are development dependencies. They execute in the context of installation or compilation and therefore receive the permissions of the user or CI worker running npm. No install hooks are declared by this project, and the reviewed `package.json` contains only TypeScript build, watch, and type-check s ...[truncated 1441 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Regenerate the lockfile using the official npm registry: ```bash npm config set registry https://registry.npmjs.org/ rm -rf node_modules package-lock.json npm install ``` 2. Review the resulting dependency versions and lockfile changes before committing them. 3. Use `npm ci` in CI and documented production builds so installation exactly follows the reviewed lockfile. 4. Retain package integrity hashes and fail builds if integrity verification fails. 5. Pin critical build-tool versions rather than relying solely on broad compatible version ranges. 6. Run dependency installation and compilation in an isolated, least-privileged environment without unnecessary publishing or production credentials. 7. Add automated dependency auditing and lockfile review to the release process. 8. If a mirror is operationally required, document it as a trusted dependency, restrict changes to the registry configuration, and independently verify mirrored artifacts against the official registry. ]]>
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • 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
Findings (33)

Tool Parameter Abuse

High
Category
Tool Misuse
Content
clawhub uninstall windows-tts

# 手动删除
rm -rf /home/cmos/.openclaw/extensions/windows-tts
```

## 更新
Confidence
90% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tool Parameter Abuse

High
Category
Tool Misuse
Content
clawhub uninstall windows-tts

# 手动删除
rm -rf /home/cmos/.openclaw/extensions/windows-tts
```

## 更新
Confidence
90% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The declared purpose describes an end-user messaging and audio output skill involving Azure TTS and Bluetooth speakers. The actual code chunk is only a TypeScript declaration file for configuration typing and validation. Based on the supplied code, the primary described functionality is not represented at all. While config validation could be a supporting implementation detail, this chunk by itself does not evidence any of the advertised capabilities, so the description does not accurately match the observed behavior.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared purpose describes a concrete end-user notification/audio broadcasting skill. However, the supplied code chunk is only a type declaration for a validation function in `guards.d.ts`. This indicates configuration/schema checking behavior, not text-to-speech delivery or Bluetooth broadcasting. Based on the supplied code, the actual behavior is materially different from the description, so this is a mismatch.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The declared description says the skill sends text notifications to Azure TTS for Bluetooth audio broadcast. However, the supplied code does not implement notification delivery, text-to-speech, Azure integration, Bluetooth communication, alarms, or announcements. It is solely a deployment/publishing script for releasing the skill to ClawHub. That is a materially different primary purpose, so this is a clear mismatch.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The documentation describes reminders and notifications but does not clearly warn that reminder text is transmitted over the network to a separate Windows TTS server at a specific LAN address. Users may unknowingly send private family, medical, or scheduling information to another host, increasing privacy risk and the chance of interception or mishandling.

Vague Triggers

Medium
Confidence
89% confidence
Finding
The invocation examples encourage broad natural-language triggering such as asking an agent to 'remind the child to do homework' without defining scope, authorization, or confirmation boundaries. In an agent ecosystem, this can cause unintended TTS broadcasts, prompt-trigger abuse, or misuse by other agents/users who can induce announcements containing sensitive or disruptive content.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 测试连接
curl -X POST http://192.168.1.60:5000/play_tts \
  -H "Content-Type: application/json" \
  -d '{"text": "测试"}'
```
Confidence
80% confidence
Finding
The example explicitly sends text via HTTP POST to a separate host on the local network, demonstrating external transmission of user-supplied content. Because the transport shown is plain HTTP and the content may include personal reminders, anyone with local network visibility or access to the target service could observe or misuse the transmitted data.

Natural-Language Policy Violations

Medium
Confidence
84% confidence
Finding
The installation and usage instructions are presented entirely in Chinese, which can amount to a language policy issue when the skill documentation forces a specific language without user choice. The file does not indicate that Chinese is optional, nor does it offer an alternative locale version.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The documentation includes a direct token-based login example using `clawhub login --token YOUR_API_TOKEN`, but it does not warn that passing secrets on the command line can expose them through shell history, terminal logging, or process inspection. In a publishing workflow, this increases the chance that a real registry credential is unintentionally leaked during normal operator use.

Missing User Warnings

Medium
Confidence
86% confidence
Finding
The publishing summary promotes LAN-wide voice broadcast and family reminder use cases but does not warn that spoken content may be overheard by unintended listeners nearby or on connected speakers. In this skill context, announcements may contain sensitive household information such as medication reminders, schedules, or personal names, so missing privacy guidance increases the risk of accidental disclosure.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
This markdown file is natural-language documentation, and it consistently forces a single language/locale for all instructions and user-facing content. Under the policy, language-specific guidance should either offer user opt-in/choice or clearly document a justified regional constraint, neither of which appears here.

Natural-Language Policy Violations

Medium
Confidence
88% confidence
Finding
The README centers the workflow around Chinese reminder content and zh-CN voices, and the operational examples are all presented in Chinese. Although English voices are listed later, the skill does not state that users may choose their preferred language or that the Chinese locale is an intentional region-specific constraint.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
This markdown file documents a network call to a local HTTP endpoint using curl, which transmits reminder content over the network. The surrounding text presents it as a quick test but does not warn that reminder content will be sent to another device/service or mention any privacy considerations.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 测试 TTS 连接
curl -X POST http://192.168.1.60:5000/play_tts \
  -H "Content-Type: application/json" \
  -d '{"text": "测试一下,这里是跨设备自动播报系统。"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
```bash
# 测试 TTS 连接
curl -X POST http://192.168.1.60:5000/play_tts \
  -H "Content-Type: application/json" \
  -d '{"text": "测试一下,这里是跨设备自动播报系统。"}'
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Lp3

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding
The skill clearly describes network communication with a Windows-hosted HTTP TTS server, but it does not declare any explicit tool scope such as permissions or allowed-tools. This creates a transparency and policy-enforcement gap: an agent or platform may permit undeclared network access, and users are not clearly warned that their text will be transmitted off-host to another machine for playback.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The skill encourages sending reminder text to a Windows HTTP endpoint for immediate audible playback, but the user-facing description lacks a clear warning about transmission over the network and the privacy implications of speaking messages aloud. This can expose sensitive household, medical, or scheduling information to interception on the network or unintended listeners in the physical environment.

Natural-Language Policy Violations

Medium
Confidence
91% confidence
Finding
The client defaults to "zh-CN-XiaoxiaoNeural", which implicitly fixes output to a Chinese locale when the user does not choose a voice. This is a natural-language locale constraint with no opt-in or documented justification in the file.

Missing User Warnings

Medium
Confidence
83% confidence
Finding
The notify method sends input.text, voice, and volume to a remote service via POST /play_tts. In this file there is no confirmation prompt, logging, comment, or docstring disclosing that user-provided content is transmitted over the network.

Natural-Language Policy Violations

Medium
Confidence
95% confidence
Finding
The client hard-codes `zh-CN-XiaoxiaoNeural` as the default voice, which imposes a specific language/locale choice when the caller does not supply one. This is a natural-language policy concern because the skill does not offer an explicit opt-in or neutral default for language selection.

Natural-Language Policy Violations

Medium
Confidence
92% confidence
Finding
The manifest sets the default voice to "zh-CN-XiaoxiaoNeural", which implicitly forces Chinese locale output unless the user overrides it. This is a natural-language locale policy concern because the skill does not indicate any user choice or opt-in for language selection.

Natural-Language Policy Violations

Medium
Confidence
94% confidence
Finding
The manifest hard-codes `zh-CN-XiaoxiaoNeural` as the default voice, which imposes a specific language/locale choice on users. The file does not indicate that users are asked to opt in to this locale or that the skill is intentionally limited to a Chinese-language context.

Natural-Language Policy Violations

Low
Confidence
88% confidence
Finding
This markdown file contains user-facing instructional content exclusively in Chinese, and nowhere indicates that users may choose another language or that the guide is intentionally limited to a Chinese-speaking audience. Under the language/locale policy, forcing a specific language without opt-in can be a natural-language policy violation.

Missing User Warnings

Low
Confidence
79% confidence
Finding
This markdown file includes direct instructions to edit `/home/cmos/.openclaw/openclaw.json` and copy files into `/home/cmos/.openclaw/extensions`, which affect local application configuration and filesystem state. The guide does not include any warning to back up existing configuration or note that these changes modify the user's local OpenClaw setup.

Static analysis

Detected: suspicious.destructive_delete_command

Documentation contains a destructive delete command without an explicit confirmation gate.

Warn
Code
suspicious.destructive_delete_command
Location
INSTALL.md:211