MEDIUM 4.6

CVE-2026-46672: Actual CLI CSV Formula Injection Vulnerability

Actual, a local-first personal finance application, contains a CSV formula-injection vulnerability in its command-line interface (CLI). When users export data to CSV format using the --format csv option, the app's CSV serializer fails to escape special characters that trigger automatic formula evaluation in spreadsheet applications. An attacker with local access could craft malicious transaction data, account names, payee information, or other financial records that, when exported to CSV and opened in Excel, LibreOffice Calc, or Google Sheets, execute arbitrary formulas. This could lead to data exfiltration or further compromise. The vulnerability was patched in version 26.6.0.

Source data · NVD / CISA · public domain

CVSS
3.1 · 4.6 MEDIUM · CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
Weaknesses (CWE)
CWE-1236
Affected products
0 configuration(s)
Published / Modified
2026-07-07 / 2026-07-08

NVD description (verbatim)

Actual is a local-first personal finance app. Prior to 26.6.0, @actual-app/cli ships a hand-rolled CSV serializer in packages/cli/src/output.ts used whenever the global --format csv option is passed, whose escapeCsv helper only handles RFC 4180 delimiter, quote, and newline escaping and does not neutralize standard CSV formula-injection prefixes. Any CLI command that streams an object array containing user-controlled strings, including transactions list, accounts list, payees list, categories list, tags list, category-groups list, rules list, schedules list, and query, can emit cells that auto-evaluate when the resulting CSV is opened in Excel, LibreOffice Calc, or Google Sheets, enabling data exfiltration and arbitrary formula execution. This issue is fixed in version 26.6.0.

5 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability exists in packages/cli/src/output.ts, where a custom CSV serializer's escapeCsv helper implements only RFC 4180-compliant escaping for delimiters, quotes, and newlines—but does not strip formula-injection prefixes (=, +, -, @, etc.). Multiple CLI commands that output object arrays with user-controlled strings are affected: transactions list, accounts list, payees list, categories list, tags list, category-groups list, rules list, schedules list, and query. When the resulting CSV is parsed by spreadsheet software, cells prefixed with formula triggers are evaluated as formulas rather than literal text, allowing code execution within the spreadsheet application's sandbox.

Business impact

For Actual users who export financial data via CLI, this vulnerability enables attackers with local machine access to inject formulas into exported datasets. When a user opens the malicious CSV in Excel or similar software, the formulas silently execute, potentially exfiltrating sensitive financial data (account balances, transaction details, personal information) or performing other actions the spreadsheet application permits. Organizations using Actual in automated pipelines or shared environments face elevated risk if untrusted parties can influence the data being exported or if CSV files are shared without validation.

Affected systems

Actual versions prior to 26.6.0 are affected. The vulnerability is triggered only when users export data using the CLI with the --format csv option. Desktop and web versions of Actual are not directly affected unless they invoke the CLI backend. The impact depends on: (1) whether users have local CLI access, (2) whether exported CSVs are opened in formula-enabled spreadsheet applications, and (3) whether the data source contains attacker-controlled content.

Exploitability

Exploitation requires local machine access (AV:L), no special privileges beyond a local user account (PR:L), and user interaction—the user must open the exported CSV in a spreadsheet application that auto-evaluates formulas (UI:R). The barrier to exploitation is low for insiders or attackers who have compromised a user account. However, this is not remotely exploitable and requires the victim to perform an action (opening the file). CVSS score 4.6 reflects medium severity: some scope crossing occurs because formula execution can access system resources outside the spreadsheet, but impact is limited to confidentiality and integrity, not availability.

Remediation

Update Actual to version 26.6.0 or later. The fix modifies the escapeCsv helper to neutralize formula-injection prefixes in addition to RFC 4180 escaping. Users unable to update immediately should avoid exporting CSV files from untrusted or mixed data sources and should treat exported CSVs as potentially unsafe until opened in a restricted environment. Consider disabling CLI CSV export if not needed.

Patch guidance

Deploy version 26.6.0 when available in your release channel. This is a straightforward security update with no known breaking changes. Verify the update by checking Actual's release notes or running the CLI version command post-upgrade. If you maintain a custom build of Actual, audit packages/cli/src/output.ts to confirm the escapeCsv function now includes formula-prefix neutralization (commonly achieved by prefixing cells with a single quote or stripping characters like =, +, -, @, tab).

Detection guidance

Monitor for CLI usage patterns and exported CSV files in environments where Actual is deployed. If using Actual in automation or data pipelines, inspect exported CSVs for cells beginning with formula characters (=, +, -, @). Security information and event management (SIEM) systems can flag spreadsheet files created from Actual exports if a DLP tool is in place. In managed environments, consider restricting CLI access or logging all --format csv invocations for audit purposes.

Why prioritize this

Although the CVSS score is moderate (4.6), prioritize this patch for organizations using Actual's CLI in shared or multi-user environments, or where Actual data includes user-supplied content. The vulnerability is easily exploitable by local users and affects a common export workflow. However, it does not warrant emergency response unless your threat model includes compromised local accounts or insider threats. Standard patch cycles (within 30 days) are appropriate for most deployments.

Risk score, explained

CVSS 4.6 (MEDIUM) reflects: local attack vector and low privileges required limit the addressable attack surface; user interaction is mandatory (spreadsheet must be opened); scope crosses (formula execution can touch OS-level resources); and impact is limited to confidentiality and integrity (no availability impact). The score appropriately downgrades severity compared to a remote, unauthenticated formula-injection flaw, yet acknowledges that local users can realistically exploit this to exfiltrate financial data.

Frequently asked questions

Can this vulnerability be exploited remotely?

No. The vulnerability requires local machine access (AV:L per CVSS). An attacker must either have a local user account, have compromised one, or have physical access to the machine. Remote exploitation is not possible unless an attacker first gains a foothold via another vulnerability.

Which Actual users are at risk?

Users who export data via the CLI using the --format csv option are at risk if the data source or destination is untrusted. Users of the Actual desktop or web GUI are not directly affected. However, if a GUI integrates with the CLI backend, the risk may extend to them.

Does opening a CSV file in Google Sheets trigger the formula injection?

Yes. Google Sheets auto-evaluates formulas in imported CSV files, making it vulnerable to this attack. Excel and LibreOffice Calc are similarly affected. Some spreadsheet viewers that do not execute formulas (e.g., plain-text editors) are not vulnerable.

What should I do if I've already shared exported CSVs?

Review the files for cells beginning with =, +, -, or @ characters. If found, they may contain injected formulas. Recommend recipients not open the files until you provide corrected versions. After upgrading to 26.6.0, re-export the data safely and reshare it.

This analysis is provided for informational purposes and reflects the vulnerability as described in the CVE record and Actual's advisory. No exploit code or proof-of-concept is included. Organizations should validate patch applicability and test in their environment before deployment. SEC.co makes no warranty regarding the accuracy of third-party vendor advisories or patch availability timelines. Always consult the official Actual release notes and security documentation for the most current guidance. Source: NVD (public-domain), retrieved 2026-08-16. Analysis generated by SEC.co (claude-haiku-4-5).