Back to skill

Security audit

Wake Up

Security checks for vulnerabilities and agentic risk

Overview

The skill does what it says, but it asks an agent to use a Solana signing key for automatic paid API calls without strong local payment limits or endpoint constraints.

Review carefully before installing. Use only a dedicated low-balance Solana wallet, do not use a primary wallet, keep the default wake.meup.ai endpoint unless you fully trust another endpoint, and avoid putting sensitive personal details in hints. Treat every verification and scheduled call as a paid third-party action that shares your phone number and schedule details with the service.

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

Error
Location
scripts/wake-cli.py:94
Finding

Automatic x402 Payment Signing Without Local Transaction Constraints

Content
View full analysis
int: """Run the verify flow: POST /verify, then poll until resolved.""" signer = load_signer(args.keypair) log(f"Signer address: {signer.address}") x402 = x402Client() register_exact_svm_client(x402, signer) async with x402HttpxClient(x402, base_url=args.base_url) as client: # Step 1: POST /api/v1/verify log(f"POST {args.base_url}/api/v1/verify") resp = await client.post( "/api/v1/verify", json={"phone": args.phone}, ) ``` ```python async def cmd_schedule(args: argparse.Namespace) -> int: """Run the schedule flow: POST /schedule.""" signer = load_signer(args.keypair) log(f"Signer address: {signer.address}") x402 = x402Client() register_exact_svm_client(x402, signer) body = { "phone": args.phone, "times": args.time, "voice": args.voice, } if args.hints: body["hints"] = args.hints async with x402HttpxClient(x402, base_url=args.base_url) as client: log(f"POST {args.base_url}/api/v1/schedule") resp = await client.post("/api/v1/schedule", json=body) ``` ```python parser.add_argument( "--base-url", default="https://wake.meup.ai", help="Base URL for the Wakeup API (default: https://wake.meup.ai)", ) ``` ### Technical Analysis The client registers a funded Solana keypair with the x402 client and then permits the HTTP client to handle payment negotiation automatically. No application-level control verifies the payment recipient, USDC mint, Solana network, transaction amount, or cumulative expenditure before a signature is produced. The documentatio ...[truncated 1879 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/wake-cli.py:2
Finding

Security-Sensitive Dependencies Are Resolved from Mutable Version Ranges

Content
View full analysis
=3.11" # dependencies = ["x402[svm]>=2.0.0,<3", "httpx>=0.27,<1"] # /// ``` ### Technical Analysis The script uses PEP 723 dependency metadata with broad version ranges. Running it through `uv run` may resolve and install any future package release satisfying those ranges. The project does not include a lockfile or hash-pinned dependency manifest in the audited directory. This is security-sensitive because the `x402` package and its transitive dependencies execute in the same Python process that loads the Solana keypair and creates payment signatures. A newly published, compromised, or otherwise unsafe version within the accepted range could therefore access key material, alter payment proposals, redirect requests, or exfiltrate signatures. This finding does not establish that the currently available packages are malicious. The vulnerability is the lack of reproducible and integrity-constrained dependency selection for components trusted with wallet-signing authority. ### Attack Path 1. An attacker compromises an allowed direct or transitive dependency release, or gains the ability to publish a malicious version within the accepted range. 2. A victim runs the script in an environment where that version is selected during dependency resolution. 3. The dependency is downloaded and imported into the client process. 4. Its initialization or runtime code executes with the permissions of the user running the script. 5. The malicious dependency can inspect process data, access files available to the process, intercept the loaded keypair or payment flow, and transmit sensitive material using the process's network access. ### Impact Assessment Exploitation occurs with the operating-system privileges of th ...[truncated 569 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill instructs use of environment variables, local keypair files, and outbound network access, but it does not declare an explicit tool scope or permissions boundary. That creates an avoidable least-privilege gap: an agent/runtime may grant broader capabilities than necessary, increasing the blast radius if the skill is misused or if later content becomes malicious.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill encourages sending personalized hints and states that the AI remembers past calls, but it does not prominently warn that this personal context is sent to and potentially retained by a third-party service. Because the examples include sensitive profile details and preferences, users may unknowingly disclose personal information that persists beyond the immediate transaction.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger conditions are broad enough to activate for generic requests about alarms, morning routines, or being called, which can route users into a third-party telephony and payment workflow without sufficiently clear narrowing. In context, that increases the chance of unnecessary collection of phone numbers, transmission of personal details, and initiation of paid actions when a simpler local reminder would have sufficed.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
80% confidence
Finding

The script reads a Solana keypair from disk or environment-derived path and uses it to authorize x402 payment flows. While the code documents the file format, it does not clearly warn users that this credential is sensitive and will be used to sign payment-related transactions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

This code sends a user's phone number to the wake.meup.ai API during verification, and similar transmission occurs for scheduling requests. Although the script logs the endpoint being called, it does not clearly warn users that personal data and optional contextual hints will be sent to a third-party service.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
77% confidence
Finding

The manifest describes scheduling wake-up calls, phone verification, voice selection, and x402 USDC payment, but does not mention reading local environment variables for credentials. While payment support is in scope, sourcing a signing key from SOLANA_KEYPAIR_PATH is an extra capability that is not clearly justified by the stated end-user purpose and expands access to local secret material.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.