Impact
Actual is a local-first personal finance tool. Prior to version 26.6.0, the GET /secret/:name endpoint on the @actual-app/sync-server only checked that the caller had a valid session and did not verify the caller’s admin status; the sibling POST /secret/ endpoint enforces an admin check when OpenID is used. Consequently, any authenticated non-admin BASIC user in an OpenID multi-user deployment can probe the secrets store to discover which admin-managed bank-sync integrations have been configured, such as simplefin_accessKey, pluggyai_clientSecret, pluggyai_itemIds, and gocardless secrets. The flaw is classified as CWE-285 and was fixed in version 26.6.0.
Affected Systems
The vulnerable component is the Actual Budget sync server (@actual-app/sync-server). All releases prior to version 26.6.0 are affected, including single-user and multi-user OpenID deployments that use BASIC authentication. The issue is fixed in release 26.6.0.
Risk and Exploitability
The CVSS score of 4.3 indicates moderate risk. The EPSS score is < 1%, indicating a very low probability of exploitation. The vulnerability is not listed in the CISA KEV catalog. An attacker only needs a valid authenticated session within the sync server; enumeration can be performed by repeatedly sending GET requests with different secret names. Once patched, the risk is eliminated, but unpatched installations remain vulnerable to disclosure of sensitive credential information.
OpenCVE Enrichment
Github GHSA