Back to skill

Security audit

beancount-close

Security checks for vulnerabilities and agentic risk

Overview

The skill supports month-end bookkeeping with explicit approvals for changes, although some scope wording is inconsistent.

Expect access to sensitive ledger and statement data. Review proposed entries, staged files, and the financial report included in the commit message. If you require strictly local processing, explicitly disallow the hosted-server handoff.

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 (10)

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The command add close --date "$close_date" --account "$account" performs account closure rather than period-end reconciliation and reporting. This directly contradicts the description's explicit instruction to skip single-account close directives.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The command add open changes the ledger's account lifecycle by opening an account, a capability not described in the period-close workflow. This is materially different from reconciling active accounts and reviewing period reports. The --allow-errors option also permits this operation despite errors, although this chunk does not show a commit or establish that the required pre-commit check is bypassed.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The command explicitly performs an import with --apply and --no-input, introducing ledger-changing transaction ingestion that the description does not disclose. Although importing transactions could precede reconciliation, it is a substantive capability beyond the described close workflow, not merely a supporting check. The chunk provides no evidence of pushing, committing, or accessing hosted ledgers.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The supplied command invokes add open, which records the opening of an account rather than reconciling accounts or validating a period close. Account creation is a distinct accounting operation, not an evident supporting implementation detail of the declared workflow. This assessment is limited to the supplied code chunk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The supplied command performs data ingestion rather than reconciliation or period-close validation. Importing transactions is a distinct ledger-modifying operation, not merely an implementation detail of the declared checks and reporting. The chunk does not establish whether the ledger is hosted, so no hosted-ledger violation is inferred.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

The supplied command performs a ledger-writing transaction import (add transactions --from ... --into ...). The declared purpose does not describe batch transaction ingestion, and the chunk does not establish that this operation supports the specified reconciliation workflow. It contains no period-close validation or commit behavior. The command alone does not establish whether the ledger is locally stored or hosted.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
88% confidence
Finding

The supplied command records a commodity price rather than performing reconciliation, validation, flag review, reporting, or commit preparation. Price maintenance can relate to period-end accounting, but this description does not disclose adding or updating prices, and the supplied chunk does not establish that this write is a supporting step of the declared workflow.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
MCP Tool Poisoning
Confidence
87% confidence
Finding

The supplied command performs transaction entry, with trade-link, option-posting, and income-account parameters. It does not show a connection to reconciliation adjustments or other period-close work that would make this a supporting implementation detail. No reconciliation, validation, flag review, reporting, or commit proposal is present in this chunk. This assessment is limited to the supplied command; it does not establish what checks may exist elsewhere.

Content

No source excerpt is available for this finding.

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

Medium
Category
Excessive Agency
Confidence
97% confidence
Finding

The manifest limits this skill to local ledgers and explicitly says to skip ledgers hosted on Beancount.io. These instructions instead direct the agent to use the connected hosted server's tools and specifically map beancount-close to its close-month prompt, extending the workflow to an excluded remote environment.

Content

No source excerpt is available for this finding.

The recurring-gap workflow writes new transactions despite the documented prohibition on creating entries to fill gaps.

Low
Category
Excessive Agency
Confidence
96% confidence
Finding

L048 explicitly states that this skill does not create entries to fill a gap, while L082–L085 instruct it to compose an entry for a missing recurring charge and write it through the shared transaction recipe. The separate confirmation gate limits unintended writes, but does not resolve the contradiction with the documented scope.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.