Disclosure summary
## Summary 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 such as: ```text https://api.github.com/repos/acme/plugin-private/contents/.env https://api.github.com/repos/acme/plugin-secrets/actions/secrets https://api.github.com/repos/acme/plugin-internal/releases ``` 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. ## Affected Endpoint - `GET /cors-proxy?url=...` This endpoint is mounted only when: ```js if (config.get('corsProxy.enabled')) { app.us
Source-specific records & product guidance
Sources retain their own attribution and scoring. Follow the original record to confirm affected versions, fixed releases, and configuration conditions.
GitHub Reviewed Security Advisories · GHSA-m62c-5q34-f3cf
Open original source · Updated Oct 07, 2026
Actual Sync Server: CORS Proxy GitHub API Allowlist Prefix Bypass Leaks Private Repositories Through the Server GitHub Token
Source severity: HIGH / 7.1
| Ecosystem | Package | Affected range | First patched |
|---|---|---|---|
| npm | @actual-app/sync-server | 26.7.0 |
Original records & references
- NIST NVD record
- CVE Program record
- github.com — Reviewed advisory
PUBLISHED 2026-10-07T10:00:45-04:00
MODIFIED 2026-10-07T10:00:47-04:00
INGESTED 2026-10-08T12:05:11-04:00