Back to skill

Security audit

Agent Lifeboat

Security checks for vulnerabilities and agentic risk

Overview

This backup skill needs review because its automatic payments can exceed the advertised daily spending limit.

Disable automatic wallet payments with ESTATE_MAX_SPEND_PER_DAY=0 until signing enforces the remaining daily budget, or consider the documented prepaid card workflow. Use a dedicated low-balance wallet. Only include The Estate's restore key if you accept its access to backed-up credentials. ESTATE_ENV_BUNDLE=off excludes environment secrets, but credentials already in configuration and backup files remain included.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/check.mjs
Finding

Automated spending limit is not enforced against the payment actually signed

Content
View full analysis

Impact

A snapshot budgeted and recorded as $0.01 can authorize a payment above the default $1.50 daily limit, up to the separate $10 ceiling. Subsequent checks continue to calculate remaining allowance from understated ledger entries, permitting further overspending.

Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (10)

Known Vulnerable Dependency: source-map-js==1.2.1 — 1 advisory(ies): CVE-2026-93749 (source-map-js allows event-loop denial of service through indexed source-map sec)

High
Category
Supply Chain
Confidence
80% confidence
Finding

The lockfile includes source-map-js 1.2.1, matching the supplied event-loop denial-of-service advisory involving indexed source maps. An attacker would need a path for a malicious map to reach the affected consumer, potentially hanging a build or development process; this file does not establish that path. The package is development-only, so disruption of the deployed lifeboat or heartbeat service is not demonstrated.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vite==8.2.2 — 6 advisory(ies): CVE-2026-112942 (launch-editor: `fs.existsSync()` existence check can be bypassed on Windows); CVE-2026-112943 (launch-editor: escapeCmdArgs() omits % escaping on Windows); CVE-2026-112945 (Vite: Cross origin script execution through Vite custom middleware) +3 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

Vite 8.2.2 is locked as a development dependency and matches the supplied advisory set, including Windows editor-launch handling and cross-origin script execution through custom middleware. Exploitability depends on the particular advisory, operating system, enabled functionality, and access to the development server; the editor-launch dependency and three additional advisory details are not shown here. A compromised development environment could endanger wallet or snapshot secrets if available there, but the lockfile alone does not demonstrate that exposure.

Content

No source excerpt is available for this finding.

Skill declares no tool scope ('permissions' or 'allowed-tools') but code capabilities were detected: env, network, shell.

Medium
Category
MCP Least Privilege
Confidence
84% confidence
Finding

The skill declares no explicit tool scope despite directing shell execution, dependency installation, wallet-key access, recurring payments, and uploads of backups containing credentials. This is a least-privilege weakness: compromised dependencies or manipulated remote content could abuse any broad permissions inherited from the agent, potentially exposing credentials or spending wallet funds. The backup purpose explains these capabilities but does not constrain them; encryption also does not prevent service-side credential access in estate-restores mode.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @vitest/mocker==5.0.0 — 2 advisory(ies): CVE-2026-112949 (Vitest: Code injection via unauthenticated manual mock registration); CVE-2026-112950 (Vitest: Windows backslash traversal bypasses the @vitest/mocker redirect allowli)

Medium
Category
Supply Chain
Confidence
82% confidence
Finding

The lockfile includes @vitest/mocker 5.0.0, matching the supplied advisories for unauthenticated mock-registration code injection and a Windows traversal bypass. Exploitation would depend on the affected mocking functionality being active and attacker-accessible; its development-only status reduces production exposure but does not protect developer or CI environments. Code execution in an environment holding the skill's wallet or snapshot credentials could have substantial consequences, although neither credential access nor exploit reachability is established by this file.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: hono==4.13.7 — 1 advisory(ies): CVE-2026-109955 (Hono: `serveStatic` decodes the request path a second time, leading to bypass of)

Medium
Category
Supply Chain
Confidence
78% confidence
Finding

Hono 4.13.7 is present and matches the supplied advisory concerning double decoding in serveStatic. If the skill's development or test server uses the affected static-file handler with attacker-controlled paths, crafted requests could bypass intended path restrictions and potentially expose files. Hono is marked development-only, and the lockfile does not demonstrate use of serveStatic, so this is a dependency vulnerability rather than a confirmed reachable disclosure.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: hono==4.13.7 — 1 advisory(ies): CVE-2026-109955 (Hono: `serveStatic` decodes the request path a second time, leading to bypass of)

Medium
Category
Supply Chain
Confidence
70% confidence
Finding

The manifest pins Hono to the version identified by the reported advisory; if affected serveStatic functionality is exposed, double decoding could bypass request-path restrictions and expose otherwise restricted files. Hono is only a development dependency, which reduces likely production exposure, and this manifest does not establish vulnerable API usage or independently verify the advisory. The skill's wallet and snapshot context could increase the consequences of file exposure, but access to those assets is not demonstrated here.

Content

No source excerpt is available for this finding.

The check automatically authorizes snapshots at a guessed price despite documenting that unknown prices require human intervention.

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

When snapshot pricing is missing, malformed, or nonpositive, the policy substitutes $0.01 and can authorize an automatic snapshot instead of requiring human approval. The spending check and ledger use that estimate, while the snapshot action receives no maximum payment amount; unless the downstream payment implementation independently enforces the estimate, a higher actual charge could bypass the daily spending cap. This is particularly relevant for a recurring heartbeat with wallet access, although the provided file does not establish how downstream settlement validates prices.

Content

No source excerpt is available for this finding.

Dependency bootstrap claims lockfile-only, non-floating installation but falls back to an unlocked npm install (L289–L298).

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

If package-lock.json is missing, bootstrapDeps silently falls back to npm install without generating a lockfile, allowing dependency ranges to resolve to unreviewed versions despite the pinned-installation claim. --ignore-scripts blocks lifecycle scripts but does not prevent malicious dependency code from executing when imported; this is especially consequential for a skill that handles wallet keys, agent tokens, and state backups.

Content

No source excerpt is available for this finding.

The skill implements owner-funded card billing despite describing payments exclusively through the agent's own wallet over x402.

Low
Category
Excessive Agency
Confidence
93% confidence
Finding

The manifest explicitly describes paying with the agent's own wallet over x402. In contrast, registerCard creates a wallet-free registration intended for owner card payments, and uploadPrepaidSnapshot consumes that owner-funded credit without an x402 payment. This introduces a materially different funding model and responsible payer, although this code does not itself charge a card.

Content

No source excerpt is available for this finding.

The skill includes an unrelated feedback-submission capability that sends arbitrary text to The Estate.

Low
Category
Excessive Agency
Confidence
94% confidence
Finding

suggest posts caller-provided text and an optional topic to a suggestions endpoint, attaching the agent's identity and authentication token when available. Product-feedback submission is separate from registration, encrypted state backup, heartbeats, coverage, and recovery; it is neither declared in the manifest nor necessary to implement those functions.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.env_credential_access

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/lifeboat.mjs:28