Back to skill

Security audit

Send Usdc

Security checks for vulnerabilities and agentic risk

Overview

The skill has a clear USDC-sending purpose, but it can execute a mutable external wallet package to move funds and does not give enough built-in transfer safety controls.

Review before installing. Use only with a wallet and funds you are comfortable exposing to this workflow, verify the recipient, resolved ENS address, amount, and Base chain before any transfer, and prefer a version-pinned, reviewed `awal` package or a restricted execution environment. I did not find artifact-backed evidence of intentional deception, persistence, or exfiltration, but the unpinned wallet command and missing confirmation guidance are material risks.

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

T08 · Insecure Dependencies

Error
Location
SKILL.md:6
Finding

Execution of an Unpinned Third-Party npm Package in a Wallet Context

Content
View full analysis
[--chain ] [--json] ``` ### Technical Analysis The skill invokes the third-party `awal` npm package through `npx` using the mutable `@latest` tag. It does not pin an audited version, specify an integrity hash, provide a lockfile, vendor the dependency, or require verification of the downloaded artifact. Consequently, the effective code executed by the skill can change after the skill itself has been reviewed. Each invocation may download and execute whichever package release the npm registry currently identifies as `latest`. This creates a supply-chain trust boundary that is not controlled by the reviewed project. This issue is particularly sensitive because the package is executed in a cryptocurrency-wallet workflow. A compromised package release, compromised publisher account, or registry-level substitution could run attacker-controlled npm lifecycle or command code with the local permissions of the agent process. No evidence in the reviewed file proves that the current `awal` package is malicious. The vulnerability is the unsafe execution of a mutable, externally maintained dependency without version or integrity controls. ### Attack Path 1. An attacker compromises the npm package publisher, package repository, release process, or another relevant distribution component. 2. The attacker publishes a malicious release and causes it to become the package version referenced by `awal@latest`. 3. A user invokes the skill to inspect ...[truncated 1459 chars]
Remediation
View remediation
status npx awal@ send ... npx awal@ balance ``` 2. Update the `allowed-tools` configuration to permit only the pinned package version rather than the mutable `@latest` tag. 3. Use a lockfile and verify npm package integrity metadata. For stronger assurance, download and inspect the package in a controlled build process, then execute only the approved artifact. 4. Configure npm to use an approved registry and apply package provenance or signature verification where supported. 5. Disable or tightly control dependency lifecycle scripts during installation unless they are explicitly required and reviewed. 6. Run the wallet command in a restricted environment with: - Minimal filesystem access. - No unrelated environment variables or credentials. - Restricted network access. - A dedicated, low-privilege operating-system account. 7. Require explicit user confirmation of the resolved recipient address, amount, chain, and fees through a trusted interface immediately before transaction authorization. 8. Review each dependency update before changing the pinned version, and repeat the security audit whenever the approved package artifact changes. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (17)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill lacks an explicit warning that blockchain transfers are irreversible and that incorrect addresses or chains can permanently lose funds. In the context of sending USDC, omission of this warning materially increases the chance of user error leading to unrecoverable financial loss.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding

The third manifest occurrence is still a true positive because each allowed tool path is tied to @latest, not an immutable release. Any compromised update could be invoked by the agent under trusted workflow conditions and affect transfers or wallet state.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The trigger description is broad enough to match common payment-related language, which may cause the skill to activate in contexts where the user did not intend an actual on-chain transfer. In a fund-sending skill, accidental invocation is more dangerous because transfers are irreversible and may lead to unintended payments if the agent proceeds too quickly.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
99% confidence
Finding

The manifest repeatedly authorizes npx awal@latest, so the runtime behavior depends on whatever code is current in the package registry when invoked. In the context of wallet operations, that creates a path for malicious upstream code to run with the skill's trusted authority.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The documentation instructs use of npx awal@latest status, again relying on a mutable upstream package. Even status/auth-related commands in a wallet tool may access credentials, config, or networked state, so unpinned execution still presents meaningful compromise risk.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The command syntax advertises npx awal@latest send ..., normalizing execution of unreviewed future code for an irreversible transfer operation. A hostile package update could silently modify transaction parameters or destination logic before funds are sent.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The example continues to invoke the latest package version for a payment action, preserving the same supply-chain exposure. Because the skill's core purpose is transferring stablecoins, any malicious update could directly result in financial loss.

Content

No source excerpt is available for this finding.

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Content

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

md
## Arguments

| Argument    | Description                                                                                                                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `amount`    | Amount to send: '$1.00', '1.00', or atomic units (1000000 = $1). Always single-quote amounts that use `$` to prevent bash variable expansion. If the number looks like atomic units (no decimal or > 100), treat as atomic units. Assume that people won't be sending more than 100 USDC the majority of the time |
| `recipient` | Ethereum address (0x...) or ENS name (vitalik.eth)                                                                                                                                                                                   |

Whitespace Padding

Medium
Category
Prompt Injection
Confidence
70% confidence
Finding

Large whitespace padding was detected (a block of blank lines or a long run of spaces). This can push injected instructions below or to the right of the visible area so a human reviewer never sees them while the agent still reads them. Manual review of the hidden content is recommended.

Content

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

md
| Argument    | Description                                                                                                                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `amount`    | Amount to send: '$1.00', '1.00', or atomic units (1000000 = $1). Always single-quote amounts that use `$` to prevent bash variable expansion. If the number looks like atomic units (no decimal or > 100), treat as atomic units. Assume that people won't be sending more than 100 USDC the majority of the time |
| `recipient` | Ethereum address (0x...) or ENS name (vitalik.eth)                                                                                                                                                                                   |

## Options

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This example shows npx awal@latest with an ENS recipient, still exposing the workflow to upstream package substitution. Financial actions combined with name resolution add complexity, making trusted, deterministic tooling especially important.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The dollar-prefixed amount example still relies on a mutable package version at runtime. Since users may copy examples directly, this increases the chance that live fund transfers are executed through unverified code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

The JSON-output example invokes npx awal@latest, maintaining the same supply-chain vulnerability. Output format does not reduce risk because the executable code path remains untrusted and can still perform side effects.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
97% confidence
Finding

The ENS-resolution section references automatic behavior dependent on the same unpinned CLI package lineage. If a future version changes resolution or display logic maliciously, users may be misled about the actual destination of transferred funds.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
98% confidence
Finding

This duplicate at the same line reflects another unpinned npx awal@latest reference in the prerequisites. The danger is amplified because users may follow these setup steps before every payment, repeatedly executing mutable remote code.

Content

No source excerpt is available for this finding.

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.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest description broadly frames the skill as sending USDC to an Ethereum address or ENS name, which implies generic Ethereum-network transfers. However, the file documentation says the command transfers USDC on Base and lists base as the default chain, creating a scope mismatch between the advertised behavior and the documented implementation.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The skill documentation gives conflicting instructions about how to verify wallet authentication. One section directs use of npx awal@latest status, while the prerequisites later say npx awal@latest awal status, which is an active contradiction in the documented intent and usage guidance.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.