Back to skill

Security audit

debt-blitz-planner

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent local debt-payoff calculator, with user-initiated CSV export that should be handled carefully because it may contain sensitive financial labels and has a spreadsheet formula-injection weakness.

Reasonable to install for local debt payoff planning. Avoid using attacker-provided debt names, be careful where you save CSV exports, and treat exported files as sensitive personal financial data; names beginning with characters like =, +, -, or @ should be sanitized before opening the CSV in a spreadsheet.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/debt_payoff_planner.py:267
Finding

Spreadsheet Formula Injection Through Unsanitized Debt Names in CSV Export

Content
View full analysis
Remediation
View remediation
str: if value and value[0] in ("=", "+", "-", "@", "\t", "\r"): return "'" + value return value ``` 2. Apply the function to the debt name at the CSV output boundary: ```python w.writerow([ month, csv_safe_text(name), pay / 100, max(bal, 0) / 100, ]) ``` 3. Apply equivalent protection to every future user-controlled textual CSV field, rather than relying only on validation at input time. 4. Add regression tests covering names beginning with `=`, `+`, `-`, `@`, tab, and carriage return. Verify that exported cells are stored as literal text. 5. Document that CSV exports contain user-supplied debt labels and should not be opened with formula execution enabled unless the values have been sanitized. Allowlisting debt-name characters could provide additional defense in depth, but output-boundary neutralization should remain in place because ordinary names may legitimately contain punctuation. ]]>
Vulnerability Patterns
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (3)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
77% confidence
Finding

The skill documentation instructs users to run a local Python script and export results to files, which implies shell execution and file-writing capability, but the skill declares no explicit tool scope or permissions boundary. In an agent environment, undeclared capabilities can lead to over-privileged execution, making it harder to constrain or audit what the skill is allowed to do if the referenced script or future edits perform unintended actions.

Content

No source excerpt is available for this finding.

subprocess module call

Medium
Category
Dangerous Code Execution
Confidence
70% confidence
Finding

subprocess module calls execute external commands. Without careful input validation, this enables command injection.

Content

Scanner excerpt · scripts/test_debt_payoff_planner.py (reported line 67)May include surrounding context.

python
def test_cli():
    r = subprocess.run(
        [sys.executable, str(SCRIPT), "--debt", "Visa,4200,22.9,105",
         "--debt", "MC,1800,19.9,56", "--extra", "150"],
        capture_output=True, text=True)

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

This code writes a month-by-month debt payoff plan, including debt names and balances, to a user-specified CSV file. While the operation is user-initiated, there is no explicit warning in code-facing text about persisting sensitive personal financial data to disk.

Content

No source excerpt is available for this finding.