Description
Actual is a local-first personal finance tool. Prior to 26.7.0, Actual Sync Server's CORS proxy is intended to let authenticated users fetch resources only from repositories listed in the official plugin allowlist. When `ACTUAL_GITHUB_TOKEN` is configured, the proxy automatically attaches the server's GitHub token to GitHub requests. The GitHub API allowlist check uses a raw `startsWith()` prefix test for `/repos/{owner}/{repo}` without requiring a path boundary after the repository name. If an allowlisted public plugin repository is `https://github.com/acme/plugin`, the proxy also accepts GitHub API URLs. Those URLs are outside the allowlisted repository but still pass because their API path starts with `/repos/acme/plugin`. The proxy then forwards the request with the server's `ACTUAL_GITHUB_TOKEN`, allowing any authenticated Actual user to read private GitHub resources reachable by that token. Version 26.7.0 fixes the issue.
Published: 2026-09-25
Score: 7.1 High
EPSS: n/a
KEV: No
Impact: Confidentiality compromise via unauthorized exposure of private GitHub repositories
Action: Patch
AI Analysis

Impact

Actual Sync Server’s CORS proxy was designed to forward requests only to repositories that appear on an allowlist. The server applies legacy string matching that checks whether the requested API path starts with the repository prefix but does not enforce a path boundary. As a result, an attacker can target GitHub API URLs that partially match an allowlisted public repository and the proxy forwards those requests with a server‑side ACTUAL_GITHUB_TOKEN. Any authenticated user of the sync server can thus read private repositories belonging to the token holder, violating confidentiality.

Affected Systems

The vulnerability affects all installations of Actual budget Actual running version 26.6.0 and older. Upstream plugins from public repositories that start with an allowlisted owner/repo pair are the source for the bypass, but the impact is limited to any server that has a configured ACTUAL_GITHUB_TOKEN.

Risk and Exploitability

With a CVSS score of 7.1 the vulnerability is considered high severity. The EPSS score is currently unknown, and it is not listed in CISA’s KEV catalog. An authorized user can exploit the bug by simply sending a request through the sync server’s CORS proxy with a target GitHub API URL that satisfies the prefix rule; no additional privileges are required beyond normal operating access to the server. Because the server’s GitHub token is automatically attached, the attacker gains read access to private repositories that the token is entitled to.

Generated by OpenCVE AI on September 25, 2026 at 23:46 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Actual to version 26.7.0 or later to resolve the allowlist prefix check.
  • Remove or revoke the ACTUAL_GITHUB_TOKEN from the sync server until the patch is installed to prevent accidental credential leakage.
  • Monitor the server for suspicious GitHub API activity or unexpected data exposure after the update.

Generated by OpenCVE AI on September 25, 2026 at 23:46 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 26 Sep 2026 08:15:00 +0000

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

Fri, 25 Sep 2026 22:30:00 +0000

Type Values Removed Values Added
Description Actual is a local-first personal finance tool. Prior to 26.7.0, Actual Sync Server's CORS proxy is intended to let authenticated users fetch resources only from repositories listed in the official plugin allowlist. When `ACTUAL_GITHUB_TOKEN` is configured, the proxy automatically attaches the server's GitHub token to GitHub requests. The GitHub API allowlist check uses a raw `startsWith()` prefix test for `/repos/{owner}/{repo}` without requiring a path boundary after the repository name. If an allowlisted public plugin repository is `https://github.com/acme/plugin`, the proxy also accepts GitHub API URLs. Those URLs are outside the allowlisted repository but still pass because their API path starts with `/repos/acme/plugin`. The proxy then forwards the request with the server's `ACTUAL_GITHUB_TOKEN`, allowing any authenticated Actual user to read private GitHub resources reachable by that token. Version 26.7.0 fixes the issue.
Title Actual Sync Server: CORS Proxy GitHub API Allowlist Prefix Bypass Leaks Private Repositories Through the Server GitHub Token
Weaknesses CWE-200
CWE-284
CWE-863
References
Metrics cvssV4_0

{'score': 7.1, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Actualbudget Actual
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-25T22:10:39.706Z

Reserved: 2026-06-24T13:21:20.730Z

Link: CVE-2026-57449

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Deferred

Published: 2026-09-25T23:16:53.990

Modified: 2026-09-25T23:16:54.110

Link: CVE-2026-57449

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-26T08:00:10Z

Weaknesses
  • CWE-200

    Exposure of Sensitive Information to an Unauthorized Actor

  • CWE-284

    Improper Access Control

  • CWE-863

    Incorrect Authorization