Back to skill

Security audit

Money

Security checks for vulnerabilities and agentic risk

Overview

This is a real personal-finance advice skill, but it automatically saves and edits detailed financial records in shared local files without asking first.

Install only if you want this skill to maintain a durable local financial memory. Review the ~/Clawic/data paths, keep them private and backed up, and be aware that account balances, debts, income, contacts, fraud history, and decisions may be written in plaintext unless your agent adds its own confirmation and storage controls.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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:34
Finding
Automatic Plaintext Persistence of Sensitive Financial and Personal Data<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:34`, `SKILL.md:88`, `SKILL.md:148`, and `memory-template.md:23` **Vulnerability Type**: Automatic storage of sensitive information in unencrypted local files **Risk Level**: Medium ### Vulnerable Code Snippets `SKILL.md:34`: ```markdown **Write before the session ends** whenever it produced something durable: a rate, balance or account discovered or changed; a payoff order agreed; a goal with a date; a budget or savings rate; a net-worth reading; a decision taken and why; a cover level or deductible; a review that ran; or something the user will want to read again — a payoff plan, an investment policy, a rent-versus-buy analysis, a coverage map, a job-loss playbook. `memory-template.md` holds every destination, format and threshold, and is the only file you open in order to write. ``` `SKILL.md:88`: ```markdown 9. **The plan lives in a file, not in the reply.** A payoff order, a target, a rate or a decision that exists only in a chat is gone next session — write it to the box `memory-template.md` names, in the same turn it is agreed. ``` `SKILL.md:148`: ```markdown - Persistence: did this session change a rate, balance, account, payoff order, goal, cover level or decision? Then it is written to its box before the answer ends — `memory-template.md` says which one. ``` `memory-template.md:23`: ```markdown No permission needed; every write is announced in one line that names the file. Writes and deletions stay inside the paths declared in this skill's `configPaths`. A deletion is named in that same line, and in a shared box only rows this skill itself wrote are ever updated or removed. ``` The stored data model includes account institutions, balances, debts, credit limits, income, spending, net worth, employment information, contacts, fraud history, and financial decisions. Representative plaintext records are defined in `memory-template.md:161-176` and `memory-template.md:201-206`. ### Tec ...[truncated 3072 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Default to session-only processing and require explicit opt-in before creating persistent records. 2. Present the exact fields and destination file before writing sensitive data. 3. Add configuration controls such as: - `persistence_enabled` - `allowed_persistent_fields` - `retention_days` - `shared_storage_enabled` 4. Minimize retained data. Prefer aggregates or user-selected aliases over account-level records. 5. Encrypt sensitive financial files at rest using an operating-system key store or a user-controlled encryption key. 6. Create files with restrictive permissions and verify that directories are inaccessible to unrelated local users. 7. Avoid writing sensitive information to shared boxes unless the user separately authorizes cross-Skill access. 8. Provide commands or documented procedures to review, export, redact, and delete all retained information. 9. Introduce expiration and periodic cleanup for stale balances, contacts, incidents, and decision records. 10. Continue stripping credentials, but treat balances, income, net worth, fraud history, and contact information as sensitive data requiring protection rather than as unrestricted plaintext. ]]>

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
memory-template.md:208
Finding
Ambiguous Name-Based Ownership Can Cause Cross-Skill Record Modification or Deletion<![CDATA[ ## Vulnerability Details **File Location**: `memory-template.md:208-219` and `memory-template.md:255-257` **Vulnerability Type**: Inadequate authorization and ownership tracking in shared data stores **Risk Level**: Medium ### Vulnerable Code Snippets `memory-template.md:208-219`: ```markdown - **Identity is `Name`.** Read the file before adding and look for that name. If it is already there, update the row in place — it is yours. Rows written by another skill are read-only: never rewrite one, only add what is missing. - **Debts are accounts.** A card, a loan or a mortgage is a row here with a negative balance and its rate, so that the payoff order in `memory.md` and the inventory never disagree about a number. - **Amounts carry their currency in the value** (`9,800 EUR`), because a second currency always shows up and someone will add the column. - **`As of` is mandatory.** A balance with no reading date cannot be compared, and a stale one silently poisons a net-worth snapshot. - **Closure is part of the inventory.** When an account is closed or a debt cleared, delete the row and note the date in `memory.md`. An inventory that only grows stops being an inventory. - **Scale cut**: one row per account while there are ≤15. Past that, split by institution into `~/Clawic/data/finances/<institution-kebab>.md` with the same columns, and `accounts.md` becomes the index (`Name | Institution | Type | → file`). If you arrive and the folder already looks like that, follow it — never start a parallel `accounts.md`. - **Foreign columns win.** If the file already exists with a different column set, match its columns and add anything missing as a trailing note. Never rewrite its header. - Access reference is a pointer only, never a number, login or password. ## Shared subscriptions `~/Clawic/data/finances/subscriptions.md`. Identity is `Name`; update in place, delete the row when it is cancelled and note the date and the saving in `memory.md`. ``` `memory-templ ...[truncated 3751 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Assign every record an immutable, globally unique identifier instead of using a display name as the primary key. 2. Add mandatory provenance fields such as: - `record_id` - `created_by` - `created_at` - `last_modified_by` - `version` 3. Permit a Skill to update or delete a record only when `created_by` matches its authenticated Skill identity or when the user explicitly authorizes the operation. 4. Treat names, emails, and handles as searchable attributes, not ownership evidence. 5. Require confirmation before deleting accounts, subscriptions, contacts, projects, or other shared records. 6. Use tombstone records for closure or cancellation instead of immediate deletion, preserving provenance and recovery capability. 7. Perform atomic file updates with locking and version checks to prevent lost updates from concurrent Skills. 8. Keep backups or an append-only audit log recording the previous value, new value, actor, timestamp, and reason. 9. Define a conflict-resolution procedure when a matching name exists but ownership or identity cannot be established. 10. Validate ownership independently of table layout, including when “foreign columns” or schemas are encountered. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
Findings (41)

Context-Inappropriate Capability

High
Confidence
95% confidence
Finding
The manifest for Money says it is not for picking funds or brokers and distinguishes that scope from `invest`. This file is an investing policy skill covering whether to invest, portfolio proportions, equity/bond allocations by risk posture, rebalancing, and tax-aware asset location; those are specialized investment capabilities outside the stated Money skill purpose.

Credential Access

High
Category
Privilege Escalation
Content
| Name | Institution | Type | Purpose | Rate | Balance | As of | Access reference |
|------|-------------|------|---------|------|---------|-------|------------------|
| Joint current | Banco X | current | bills and direct debits | 0% | 2,100 EUR | 2026-07-26 | keychain:bancox-joint |
| Buffer | Banco Y | savings | emergency fund | 2.4% AER | 9,800 EUR | 2026-07-26 | keychain:bancoy |
| Visa | Banco X | credit card | — | 21.9% APR | -3,400 EUR | 2026-07-26 | keychain:bancox-card |
| Mortgage | Banco Z | mortgage | home | 2.1% fixed to 2033 | -58,000 EUR | 2026-07-26 | file:~/Documents/mortgage.pdf |
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
| Name | Institution | Type | Purpose | Rate | Balance | As of | Access reference |
|------|-------------|------|---------|------|---------|-------|------------------|
| Joint current | Banco X | current | bills and direct debits | 0% | 2,100 EUR | 2026-07-26 | keychain:bancox-joint |
| Buffer | Banco Y | savings | emergency fund | 2.4% AER | 9,800 EUR | 2026-07-26 | keychain:bancoy |
| Visa | Banco X | credit card | — | 21.9% APR | -3,400 EUR | 2026-07-26 | keychain:bancox-card |
| Mortgage | Banco Z | mortgage | home | 2.1% fixed to 2033 | -58,000 EUR | 2026-07-26 | file:~/Documents/mortgage.pdf |
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Credential Access

High
Category
Privilege Escalation
Content
| Name | Institution | Type | Purpose | Rate | Balance | As of | Access reference |
|------|-------------|------|---------|------|---------|-------|------------------|
| Joint current | Banco X | current | bills and direct debits | 0% | 2,100 EUR | 2026-07-26 | keychain:bancox-joint |
| Buffer | Banco Y | savings | emergency fund | 2.4% AER | 9,800 EUR | 2026-07-26 | keychain:bancoy |
| Visa | Banco X | credit card | — | 21.9% APR | -3,400 EUR | 2026-07-26 | keychain:bancox-card |
| Mortgage | Banco Z | mortgage | home | 2.1% fixed to 2033 | -58,000 EUR | 2026-07-26 | file:~/Documents/mortgage.pdf |
Confidence
70% confidence
Finding
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Context-Inappropriate Capability

High
Confidence
98% confidence
Finding
The skill directs the agent to create and update several persistent records containing fraud incidents, decisions, sensitivities, and adviser details. This materially broadens the skill into long-term dossier building on highly sensitive financial and household matters, which can expose users to privacy harm, profiling, and secondary misuse if those files are accessed by other skills or parties.

Natural-Language Policy Violations

Medium
Confidence
87% confidence
Finding
The instruction 'Every euro allocated is a euro not allocated elsewhere' imposes euro-specific wording even though the configuration later allows currency to vary by user and default. This creates a natural-language locale inconsistency that can force a specific regional convention without explicit opt-in.

Context Window Stuffing

Medium
Category
Memory Poisoning
Content
| 1 | Capture the full employer match, where one exists — the wrapper name depends on `country` | Contributing at least up to the match ceiling; a 50% match is an instant 50% return, unmatched by anything below |
| 2 | One month of core spending in cash | Buffer ≥ one month of core spend + the largest insurance deductible |
| 3 | Clear every balance priced above `high_interest_rate_pct` | Nothing left above the line (`debt.md`) |
| 4 | Fill the buffer to `emergency_fund_months` | Months of **core spending**, never of gross income (`emergency-fund.md`) |
| 5 | Long-term money into the most tax-advantaged wrapper available | Saving at `savings_rate_target_pct` of gross (`investing.md`, `retirement.md`) |
| 6 | Dated goals, each with its monthly figure | Every named goal has target, date and per-month amount (Rule 4) |
| 7 | Mid-rate debt prepayment, taxable investing, deliberate spending | The residual: allocate it, or it allocates itself as lifestyle |
Confidence
85% confidence
Finding
Skill attempts to fill the context window with filler content, displacing legitimate instructions and safety constraints. This can degrade agent performance or bypass safety boundaries.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
| Trap | Why it fails | Do instead |
|---|---|---|
| Answering "should I invest?" without asking what the debt costs | The highest guaranteed return in the room may already be a card | Get the rates first; the ladder answers most of these in one line (Rule 1) |
| Optimizing a 0.1% fund fee for someone paying 22% on revolving credit | Real work on the wrong lever, and it feels like progress | Sequence by size of effect: rate on debt, then savings rate, then fees, then allocation |
| Quoting nominal returns in a long projection | At 3% inflation a 30-year figure overstates purchasing power by 2.4× | Every projection over 5 years is quoted in real terms (Rule 2) |
| Sizing the emergency fund on gross income | Inflates the target by the tax rate and delays steps 5-7 by months | Core monthly spending × `emergency_fund_months`, core defined by what survives a cut |
Confidence
75% 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.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The skill instructs the agent to write several records into user data files under ~/Clawic/data, but it does so as a default operational step and without any explicit safety guard, confirmation requirement, or limitation on when writes are allowed. Because the content being written includes decisions, financial accounts, budgets, and artifacts, a mistaken, manipulated, or premature execution could alter persistent financial records and influence future decisions based on corrupted state.

Description-Behavior Mismatch

Medium
Confidence
90% confidence
Finding
The documentation requires reading and maintaining budget and memory files, which effectively turns the skill into a personal finance tracker despite the manifest saying tracker/import behavior is out of scope. This scope mismatch is dangerous because users and upstream controls may grant the skill trust or permissions appropriate for advice, not for maintaining persistent financial records.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The skill explicitly instructs writing budgeting outputs and financial profile data into persistent shared files, which extends beyond advisory behavior into storing sensitive personal finance records. This creates privacy and integrity risk because the agent may overwrite, alter, or persist highly sensitive data without clear user confirmation or scope limits.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill tells the agent to write sensitive financial data to local shared files but provides no warning, confirmation step, or safeguards around modifying existing user data. In practice, this can lead to silent overwrites, corruption of prior records, or unintended persistence of private financial information.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill tells the agent to store identity-theft dispute details, dates, and reference numbers in local artifact files without any explicit requirement to obtain user consent or warn that sensitive information will be written to disk. Because this content concerns fraud incidents and personal financial records, unintended persistence increases privacy and exposure risk if the local workspace is later accessed, synced, or exfiltrated.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs persistent updates to memory and accounts files with freeze status, report pulls, card limits, rates, and identity-incident tracking, again without a user-facing warning or consent checkpoint. In a personal-finance context this is especially sensitive, since these files aggregate high-value financial metadata that could aid profiling, fraud, or privacy violations if stored automatically.

Ssd 3

Medium
Confidence
96% confidence
Finding
The skill mandates reading persistent financial memory and account files before answering any debt question, creating a broad default access pattern to sensitive data. Even if intended for continuity, this expands unnecessary data exposure and couples routine advice to full financial-history access.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill instructs the agent to write detailed debt plans, balances, rates, and projected interest savings into persistent user files without any explicit consent, minimization, or retention warning. Because this is highly sensitive financial data, default persistence increases exposure if those files are later accessed by other skills, users, or systems.

Ssd 3

Medium
Confidence
97% confidence
Finding
The skill directs the agent to persist debt decisions, balances, rates, account updates, and payoff-plan artifacts as a standard workflow. This creates ongoing retention of sensitive financial data in multiple locations, increasing the attack surface and the chance of overcollection beyond what is needed to answer the current request.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The skill requires reading multiple persistent memory files before answering, including broad personal finance context that may exceed what is necessary for a housing question. This violates least-privilege principles by granting broad access to sensitive user data and increases the chance of unnecessary data exposure or cross-context leakage into responses.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The skill instructs the agent to write to several persistent local files, including memory, decisions, accounts, and due-date records, even though the skill is described primarily as advisory guidance about housing choices. That expands the skill from analysis into durable state modification, which can create privacy, integrity, and over-collection risks if done automatically or without explicit user consent and tight scoping.

Context-Inappropriate Capability

Medium
Confidence
95% confidence
Finding
The skill explicitly instructs the agent to write household income details, compensation changes, and decision artifacts into persistent local files. That expands the skill from transient advice into long-term recordkeeping of sensitive financial data, which increases privacy and data-minimization risk if the user did not knowingly consent to storage or if other skills/processes can later read those files.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The instruction to write financial details to ~/Clawic/data/money/memory.md and related artifact files occurs without any warning to the user that sensitive household financial information will be persisted. In a money-management skill, this is especially risky because salary, bonus, household structure, and decision rationale are highly sensitive and could be unexpectedly retained or exposed to later access.

Ssd 3

Medium
Confidence
96% confidence
Finding
The skill directs the agent to persist user financial details and session-derived decisions in plain-language memory and artifact files, which creates a durable, human-readable record of sensitive data. Natural-language records are harder to constrain, easier to over-collect, and more likely to contain incidental sensitive context than narrowly scoped structured storage, increasing disclosure risk if accessed by other components or users.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The manifest explicitly says Money is not for building a tracker or importing statements (`personal-finance-tracker`) and not for a recurring-payment list (`subscriptions`). But this file instructs the agent to persist insurance data into `coverage-map.md`, `budget.md`, decision logs, due lists, and claim artifacts, which is tracker-style record maintenance rather than decision guidance alone.

Description-Behavior Mismatch

Medium
Confidence
91% confidence
Finding
The skill instructs the agent to persistently write to several local memory and artifact files, expanding its behavior from advice into state mutation. Persistent writes can silently alter future agent behavior, create inaccurate financial records, or overwrite user data without explicit consent, which is risky in a finance context where records influence later recommendations.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill directs the agent to modify multiple persistent files without any user-facing warning or consent flow. Silent state changes are dangerous because users may not realize records, policies, due items, and decision logs are being created or changed, and those artifacts can affect future financial advice or leak sensitive financial context into local storage.

Static analysis

No suspicious patterns detected.