# CVE-2026-3089: Actual Sync Server authenticated path traversal in file upload

Source: https://junglewise.ai/threats/cve-2026-3089-actual-budget-actual-sync-server-path-traversal-in-file-upload  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-03-10. Updated: 2026-09-25  
License: CC BY 4.0 with a link back

CVE-2026-3089 · Severity: medium · CVSS 4 · Published 2026-03-10

Actual Sync Server is a backend service that handles file synchronization for the Actual personal finance application. An authenticated user can exploit improper validation of file upload requests to write files outside the intended directory, potentially compromising the integrity of the server's filesystem. This allows an attacker with a valid account to place malicious files in arbitrary locations on the system.

Technologies: [Actual Budget Sync Server](https://junglewise.ai/threats/technologies/sync-server), [@actual-app/sync-server (npm)](https://junglewise.ai/threats/technologies/actual-app-sync-server). Vendors: [Actual Budget](https://junglewise.ai/threats/vendors/actual-budget), [npm](https://junglewise.ai/threats/vendors/npm).

## Quick answers

**Is CVE-2026-3089 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-3089 being exploited in the wild.

**How severe is CVE-2026-3089?** Medium severity, with a CVSS score of 4, published 10 March 2026.

**Which products and versions are affected?** Actual Budget Sync Server <= 26.2.0; @actual-app/sync-server (npm) SEMVER:introduced=0,fixed=26.3.0.

**Is there a fix for CVE-2026-3089?** Yes. @actual-app/sync-server (npm): upgrade to 26.3.0 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-3089 attacked?** It is attacked over the network, in a hosted service.

**Am I affected by CVE-2026-3089?** Check whether you run Actual Budget Sync Server or @actual-app/sync-server (npm) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- @actual-app/sync-server (npm): upgrade to 26.3.0 or later

  ```sh
  npm install @actual-app/sync-server@26.3.0
  ```


## Technical details

Actual Sync Server contains a path traversal vulnerability (CWE-22) in the file upload endpoint POST /sync/upload-user-file. The vulnerability stems from insufficient validation of the user-supplied x-actual-file-id header, which allows attackers to inject traversal sequences (../) to escape the intended userFiles directory. An authenticated attacker can exploit this to write files to arbitrary locations on the filesystem outside the restricted directory. The vulnerability requires valid credentials to exploit (authentication is required) but no user interaction. The attack vector is network-accessible. A filesystem sandbox can mitigate the risk in unpatched versions. The vulnerability has been fixed in version 26.3.0 and later through proper file ID validation.

## Affected products

- Actual Budget @actual-app/sync-server <= 26.2.0

## Identifiers

- CVE-2026-3089
- GHSA-27vg-33gh-4hwg

## Timeline

- 2026-03-07: disclosed
- 2026-03-10: patched: Fixed in version 26.3.0

## References

- [https://github.com/actualbudget/actual/security/advisories/GHSA-27vg-33gh-4hwg](https://github.com/actualbudget/actual/security/advisories/GHSA-27vg-33gh-4hwg)
- [https://github.com/actualbudget/actual/pull/7067](https://github.com/actualbudget/actual/pull/7067)
- [https://github.com/actualbudget/actual/commit/18072e1d8b5281db43ded8b21433ee177bae9dfa](https://github.com/actualbudget/actual/commit/18072e1d8b5281db43ded8b21433ee177bae9dfa)
- [https://fluidattacks.com/advisories/fugue](https://fluidattacks.com/advisories/fugue)
- [https://github.com/actualbudget/actual](https://github.com/actualbudget/actual)

## Related threats

- [Actual Sync Server CORS proxy GitHub allowlist bypass](https://junglewise.ai/threats/cve-2026-57449-actual-is-a-local-first-personal-finance-tool-prior-to-26-7-0)
- [Actual Budget insufficient session expiration for disabled OpenID users](https://junglewise.ai/threats/cve-2026-49229-actual-budget-insufficient-session-expiration-for-disabled-openid)
- [Actual sync-server improper authorization in secrets API](https://junglewise.ai/threats/cve-2026-46700-actual-sync-server-improper-authorization-in-secrets-api)
- [Actual Budget sync-server information disclosure in OpenID config](https://junglewise.ai/threats/cve-2026-42604-actual-budget-sync-server-information-disclosure-in-openid-config)
- [Actual has Privilege Escalation via 'change-password' Endpoint on OpenID-Migrated Servers](https://junglewise.ai/threats/cve-2026-33318-actual-has-privilege-escalation-via-change-password-endpoint-on)
