Back to skill

Security audit

Budget

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a local-only budgeting skill, but it needs review because it can persist and alter sensitive budget records with weak safeguards around destructive or malformed changes.

Review this skill before installing if you plan to store real budget or expense data. It does not show exfiltration or bank-account access, but you should keep backups, avoid delete or bulk-delete workflows unless you can preview what will change, and be cautious with malformed amounts such as negative values, NaN, or infinity until validation is added.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/reallocate_budget.py:86
Finding

Unvalidated monetary values can corrupt persistent budget data

Content
View full analysis
from_remaining: print(f"\n⚠️ Cannot reallocate ${args.amount:.2f}") print(f" {args.from_cat} only has ${from_remaining:.2f} remaining") print(f" Maximum safe reallocation: ${max(0, from_remaining - 20):.2f}") return from_budget['limit'] -= args.amount from_budget['updated_at'] = datetime.now().isoformat() to_budget['limit'] += args.amount to_budget['updated_at'] = datetime.now().isoformat() ``` ### Technical Analysis Using `argparse` with `type=float` verifies only that an argument can be converted to a Python floating-point value. It does not ensure that the value is positive, finite, or within a reasonable range. Consequently, the scripts accept: - Negative budgets, income, expenses, and reallocations - `nan` - Positive or ne ...[truncated 1795 chars]
Remediation
View remediation
1_000_000_000: raise argparse.ArgumentTypeError("Amount exceeds the supported maximum") return amount ``` 2. Apply this validator to every budget, income, expense, and reallocation argument. 3. Reject reallocations where the source and destination categories are identical. 4. Validate loaded JSON against an explicit schema before performing arithmetic. 5. Set `allow_nan=False` when serializing JSON: ```python json.dump(data, f, indent=2, allow_nan=False) ``` 6. Prefer decimal arithmetic using `decimal.Decimal` or store monetary values as integer cents. 7. Add tests for negative values, zero, `nan`, infinity, extreme values, and reversed reallocations. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/log_expense.py:86
Finding

Newly logged expenses can be counted twice in immediate budget alerts

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
scripts/set_budget.py:12
Finding

Financial data files are created without explicit restrictive permissions or safe replacement

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (9)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

Bulk delete is more dangerous because a broad selector like category plus date can remove many records at once, yet the documentation provides no caution, dry-run preview, confirmation requirement, or rollback guidance. In a personal finance context, mass deletion can materially damage budgeting accuracy and erase historical spending data needed for analysis and user decisions.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
85% confidence
Finding

The skill instructs use of local scripts and explicitly stores data under memory/budget/, which implies file read/write capability, but it does not declare an explicit tool scope such as permissions or allowed-tools. That mismatch can cause the runtime to grant broader-than-expected file access or make the skill's access boundaries ambiguous, which is risky for a privacy-focused budgeting skill handling sensitive financial records.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The invocation description uses broad phrases like setting a budget, tracking spending, logging expenses, and managing money by category, which can overlap with ordinary conversation and cause over-triggering. In a skill that writes local financial data, accidental activation could result in unintended creation, modification, or exposure of sensitive budgeting records.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The 'When to Use' section includes broad phrases like 'Create a budget for me' and 'Update my entertainment budget' without defining boundaries, exclusions, or a narrower invocation context. In a markdown skill description, this can cause unintended activation because these phrases overlap with normal conversational requests about finances.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The documentation exposes a delete operation for financial records without any warning, confirmation step, or mention of recovery safeguards. In a budget-tracking skill, accidental or induced deletion of expense data can corrupt budgets, spending history, and user trust, especially if an agent follows the documented command directly.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The phrase "Help me fix my budget" is generic and could match many different budgeting situations beyond overage recovery. The file does not provide exclusion conditions or tighter activation constraints, which increases the chance of unintended invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The markdown presents budget-modifying commands as straightforward examples without an explicit warning that they change persisted financial data. In a personal finance skill, this increases the risk of accidental destructive actions, especially if an agent or user copies commands directly without preview, confirmation, backup, or rollback safeguards.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The example reallocation record contradicts the stated transfer direction and resulting budget math: moving funds from utilities to entertainment should decrease utilities and increase entertainment, but the sample shows the opposite. In a budgeting skill, incorrect financial state examples can propagate into implementations or user actions, causing silent corruption of budget data and misleading recovery advice.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This code writes the full budget dataset to a persistent file under the user's home directory, which changes local user data. Although the script prints success messages afterward, there is no warning or confirmation before the write, and the brief module/docstring does not disclose that invoking the skill will persist and overwrite budget data on disk.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.