Back to skill

Security audit

Fiscal

Security checks for vulnerabilities and agentic risk

Overview

This skill matches its budgeting purpose, but it handles highly sensitive financial data and credentials with several under-scoped or unsafe examples users should review before installing.

Review this skill carefully before installing. Prefer local-only mode unless you intentionally use an Actual Budget server, avoid pasting real passwords into chat or command-line flags, require HTTPS for non-local servers, preview imports/rules/categories before committing, back up your budget before bulk edits or deletes, and pin/verify fscl and skill installer versions instead of running unpinned npx commands.

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

Warning
Location
SKILL.md:27
Finding

Actual Budget credentials may be exposed through command-line arguments and plaintext HTTP

Content
View full analysis
`, then retry the original command. ``` `references/commands.md:152-159`: ```bash # Pull existing remote budget fscl login http://actual.local:5006 --password secret fscl init --non-interactive --mode remote \ --server-url http://actual.local:5006 --sync-id # Create local, then upload to server fscl init --non-interactive --mode local --budget-name "My Budget" fscl login http://actual.local:5006 --password secret fscl budgets push --server-url http://actual.local:5006 ``` `references/command-reference.md:97-106`: ```text ## login `fscl login [server-url] [--password ]` Authenticates with the Actual server and stores `serverURL` + `token` in config. If `--password` is omitted in a TTY, fscl prompts securely. Server URL resolution: 1. Positional arg (`[server-url]`) 2. `FISCAL_SERVER_URL` 3. Config `serverURL` ``` ### Technical Analysis The primary Skill instruction tells the Agent to request the user's server password and place it directly in the `fscl` process arguments. Command-line secrets can be exposed through: - Shell history - Process enumeration facilities - Terminal transcripts - Agent tool-call logs - Debugging and telemetry systems - Error reports that record the complete command The command reference expressly documents that omitting `--password` causes `fscl` to prompt securely in a TTY. The Skill nevertheless directs the Agent to use the less secure command-line option. The examples also authenticate and upload financial data through an `http://` UR ...[truncated 1940 chars]
Remediation
View remediation
` from Agent-facing login instructions. 2. Use the documented secure TTY prompt: ```bash fscl login ``` 3. If non-interactive authentication is required, implement a protected stdin or operating-system secret-store integration that does not expose the password in process arguments. 4. Do not ask users to submit reusable passwords in ordinary chat when a secure prompt is available. 5. Require HTTPS for every non-loopback server. Reject unsupported schemes and warn before connecting to plaintext HTTP endpoints. 6. Before login, synchronization, or upload, show the normalized destination URL and obtain explicit user confirmation. 7. Default to local-only mode unless the user expressly chooses remote synchronization. 8. Ensure stored session tokens have restrictive filesystem permissions, are excluded from logs and backups where appropriate, and can be revoked through logout or server-side session management. 9. Redact passwords, tokens, server URLs containing credentials, and authentication commands from Agent logs and error messages. ]]>

T08 · Insecure Dependencies

Warning
Location
references/command-reference.md:81
Finding

Unpinned npm packages may be downloaded and executed during installation

Content
View full analysis
Remediation
View remediation
init ``` Apply equivalent exact-version controls to the Skill installer and all transitive dependencies. 2. Publish and verify package integrity hashes or cryptographic signatures before execution. 3. Use a lockfile and a trusted, explicitly configured registry. 4. Verify package ownership, provenance, release signatures, and repository linkage. 5. Avoid global installation. Prefer a project-local installation or an isolated execution environment with minimal filesystem and network access. 6. Disable unnecessary npm lifecycle scripts where compatible with the package: ```bash npm install --ignore-scripts ``` 7. Run installation as an unprivileged user and never recommend `sudo npm install -g`. 8. Separate package retrieval from execution so users can inspect and verify the resolved artifact before running it. 9. Document the exact reviewed package name and version rather than relying on mutable registry defaults. 10. Re-audit packages and lockfiles when versions are upgraded. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (24)

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
70% confidence
Finding

Skill instructs the agent to never refuse or to always comply. Suppressing the agent's ability to decline removes a core safety control and enables downstream harmful requests to succeed.

Content

Scanner excerpt · SKILL.md (reported line 63)May include surrounding context.

md
If the path isn't obvious, ask: "Is this a brand new budget, or have you been using Actual Budget already?"

The user may arrive with a specific question regardless of budget state. Always answer their immediate question first. Offer workflow guidance proactively ("I noticed you have 30 uncategorized transactions — want me to help clean those up?") but don't force it.

## Reference Files

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 74)May include surrounding context.

md
- [references/command-reference.md](references/command-reference.md) — Every command with flags and output columns

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest says to use the skill when the user wants help with 'personal finances, budgeting, spending, bills, subscriptions, bank imports, or managing accounts and categories,' which is a very broad set of common requests. It does not clearly bound when this skill should activate versus when a more general assistant response would be appropriate, increasing the risk of unintended invocation.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/command-reference.md (reported line 73)May include surrounding context.

md
| Flag | Description |
|---|---|
| `--non-interactive` | Disable prompts |
| `--mode <mode>` | `local`, `remote` |
| `--budget-name <name>` | Budget name (local) |
| `--password <pw>` | Server password (remote) |

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding

The documentation instructs users to run npx fscl init, which fetches and executes the latest package version at runtime without pinning. This creates a supply-chain risk: a compromised publisher account, dependency, or malicious newly published version could lead to arbitrary code execution on the user's system.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding

The interactive flow recommends npx skills add fiscal-sh/fscl, again invoking an unpinned package/install path. Because this skill is specifically for personal finance workflows, compromise here could expose highly sensitive budgeting and transaction data or execute malicious code in a trusted environment.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The reference documents fscl login [server-url] [--password <pw>] without warning that command-line passwords may be exposed via shell history, audit logs, CI logs, or process listings. Since this skill handles budget servers and financial data, credential leakage could enable unauthorized access to the user's budgeting backend and synced data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The cheat sheet instructs users to run fscl login [server-url] --password <pw> on the command line, which can expose secrets through shell history, process listings, terminal logs, and telemetry. In a personal-finance skill, credential compromise is especially sensitive because it can lead to unauthorized access to budget data and potentially connected financial systems.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The import pipeline and rule application steps at L056-L080 include transactions import, rules run --and-commit, and transactions categorize apply, all of which can change persisted financial data. Although some preview steps are shown, the markdown does not explicitly warn users that these commands will commit changes and should be reviewed carefully before execution.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

Lines L148-L149 show fscl budgets delete <id> --yes, which is clearly destructive. While --yes signals confirmation bypass, the markdown itself does not warn that deleting a local budget copy may be irreversible or remove user data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The examples include a literal password (--password secret) in login commands, normalizing insecure secret handling and encouraging users to paste real credentials into shell history and logs. In the context of a finance-management skill, this is more dangerous because exposed credentials may grant access to sensitive budgeting and account data.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
82% confidence
Finding

The documentation recommends running npx skills add fiscal-sh/fscl without pinning an exact package version. This can cause users to execute whatever package version is current at install time, increasing supply-chain risk if a malicious or compromised update is published. In a skill-install context, this is more dangerous because the command directly installs code into the user's environment.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
78% confidence
Finding

The example npx fscl init references an unpinned package, so users may execute a different version than the author tested. This exposes users to dependency drift and supply-chain compromise if the package or one of its transient dependencies is maliciously updated. Because the command is presented as part of initialization flow, it is likely to be copied and executed verbatim.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The guide explicitly encourages use of --show-rows, which prints full imported transaction rows including dates, amounts, payees, categories, and notes. In a personal finance skill, those fields are highly sensitive financial data, and the documentation does not clearly warn that this output may expose private information in terminal logs, transcripts, screenshots, or shared agent sessions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The documentation presents retroactive rule execution commands that can bulk-modify existing transactions, but it does not prominently warn that running the non-dry-run variants will change transaction data across the budget. In a personal finance skill, this can lead to accidental mass recategorization, payee rewrites, amount/date changes, or transfer creation errors if a rule is too broad or incorrect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example fscl rules run --and-commit is especially risky because it signals an irreversible bulk-apply operation without an adjacent warning about committing changes to many existing transactions. Since rules can alter categories, payees, dates, amounts, and cleared state, an overly broad or mistaken rule could silently corrupt financial records at scale.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The monthly cycle is framed as something to run whenever the user imports transactions or at the start of a new month, which is broad enough to trigger a multi-step workflow with state-changing commands from relatively routine prompts. In a personal finance skill, ambiguous activation is risky because it can cascade into imports, rule execution, categorization, and budget changes without a narrowly scoped user request for each action.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The workflow includes fscl rules run --and-commit, which applies transaction rules and commits changes, but it does not require an explicit warning or confirmation before execution. In financial software, misapplied rules can bulk-modify transaction categorization or related records at scale, making mistakes difficult to detect and potentially corrupting the user's budget history.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The budget adjustment section provides direct commands to move money between categories and apply monthly edits, but it does not instruct the agent to warn the user that these actions alter the user's financial plan. Because these commands change allocations and can affect overspending coverage, savings goals, and future budgeting decisions, unconfirmed execution can have material financial consequences.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The proactive monitoring section instructs the agent to flag and potentially act on issues without being asked, creating a risk of unsolicited invocation and drift from user intent. In a finance-management context, this is more dangerous because autonomous surfacing of issues can lead to follow-on recommendations or changes involving sensitive financial data and account state.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow instructs users to collect and import OFX/QFX/CSV bank export files, which commonly contain highly sensitive financial data such as account numbers, balances, merchants, and transaction history, but it provides no privacy or data-handling warning. In a budgeting skill that actively solicits and processes personal finance records, omission of guidance about minimizing exposure, confirming file provenance, and avoiding unnecessary sharing increases the chance of unsafe handling of sensitive data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The workflow instructs deletion and merge operations on budget categories, including a force-style --yes flag, without requiring a clear user-facing warning about irreversible or hard-to-reverse data changes. In a personal finance context, category merges and deletions can silently rewrite historical organization and impair reporting accuracy if the wrong target is chosen.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The payee cleanup step directs renaming and merging payees without warning that these actions can relabel historical transactions in bulk and change search/reporting behavior. In budgeting software, mistaken payee consolidation can corrupt spending attribution across many records, especially when merchants with similar names are incorrectly merged.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow instructs applying categorization drafts and running rules with --and-commit, which can perform bulk automated modifications, without an explicit warning about the breadth of the changes or the need for review before commit. In a financial recordkeeping skill, erroneous categorization or rules can propagate across many transactions and degrade budget integrity quickly.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.