Description
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.
Published: 2026-07-07
Score: 4.6 Medium
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Actual is a local‑first personal finance application. Before version 26.6.0 its command‑line interface uses a custom CSV serializer whose escapeCsv helper only escapes RFC 4180 delimiters, quotes, and newlines but does not neutralize standard CSV formula‑injection prefixes such as ‘=’, ‘+’, ‘-’, or ‘@’. As a result any user‑controlled strings that are included in exported lists—transactions, accounts, payees, categories, tags, category‑groups, rules, schedules, or queries—can appear in CSV cells that automatically evaluate as formulas when opened in spreadsheet applications. This flaw, classified as a CSV formula injection (CWE‑1236), allows an attacker to execute spreadsheet formulas that can exfiltrate sensitive information or perform unauthorized calculations.

Affected Systems

The flaw affects the actualbudget:actual product, specifically the @actual-app/cli component used for exporting data. All releases prior to v26.6.0 use the vulnerable serializer; the issue was fixed in release v26.6.0. The vulnerability is exercised whenever the global --format csv option is invoked on any CLI command that streams an array of objects containing user‑controlled text.

Risk and Exploitability

The CVSS base score of 4.6 indicates moderate severity. The EPSS score of < 1 % and its absence from the CISA KEV catalog indicate a low probability of widespread exploitation. The vulnerability arises from improper handling of CSV escaping (CWE‑1236); it requires that an attacker supply or control data that will be exported by the CLI and then open the resulting CSV in a spreadsheet application such as Excel, LibreOffice Calc, or Google Sheets. When such a file is accessed, the injected formula can execute, potentially leaking sensitive data or performing unwanted calculations. The attack does not need remote code execution on the host running Actual; it relies on user interaction to view the CSV, which limits its impact to scenarios where exported data is shared or opened locally.

Generated by OpenCVE AI on July 26, 2026 at 18:58 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade the @actual-app/cli package to v26.6.0 or newer to replace the vulnerable CSV serializer.
  • If a version upgrade is not immediately possible, avoid using the --format csv option with data that may contain untrusted text, or sanitize all string fields by stripping leading formula characters such as ‘=’, ‘+’, ‘-’, or ‘@’.
  • Periodically scan exported CSV files for unexpected leading formula characters and ensure they are not automatically executed when opened in spreadsheet applications.

Generated by OpenCVE AI on July 26, 2026 at 18:58 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-7gh7-258j-4mpq @actual-app/cli `--format csv` Output Vulnerable to CSV Formula Injection via Custom `escapeCsv` Helper
History

Wed, 08 Jul 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 07 Jul 2026 22:45:00 +0000

Type Values Removed Values Added
First Time appeared Actualbudget
Actualbudget actual
Vendors & Products Actualbudget
Actualbudget actual

Tue, 07 Jul 2026 21:00:00 +0000

Type Values Removed Values Added
Description 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.
Title Actual: CSV Formula Injection in `@actual-app/cli` `--format csv` Output via Custom `escapeCsv` Helper
Weaknesses CWE-1236
References
Metrics cvssV3_1

{'score': 4.6, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N'}


Subscriptions

Actualbudget Actual
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-08T13:00:02.162Z

Reserved: 2026-05-15T21:46:51.547Z

Link: CVE-2026-46672

cve-icon Vulnrichment

Updated: 2026-07-08T12:59:54.127Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-26T19:00:02Z

Weaknesses
  • CWE-1236

    Improper Neutralization of Formula Elements in a CSV File