Back to skill

Security audit

TaxClaw

Security checks for vulnerabilities and agentic risk

Overview

TaxClaw appears to be a real local tax-document tool, but it under-discloses several ways sensitive tax data or the local app can touch third-party services or be exposed through the browser.

Install only if you are comfortable reviewing the code and running a sensitive local web app. Keep it in local mode for tax documents, avoid using the contact form for private tax details, do not expose the localhost port, and prefer a version that vendors frontend JavaScript, fixes Host checks on all routes, accurately discloses cloud full-page uploads, and uses locked patched dependencies.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (5)

T03 · Remote Payload Retrieval and Execution

Error
Location
templates/base.html:1
Finding

Untrusted Remote JavaScript Executes Within the Sensitive Local Application Origin

Content
View full analysis
{{ title or 'TaxClaw' }} ``` The application also does not set a Content Security Policy in its security middleware: ```python class SecurityHeadersMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): response = await call_next(request) response.headers["X-Content-Type-Options"] = "nosniff" response.headers["Referrer-Policy"] = "strict-origin-when-cross-origin" response.headers["X-Frame-Options"] = "SAMEORIGIN" return response ``` ### Technical Analysis Every page derived from `base.html` downloads executable JavaScript from the third-party unpkg CDN. The resource has a nominal version in its URL, but it has no Subresource Integrity hash. The server also does not enforce a Content Security Policy capable of restricting scripts to locally reviewed resources. A script delivered by this CDN executes with the privileges of the TaxClaw web origin. It can inspect rendered tax data, read CSRF tokens embedded in forms or JavaScript, issue same-origin requests, enumerate document records, and retrieve sensitive previews or exports. The HTTP-only attribute on the CSRF cookie does not prevent this because the corresponding token is deliberately rendered into application pages. This is not evidence that the current HTMX package is malicious. The vulnerability is that the effective executable payload is retrieved remotely and can differ from the source reviewed in this audit. ### Attack Path 1. An attacker compromises the CDN, its package-publishing account ...[truncated 815 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Error
Location
src/main.py:71
Finding

Incomplete Host Validation Exposes Sensitive GET Endpoints to DNS Rebinding

Content
View full analysis
= page_count: return R ...[truncated 2180 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/ai.py:31
Finding

Cloud Mode Sends Complete Rendered Tax-Document Pages Despite Narrower Privacy Claims

Content
View full analysis
1, } merged: dict[str, Any] = {} for i in range(doc.page_count): img = _render_page_png(doc, i) out = chat_json_from_image(cfg=cfg, pr ...[truncated 2289 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
src/main.py:1251
Finding

Feedback Form Transmits Personal Data to an Undeclared Third-Party Service

Content
View full analysis
... ...
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
requirements.txt:1
Finding

Open-Ended Dependency Constraint Allows Unreviewed Future Package Versions

Content
View full analysis
=0.0.22 pyyaml==6.0.2 anthropic==0.83.0 ollama==0.4.4 ``` Setup resolves and installs dependencies directly from the configured Python package index: ```bash python3 -m venv "$VENV_DIR" "$VENV_DIR/bin/pip" install --upgrade pip "$VENV_DIR/bin/pip" install -r "$SKILL_DIR/requirements.txt" ``` ### Technical Analysis The constraint `python-multipart>=0.0.22` permits pip to install any later release satisfying the lower bound. As a result, installations performed at different times may execute different code from the code considered during this audit. Python package installation may execute package build behavior, and imported dependency code runs with the privileges of the TaxClaw process. There is no evidence that the currently resolved package is malicious. The finding concerns the absence of exact version and artifact-hash verification. The setup script also upgrades pip dynamically, creating another installation-time component whose effective version can change after review. ### Attack Path 1. A future package release satisfying `python-multipart>=0.0.22` is compromised, malicious, or contains a severe vulnerability. 2. A user runs `setup.sh` after that release becomes the version selected by pip. 3. Pip downloads the unreviewed package from the configured package index. 4. Build/install hooks or subsequently imported package code run under the user's account. 5. Malicious code could access the same local files, credentials, and network capabilities available to the installation or TaxClaw process. ### Impact Assessment A compromised dependency could exec ...[truncated 284 chars]
Remediation
View remediation
`. 2. Generate a lockfile containing hashes for every direct and transitive dependency. 3. Install with hash enforcement, for example using pip's `--require-hashes`. 4. Pin the setup tooling version instead of always upgrading pip to the newest available release. 5. Use a trusted, explicitly configured package index and disable unexpected extra indexes. 6. Run dependency vulnerability and provenance checks as part of release preparation. 7. Rebuild and review the lockfile through a controlled update process rather than resolving dependencies on end-user systems. ]]>
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
  • Rogue AgentSelf-Modification, Session Persistence
Findings (37)

Known Vulnerable Dependency: jinja2==3.1.4 — 6 advisory(ies): CVE-2025-27516 (Jinja2 vulnerable to sandbox breakout through attr filter selecting format metho); CVE-2024-56201 (Jinja has a sandbox breakout through malicious filenames); CVE-2024-56326 (Jinja has a sandbox breakout through indirect reference to format method) +3 more

Critical
Category
Supply Chain
Confidence
90% confidence
Finding

jinja2==3.1.4 has multiple listed sandbox-breakout advisories. If this application renders any user-controlled data or filenames into templates in its local web UI, especially in features related to tax document viewing/export, a vulnerable Jinja2 version can increase the risk of server-side template injection or escaping intended sandbox restrictions.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the broader skill implementation includes cloud AI and Formspree submission while SKILL.md markets the product as local-first and says documents never leave the machine, users can be deceived about external network communication. For a tax-processing tool, undisclosed or under-disclosed outbound communication materially increases privacy and compliance risk because sensitive financial and identity data may be exposed to third parties.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

If the broader skill implementation includes cloud AI and Formspree submission while SKILL.md markets the product as local-first and says documents never leave the machine, users can be deceived about external network communication. For a tax-processing tool, undisclosed or under-disclosed outbound communication materially increases privacy and compliance risk because sensitive financial and identity data may be exposed to third parties.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the broader skill implementation includes cloud AI and Formspree submission while SKILL.md markets the product as local-first and says documents never leave the machine, users can be deceived about external network communication. For a tax-processing tool, undisclosed or under-disclosed outbound communication materially increases privacy and compliance risk because sensitive financial and identity data may be exposed to third parties.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the broader skill implementation includes cloud AI and Formspree submission while SKILL.md markets the product as local-first and says documents never leave the machine, users can be deceived about external network communication. For a tax-processing tool, undisclosed or under-disclosed outbound communication materially increases privacy and compliance risk because sensitive financial and identity data may be exposed to third parties.

Content

No source excerpt is available for this finding.

Possible Typosquatting: 'uvicorn' resembles popular package 'gunicorn'

High
Category
Supply Chain
Confidence
70% confidence
Finding

Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: pillow==10.4.0 — 16 advisory(ies): CVE-2026-55379 (Pillow `BdfFontFile`: `Image.new()` called without `_decompression_bomb_check()`); CVE-2026-55798 (Pillow: WindowsViewer.get_command() OS command injection via unescaped shell pat); CVE-2026-54060 (Pillow: `FontFile.compile()`: `Image.new()` called without `_decompression_bomb_) +13 more

High
Category
Supply Chain
Confidence
81% confidence
Finding

pillow==10.4.0 is flagged with multiple advisories, and this skill processes tax documents, which often include image inputs or embedded images from scans/PDF workflows. In that context, image parsing bugs can plausibly be reached by attacker-controlled files, leading to denial of service and, depending on the specific flaw and platform usage, potentially more severe effects.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill metadata promises a local-first design where documents never leave the machine, but the cloud code path base64-encodes document images and sends them to Anthropic for processing. Because these are tax documents containing highly sensitive personal and financial data, this creates a serious privacy and trust violation, especially if users rely on the manifest claim when deciding to use the skill.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'env' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Lp1

High
Category
MCP Least Privilege
Confidence
75% confidence
Finding

The skill uses 'network' capability that is not listed in its permissions. This may indicate deceptive intent or missing permission declarations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill metadata says documents 'never leave your machine,' but the configuration explicitly supports a cloud-hosted AI backend and warns that tax documents will be transmitted to a third-party provider. For a tax-document tool handling SSNs, income, and holdings, this is a serious trust and privacy mismatch that can cause users to expose highly sensitive data under false assumptions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill metadata promises that documents 'never leave your machine,' but this codebase supports a cloud processing backend. In a tax-document application handling highly sensitive personal and financial records, that discrepancy is security-relevant because users may make privacy decisions based on a false local-only guarantee and unknowingly transmit W-2/1099/K-1 contents to a remote provider.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

This settings handler allows switching to a cloud model, enabling remote processing of sensitive tax documents despite the skill's local-only claim. Even with a privacy acknowledgment checkbox, the mismatch remains dangerous because the code permits data flows that contradict the stated trust boundary users were told to rely on.

Content

No source excerpt is available for this finding.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · templates/affiliate.html (reported line 4)May include surrounding context.

html
{% extends "base.html" %}

{% block content %}
  <!-- Hero -->
  <div class="card" style="margin-bottom: 14px;">
    <div style="font-size: 22px; font-weight: 900; margin-bottom: 6px;">
      You extracted your 1099‑DA. Now finish the job.

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · templates/affiliate.html (reported line 4)May include surrounding context.

html
{% extends "base.html" %}

{% block content %}
  <!-- Hero -->
  <div class="card" style="margin-bottom: 14px;">
    <div style="font-size: 22px; font-weight: 900; margin-bottom: 6px;">
      You extracted your 1099‐DA. Now finish the job.

Session Persistence

Medium
Category
Rogue Agent
Confidence
60% confidence
Finding

Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.

Content

Scanner excerpt · README.md (reported line 9)May include surrounding context.

md
> review. TaxClaw does not prepare tax returns, file returns, compute cost basis, or provide
> tax, legal, or financial advice of any kind. AI extraction may produce errors — **always
> verify extracted data against your original documents before use.** Outbranch Network LLC
> is not a law firm, CPA firm, or tax preparation service. Use of this software does not create
> a professional relationship of any kind. See [Terms of Use](TERMS.md) and [Privacy Policy](PRIVACY.md).

TaxClaw turns messy tax PDFs into clean, reviewable structured data — **locally by default** — so you can stop retyping boxes like it’s 1999.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The runbook instructs users to export tax records to local files without warning that the outputs contain highly sensitive personal and financial data. Even though the skill is described as local-first, writing CSV/JSON exports to disk increases the risk of accidental disclosure through insecure file locations, shell redirection history, backups, sync services, or overly broad file permissions.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This file transmits both the image content and prompt text to an external API with no visible in-code warning, consent flow, or disclosure mechanism. In the context of tax-document extraction, silent remote transfer increases the risk of unintended exposure of PII, financial account data, SSNs, and other regulated information, even if the transfer is functionally intended.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest description limits the skill's extraction scope to W-2, 1099-DA, all 1099 variants, and K-1. This classifier explicitly recognizes "Form 1040" as a supported document type, which expands behavior beyond the stated manifest scope.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The prompt instructs the AI model to return "1040" as one of the valid document types. That documented runtime behavior conflicts with the manifest's stated set of supported tax documents, which does not mention 1040 forms.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

When text extraction fails to identify the form, the code renders page 1 to PNG and passes the image bytes to chat_json_from_image, which may transmit highly sensitive tax-document data to an external AI service. In the context of a tax-document skill explicitly described as 'Local-first — your documents never leave your machine,' this creates a serious privacy and trust violation if the AI backend is remote or configurable to be remote.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Reading cloud API credentials from the environment enables seamless activation of third-party processing while the skill description presents the product as local-first and says documents never leave the machine. In the context of tax records, this increases the risk of silent or poorly understood exfiltration of sensitive financial and identity data to an external provider.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The code renders tax documents containing highly sensitive PII and financial data, then sends page images to chat_json_from_image for AI extraction. Although the metadata claims the tool is 'local-first' and documents 'never leave your machine,' this file provides no enforcement or visible guarantee that the AI backend is local, creating a real risk of silent exfiltration of SSNs, EINs, account data, and income information to a remote service.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The UI's 'PARTIALLY LOCAL' state confirms that some processing may occur remotely, which contradicts the absolute privacy claim in the skill description. In this context, misleading locality/privacy messaging is dangerous because users may expose tax data under the mistaken belief that all handling is strictly local.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The contact form sends user-supplied content to Formspree, a third-party external service. While likely intended for support/feedback, this is privacy-sensitive in a tax app because users may include personal, financial, or document-related information in messages, causing unexpected off-device disclosure to another processor.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.