Back to skill

Security audit

WTT Plugin

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real WTT channel plugin, but it needs Review because it combines persistent remote connectivity, automatic task/media processing, and credential handling with insufficient scoping and disclosure.

Install only if you trust the WTT service and publisher, can tolerate a persistent gateway plugin that handles remote messages and tasks, and are prepared to pin a reviewed version, restrict media fetching/egress, and protect or rotate WTT tokens. Pay particular attention to automatic task execution and plaintext credential storage before enabling it on a host with sensitive local network access or shared filesystem access.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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 (5)

T09 · Insecure Skill Coding Practices

Error
Location
src/channel.ts:1291
Finding

WTT Authentication Token Exfiltration Through Attacker-Controlled Media URLs

Content
View full analysis
{ const url = String(urlRaw || "").trim().replace(/[),.;]+$/, ""); if (!url) return; if (!/^https?:\/\//i.test(url) && !/^\/?.*media\/[0-9a-f-]{16,}/i.test(url)) return; if (mediaUrls.includes(url)) return; mediaUrls.push(url); mediaTypes.push("image/png"); }; ``` ```ts async function downloadInboundMediaToLocal(params: { url: string; account: ResolvedWTTAccount; maxBytes: number; timeoutMs: number; }): Promise<{ path: string; contentType?: string; bytes: number }> { const headers: Record = { Accept: "image/*,*/*;q=0.8", }; if (params.account.token) { headers.Authorization = `Bearer ${params.account.token}`; headers["X-Agent-Token"] = params.account.token; } const controller = new AbortController(); const timeout = setTimeout(() => controller.abort(), Math.max(1000, params.timeoutMs)); let response: Response; try { response = await fetch(params.url, { method: "GET", headers, redirect: "follow", signal: controller.signal, }); } finally { clearTimeout(timeout); } ``` ```ts if (originalMediaUrls.length > 0) { indexedTopicMedia = await materializeInboundMediaForContext({ mediaUrls: originalMediaUrls, mediaTypes: originalMediaTypes, account: params.account, accountId: params.accountId, preferThumbnail: true, log: params.log, }); } ``` ### Technical Analysis The plugin extracts absolute HTTP or HTTPS URLs from inbound message text and recursively inspected message metadata. These URLs are later passed to the media downloader. The downloader adds the configured WTT toke ...[truncated 1806 chars]
Remediation
View remediation

other

Error
Location
bin/openclaw-wtt-topic-memory-backfill.mjs:227
Finding

Server-Side Request Forgery Through Runtime and Backfill Media Downloads

Content
View full analysis
controller.abort(), Math.max(1000, opts.timeoutMs)); try { const resp = await fetch(url, { method: "GET", redirect: "follow", signal: controller.signal, headers: { Accept: "image/*,*/*;q=0.8" }, }); if (!resp.ok) { throw new Error(`http_${resp.status}`); } ``` The runtime uses the equivalent unrestricted request pattern: ```ts response = await fetch(params.url, { method: "GET", headers, redirect: "follow", signal: controller.signal, }); ``` ### Technical Analysis Both media-download implementations accept arbitrary HTTP and HTTPS URLs. Neither implementation checks the destination hostname, port, resolved IP address, or redirect target. Timeout and response-size limits constrain resource consumption but do not prevent requests to localhost, private networks, link-local services, or cloud instance metadata endpoints. Content type is examined only after the request has already reached the destination. The runtime path is reachable through inbound WTT message content and metadata. The backfill utility processes URLs already stored in topic-memory files whenever downloading is enabled. ### Attack Path 1. An attacker inserts a media-like ...[truncated 1124 chars]
Remediation
View remediation

T01 · Skill Instruction Hijacking

Error
Location
src/runtime/task-executor.ts:1458
Finding

Backend-Controlled Tasks Are Automatically Dispatched as Agent Instructions

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/runtime/task-executor-persistence.ts:267
Finding

Authentication Tokens Are Persisted in Plaintext Without Explicit Owner-Only Permissions

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
SKILL.md:25
Finding

Onboarding Installs an Unpinned Plugin Version

Content
View full analysis
--token --cloud-url https://www.waxbyte.com ``` ### Technical Analysis The documented installation command does not specify a package version or immutable integrity value. It therefore installs whichever version is current when onboarding occurs rather than the version represented by the audited source tree. The repository's lockfile constrains build dependencies for this source checkout, but it does not pin the version installed by the documented `openclaw plugins install @cecwxf/wtt` command. No evidence of dependency confusion, typosquatting, remote shell piping, or a currently malicious registry dependency was identified. The risk is that future package publication or registry-account compromise can alter the effective code installed after this audit. ### Attack Path 1. A user follows the onboarding instructions at a later date. 2. The package registry resolves `@cecwxf/wtt` to the latest available release. 3. A compromised publisher account or malicious future release provides code different from the audited artifact. 4. OpenClaw installs and enables that code. 5. The gateway restart loads the changed plugin with access to configured Agent credentials and channel capabilities. ### Impact Assessment A compromised package release could execute with the privileges granted to the OpenClaw plugin process, including access to channel configuration, credentials, network communication, local state, and Agent integration APIs. This is a supply-chain hardening weakness rather than evidence that the currently locked dependencies are malicious. ]]>
Remediation
View remediation
Vulnerability Patterns
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (86)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

A persistent websocket connection with bidirectional messaging, topic operations, p2p messaging, auto-reconnect, heartbeats, decryption, and transmission of E2E key material is a highly privileged communications runtime. Misdescribing it as simple plugin installation/bootstrap is especially dangerous because it downplays ongoing network exposure, sensitive content handling, and secret-management risk.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access, suspicious.exposed_secret_literal

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
bin/openclaw-wtt-bootstrap.mjs:150

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
index.ts:40

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
src/commands/update.ts:16

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
bin/openclaw-wtt-topic-memory-backfill.mjs:14

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
src/channel.ts:207

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
src/channel.ts:219

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
test_plugin_e2e.mjs:57