Back to skill

Security audit

WalletChan

Security checks for vulnerabilities and agentic risk

Overview

This skill is coherent for a wallet co-pilot, but it asks users to put a wallet-related operational password into chat and grants broad browser-control access for financial actions.

Review this carefully before installing. Use only a fresh dedicated Chrome profile, keep the debugging port bound to localhost, close it immediately after use, never place unrelated accounts in that profile, and rotate or revoke the Agent Password after a session. Do not share the wallet Master Password. Prefer a workflow where you type the Agent Password directly into the extension yourself instead of pasting it into chat.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:27
Finding

Agent Password Is Transmitted Through the Chat Channel

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:27
Vulnerability Type: Plaintext transmission of a sensitive operational credential
Risk Level: High

Vulnerable Snippet

markdown
| **Agent Password** — a scoped, revocable credential generated inside WalletChan. Unlocks only the review UI (see Security Model). | User-supplied at runtime, in chat, per session. | User pastes it to the agent only when needed. The agent types it into the extension's unlock field and nowhere else. | **Never persisted.** Not an env var, not read from disk, not logged, not echoed. Treated as ephemeral session input. Rotate/revoke in WalletChan Settings any time. |

Technical Analysis

The skill explicitly requires the user to paste the Agent Password into the chat. Chat input is ordinarily transmitted to the agent service and may pass through API gateways, telemetry, abuse-monitoring systems, conversation storage, or third-party model infrastructure. Consequently, the assertion that the credential is never logged or persisted cannot be enforced by this skill.

Although the Agent Password is described as narrower than the wallet Master Password, it is still a security-sensitive credential because it unlocks the wallet's transaction and signature review interface and enables confirmation or rejection of pending requests. Sending it through chat exceeds the minimum privilege required: browser automation can enter a secret supplied through a local secret prompt without exposing the value to the language model or conversation history.

This is also the most likely source of the static pre-scan warning concerning sensitive information sent over the network.

Attack Path

  1. The user follows the skill instructions and pastes the Agent Password into the chat.
  2. The plaintext credential is transmitted through the chat or API infrastructure.
  3. A party with access to conversation records, telemetry, proxy logs, a compromised client, ...[truncated 1180 chars]
Remediation
View remediation

Remediation Suggestions

  • Do not request passwords or other credentials through chat.
  • Use a trusted local secret-entry mechanism that bypasses the model context, such as a browser-side user prompt, OS credential broker, or human-entered extension field.
  • Require the user to type the Agent Password directly into WalletChan while the agent pauses automation.
  • Ensure automation tools receive only a success/failure result and never the plaintext value.
  • Remove claims such as “never logged” unless the complete transport and processing path technically enforces that property.
  • Use short-lived, single-session authorization tokens bound to a specific browser instance and intended transaction where possible.
  • Automatically revoke or expire operational credentials after use and provide the user with a visible session-termination control.
  • Document that conversation services may retain submitted content and explicitly prohibit entering either the Master Password or Agent Password into chat.

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
SKILL.md:25
Finding

Remote Debugging Grants Broad Browser Privileges Beyond the Wallet Workflow

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:25, 76, 125
Vulnerability Type: Excessive browser automation privileges through Chrome DevTools Protocol
Risk Level: Medium

Vulnerable Snippets

markdown
| **Chrome with remote debugging** on a localhost port (commonly `9222`). Must be bound to **localhost only** — never exposed to the network. | User's own machine. Setup instructions: [walletchan-skill repo](https://github.com/apoorvlathey/walletchan-skill). | User launches Chrome with the port flag using a dedicated profile, before invoking the skill. | Not applicable — local Chrome process. |
markdown
CDP is the standard browser-automation protocol that powers Chrome DevTools, Puppeteer, Playwright, and every modern browser-testing framework. It lets an external process drive tabs, click elements, and read page content in a browser the **user already owns and controls**. It does not grant the agent any capability beyond "interact with the UI of my own browser." The user opens Chrome; the agent drives the UI the user is already watching.
markdown
1. **Chrome with remote debugging enabled.** Standard developer setup — Chrome is launched with a debugging port open (commonly `9222`) using a dedicated user profile. This is the same mechanism DevTools / Puppeteer / Playwright use. Setup instructions live on the [walletchan-skill repo](https://github.com/apoorvlathey/walletchan-skill). The agent connects to that port; it does not launch the browser.

Technical Analysis

Chrome DevTools Protocol is a privileged browser-control interface. A client with access to the debugging endpoint can generally enumerate and control targets, inspect page contents, execute JavaScript in page contexts, observe network activity, and interact with browser storage available to those contexts. Its authority is broader than the specific WalletChan tab and is not accurately characterized as merely equivalent to ordi ...[truncated 2214 chars]

Remediation
View remediation

Remediation Suggestions

  • Continue requiring loopback-only binding, but provide an explicit verified launch command and a check that rejects non-loopback exposure.
  • Use a fresh, disposable browser profile containing no unrelated accounts, cookies, extensions, or browsing sessions.
  • Start the debugging instance only for the duration of the task and terminate it immediately afterward.
  • Prefer a constrained local automation broker that exposes only allowlisted operations for the WalletChan extension and approved dapp origins.
  • Restrict accessible target IDs and reject navigation to origins outside the user-approved allowlist.
  • Require user presence for transaction confirmation and have the user click the final confirmation control directly where feasible.
  • Use random, ephemeral debugging endpoints or authenticated transport where supported rather than a stable, predictable port.
  • Correct the documentation to state that CDP is a privileged browser-control interface, not merely an ordinary UI interaction channel.
  • Detect unexpected tabs, extensions, or CDP clients and stop the workflow if the browser environment changes.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:13
Finding

Installation Instruction Retrieves an Unpinned Mutable Dependency

Content
View full analysis

Vulnerability Details

File Location: SKILL.md:13
Vulnerability Type: Unpinned third-party skill installation
Risk Level: Medium

Vulnerable Snippet

markdown
> **Install via [skills.sh](https://skills.sh):** `npx skills add apoorvlathey/walletchan-skill`

Technical Analysis

The installation command does not pin the skills CLI to a specific version and identifies the WalletChan skill by a mutable repository-style name rather than an immutable commit or verified artifact digest. Running npx may download and execute the currently resolved CLI package. The installed skill content may likewise change after this audit.

This creates a supply-chain trust gap: the effective installer and installed payload are not necessarily the same versions that were reviewed. Compromise of the package registry account, repository, release channel, or upstream maintainer could replace a benign payload with malicious instructions or executable content.

The audited file only recommends the command; it does not automatically execute it. Therefore, exploitation requires a user or agent to follow the installation instruction.

Attack Path

  1. An attacker compromises the package or repository used by the installation chain, or publishes a malicious future version through an authorized account.
  2. The attacker adds malicious skill instructions, scripts, credential collection, or browser automation behavior.
  3. A user runs the documented unpinned npx skills add apoorvlathey/walletchan-skill command.
  4. npx resolves the current CLI package, and the installer retrieves the current mutable skill payload.
  5. The malicious version executes during installation or is loaded in a later agent session with the permissions available to the skill environment.

Impact Assessment

Impact depends on the behavior and permissions of the resolved installer and payload. A compromised release could potentially modify local fi ...[truncated 362 chars]

Remediation
View remediation

Remediation Suggestions

  • Pin the skills CLI to a reviewed exact version rather than allowing npx to resolve the latest release.
  • Pin the installed skill to an immutable Git commit or signed release.
  • Publish and verify a cryptographic digest for the complete installed artifact.
  • Use package-manager lockfiles and integrity metadata where applicable.
  • Require signed releases and protect maintainer accounts with hardware-backed multifactor authentication.
  • Review the resolved package contents before installation and prohibit lifecycle scripts unless explicitly required.
  • Document the exact expected source, version, commit, and checksum so users can verify the artifact independently.
  • Re-audit each upgraded version instead of treating the mutable upstream name as equivalent to the reviewed file.
Vulnerability Patterns
  • 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
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (1)

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.