Read the docs
TI-2026-25729 Aliases CVE-2026-33318GHSA-prp4-2f49-fcgp

Actual has Privilege Escalation via 'change-password' Endpoint on OpenID-Migrated Servers

Priority HIGH 73CWE-284Published · Updated

Key facts

Attack vector
Network
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
Security bypass
Confidentiality · integrity · availability
High · High · High
Fix status
Fixed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-284.

Summary

Actual is a local-first personal finance tool. Prior to version 26.4.0, any authenticated user (including `BASIC` role) can escalate to `ADMIN` on servers migrated from password authentication to OpenID Connect. Three weaknesses combine: `POST /account/change-password` has no authorization check, allowing any session to overwrite the password hash; the inactive password `auth` row is never removed on migration; and the login endpoint accepts a client-supplied `loginMethod` that bypasses the server's active auth configuration. Together these allow an attacker to set a known password and authenticate as the anonymous admin account created during the multiuser migration. The three weaknesses form a single, sequential exploit chain — none produces privilege escalation on its own. Missing authorization on POST /change-password allows overwriting a password hash, but only matters if there is an orphaned row to target. Orphaned password row persisting after migration provides the target row, but is harmless without the ability to authenticate using it. Client-controlled loginMethod: "password" allows forcing password-based auth, but is useless without a known hash established by step 1. All three must be chained in sequence to achieve the impact. No single weakness independently results in privilege escalation. The single root cause is the missing authorization check on /change-password; the other two are preconditions that make it exploitable. Version 26.4.0 contains a fix.

Why it matters now

Exploitation Proof of concept CISA SSVC · not in CISA KEV
EPSS 0.00472 41st percentileScored 2026-11-07
Public exploit Yes 1 exploit referenceTagged by NVD
Fix Fixed actual (actualbudget): 26.4.0@actual-app/sync-server (npm): 26.4.0

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
Poc
Automatable
No
Technical impact
Total

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
actualbudgetactualbefore 26.4.026.4.0Patch availableCNA
—@actual-app/sync-server (npm)before 26.4.026.4.0Patch availableGHSA-prp4-2f49-fcgp
  • actual Vendoractualbudget Affected before 26.4.0 Fixed in 26.4.0 Patch available CNA
  • @actual-app/sync-server (npm) Vendor— Affected before 26.4.0 Fixed in 26.4.0 Patch available GHSA-prp4-2f49-fcgp

CPE configurations NVD · 1

CPEVersionsRoleVendor
cpe:2.3:a:actualbudget:actual:*:*:*:*:*:node.js:*:*before 26.4.0Vulnerableactualbudget
  • cpe:2.3:a:actualbudget:actual:*:*:*:*:*:node.js:*:* Versions before 26.4.0 Vulnerable ·actualbudget

Remediation

  • Fix · CNA actual (actualbudget) Fixed in 26.4.0
  • Fix · GHSA-prp4-2f49-fcgp @actual-app/sync-server (npm) Fixed in 26.4.0 Advisory →

Timeline

  1. 2026-10-02 Threatist record created from CVE-2026-33318
  2. 2026-10-03 Alias added: GHSA-prp4-2f49-fcgp

References

  • TI-2026-21972 ActualBudget server is Missing Authentication for SimpleFIN and Pluggy AI bank sync endpoints CVSS 4.0CRITICAL 9.2
  • TI-2026-22020 ActualBudget missing authorization in sync endpoints allows cross-user budget file access in multi-user mode CVSS 4.0MEDIUM 5.7
  • TI-2026-02669 Actual Sync Server 26.2.1 - Authenticated Path Traversal CVSS 4.0MEDIUM 5.3

Sources