Back to skill

Security audit

beancount-init

Security checks for vulnerabilities and agentic risk

Overview

This skill needs review because its local-only description conflicts with instructions to access existing online financial ledgers.

Resolve the hosted-ledger scope conflict before relying on this skill for local-only setup. Use a fresh directory and explicitly exclude online-ledger access and cloning. Expect persistent local agent instructions and optional Fava dependencies. The supplied static scan reported no findings, and the artifacts do not establish malicious intent.

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

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The supplied command performs transaction entry, not ledger initialization, validation, or Fava setup. Although the snippet does not establish whether the ledger is already populated, its trade-recording behavior is an undeclared capability and is not shown to be a supporting step for scaffolding.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The command performs an applied import, not ledger initialization or validation. Importing exports is explicitly outside the declared scope, and --apply makes this a modifying operation rather than a preview or supporting setup step.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The command performs a bookkeeping write through add transaction; it does not initialize a ledger, validate one, or configure Fava. Transaction entry is a distinct capability not declared in the setup-only description. The snippet does not establish whether the target ledger is populated, but its transaction-writing behavior is sufficient to identify a mismatch.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The supplied command performs data import rather than ledger initialization or validation. Its export input and CSV mapping options indicate an import workflow that the description explicitly says to skip. This is a substantive capability mismatch, not a supporting implementation detail.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The supplied command performs price maintenance rather than scaffolding or validating a new ledger. Price refresh is a distinct capability not disclosed in the description; the command contains no initialization or Fava setup operation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The supplied commands perform ledger analysis and financial reporting, rather than initialization or validation. These capabilities are not described as part of the declared setup workflow. The chunk contains no initialization, validation, or Fava setup commands; it also shows no ledger modifications or history imports.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The command performs an account lifecycle edit through bea add close, not ledger initialization or validation. Closing an account is not a supporting setup step described by the declared purpose and can modify an existing populated ledger, which the description explicitly excludes.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The command invokes add transactions --from "$batch" --into "$target", not bea init or validation. Adding a batch of transactions is a substantive ledger-writing capability not declared by the scaffolding-only description. The chunk does not establish whether the ledger is populated or the batch contains historical data, but the undeclared transaction-insertion capability is sufficient to flag a mismatch.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The command performs a ledger-content modification that is not described as part of the initialization workflow. It does not initialize a ledger, validate one, or configure Fava. The snippet does not establish whether the target ledger is populated, so a violation of that specific exclusion cannot be confirmed.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The supplied command performs a ledger-content mutation, not initialization, validation, or Fava setup. Nothing in the chunk establishes that adding the note is a supporting step in new-ledger scaffolding or limits it to an unpopulated ledger. This is an undeclared ledger-editing capability, though the chunk does not prove that a populated ledger is actually targeted.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The command performs targeted transaction-history inspection, including import-id metadata, which is materially different from initializing and validating a new ledger. It does not run bea init or perform an evident validation check. Although this read-only command does not itself import history or modify a populated ledger, its transaction/import-oriented behavior falls outside the declared setup workflow.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The supplied command performs price-status inspection, a distinct operation not described by the declared setup workflow. It contains no initialization, ledger validation, or optional Fava setup. The command alone does not establish any ledger modification or network access.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
87% confidence
Finding

The supplied command adds accounting content to a selected ledger; it does not initialize or validate one. Although balance assertions could support a broader setup workflow, this chunk provides no context tying the write to a newly initialized ledger or restricting it to one. It does not establish that the target ledger is populated.

Content

No source excerpt is available for this finding.

The hosted-ledger instructions route beancount-init to remote workflows despite the manifest explicitly excluding Beancount.io-hosted ledgers.

Medium
Category
Excessive Agency
Confidence
92% confidence
Finding

The manifest limits this skill to initializing local ledgers and explicitly says to skip ledgers hosted on Beancount.io. This reference instead instructs skills without a hosted prompt—which includes beancount-init—to use the connected server's tools directly, or offer a cloud clone when disconnected. That provides an operational path for a context the skill is supposed to decline.

Content

No source excerpt is available for this finding.

The skill provides an executable CSV-import workflow despite the manifest explicitly excluding bank exports and history importing.

Medium
Category
Excessive Agency
Confidence
99% confidence
Finding

The manifest limits beancount-init to scaffolding a new ledger and explicitly excludes bank exports and importing history. This recipe instead executes bea import with --apply, writing transactions from a source CSV into the ledger; the surrounding preview, categorization, and duplicate-review instructions establish a complete import workflow rather than ledger initialization.

Content

No source excerpt is available for this finding.

The reference directs imports into populated ledgers and modifications to existing transactions, outside the initialization-only scope.

Medium
Category
Excessive Agency
Confidence
98% confidence
Finding

The manifest explicitly excludes bank exports and edits to populated ledgers, but L070–L076 prescribe processing imported candidates against existing transactions. L078 additionally instructs the agent to offer metadata writes to existing entries; requiring consent does not bring those edits within the skill's declared initialization scope.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.