CVE-2026-42461 - Arcane Compose template secret disclosure
Arcane versions before 1.18.0 register several custom template read
endpoints without an authentication requirement. An unauthenticated network
client can list templates and read stored Compose YAML plus associated .env
content from the Arcane instance.
The vulnerable flow matters because Arcane’s “Save as Template” feature can
persist operator-provided environment values verbatim. In real deployments,
template envContent can contain database passwords, registry credentials,
OIDC client secrets, Sentry DSNs, payment provider keys, internal hostnames, and
other deployment context that should never be returned to unauthenticated
callers.
Affected versions
- Vulnerable:
github.com/getarcaneapp/arcane/backend <1.18.0 - Fixed:
github.com/getarcaneapp/arcane/backend 1.18.0+ - Affected endpoint family:
GET /api/templates*, including template list, individual template, and template content reads.
Indicator-of-exposure
- The repository builds, deploys, vendors, or pins Arcane before
1.18.0. - The Arcane API is reachable by users, tenants, internal networks, VPN users, reverse proxies, or automation without path-level authentication.
- Custom templates are enabled or the deployment has saved templates derived from real Compose projects, swarm stacks, or GitOps project definitions.
- Stored template rows or backup data include Compose YAML,
.envtext, parsed environment key/value pairs, registry metadata, service names, or internal host references. - API logs show unauthenticated
GETrequests to/api/templates,/api/templates/all,/api/templates/{id}, or/api/templates/{id}/content.
Quick checks:
rg -n "getarcaneapp/arcane|arcane/backend|RegisterTemplates|ListTemplates|GetAllTemplates|GetTemplateContent|/api/templates|BearerAuth|ApiKeyAuth" .
go list -m all | rg 'github.com/getarcaneapp/arcane'
rg -n "envContent|ComposeTemplate|Save as Template|PROTECTED_PREFIXES|templates/\\{id\\}/content|parseSecurityRequirements" backend frontend charts deploy docker-compose*.yml Dockerfile* .Remediation strategy
- Upgrade Arcane to
1.18.0+everywhere this repository controls binary, container, Helm, compose, GitOps, or module selection. - If the repository owns a fork or vendored Arcane code, require the same
BearerAuthorApiKeyAuthpolicy on every custom template read endpoint that template writes already require. - Prefer fail-closed API registration defaults: endpoint handlers should be unauthenticated only when they explicitly opt out for a documented public route.
- Add regression tests that unauthenticated callers receive
401or403for template list and template content reads, and authenticated users can only access templates they are authorized to view. - Treat all stored template
.envvalues as exposed if the vulnerable API was reachable. Rotate secrets, invalidate sessions or API keys derived from those values, and review access logs before relying on containment.
The prompt
Model context: this prompt was generated by GPT 5.5 Extra High reasoning.
You are remediating CVE-2026-42461 (Arcane unauthenticated disclosure of
custom Compose templates and `.env` secrets). Produce exactly one output:
- A reviewer-ready PR/change request that upgrades or patches Arcane, verifies
template-read authorization, and documents operator secret cleanup, or
- TRIAGE.md if this repository does not own an affected Arcane deployment or
safe patch path.
## Rules
- Scope only CVE-2026-42461.
- Treat Compose YAML, `.env` values, registry tokens, database passwords, OIDC
secrets, API keys, internal hostnames, template names, and Arcane API keys as
sensitive.
- Do not print, snapshot, commit, or copy real template content or secret values
while testing.
- Do not prove exposure by fetching production template content.
- Do not preserve unauthenticated template reads for compatibility.
- Do not auto-merge.
## Steps
1. Inventory every Arcane reference controlled by this repository:
`go.mod`, `go.sum`, vendor trees, Dockerfiles, compose files, Helm charts,
Kubernetes manifests, Terraform, Ansible, GitOps overlays, SBOMs, generated
dependency manifests, and deployment docs.
2. Determine every deployed or buildable Arcane version. A target is vulnerable
if it resolves to `github.com/getarcaneapp/arcane/backend <1.18.0` or an
Arcane container/image tag before `1.18.0`.
3. Determine whether the vulnerable template-read paths are reachable:
- `GET /api/templates`;
- `GET /api/templates/all`;
- `GET /api/templates/{id}`;
- `GET /api/templates/{id}/content`;
- any reverse-proxy rewrite, generated API client, or UI path that maps to
those handlers.
4. Determine whether custom templates can contain real deployment secrets:
Compose `.env` files, swarm-stack variables, registry credentials, database
DSNs, OAuth/OIDC settings, webhook tokens, cloud keys, or third-party API
keys.
5. If this repository only contains an Arcane client or unrelated docs, stop
with `TRIAGE.md` naming the owner, files checked, affected version evidence,
and required fixed version `1.18.0+`.
6. Upgrade every controlled Arcane deployment to `1.18.0+`. Regenerate
lockfiles, image digests, SBOMs, deployment render output, and dependency
reports.
7. If this repository owns a fork or vendored patch instead of a pure upgrade,
update template read route registration so each affected `GET` operation has
the same security requirement used by template create/update/delete routes:
`BearerAuth`, `ApiKeyAuth`, or the repository's equivalent authenticated
principal requirement.
8. Add an explicit fail-closed route registration test or policy check:
unauthenticated routes must be declared through an allow-list of public
operations, and template operations must not appear in that allow-list.
9. Add safe tests using synthetic template fixtures only:
- unauthenticated requests to every affected template read path return `401`
or `403`;
- authenticated callers can read allowed templates;
- unauthorized callers cannot read another tenant, environment, or team
template if the product has ownership boundaries;
- response bodies for denied requests never include Compose YAML, parsed
environment variables, or template metadata.
10. Add deployment containment where this repository controls it:
block unauthenticated `GET /api/templates*` at the reverse proxy, API
gateway, service mesh, or ingress during rollout, especially when the
Arcane API is reachable from shared internal networks.
11. Add a PR body section named `CVE-2026-42461 operator actions` that states:
- Arcane versions before and after the change;
- whether custom templates were enabled;
- whether unauthenticated network paths could reach `/api/templates*`;
- which secret classes may have existed in stored template `.env` content;
- which API keys, registry credentials, database passwords, OAuth/OIDC
secrets, webhook tokens, or cloud credentials should be rotated;
- which access logs should be reviewed for unauthenticated template reads.
12. Run relevant validation: Go tests, route/authz tests, frontend API contract
tests if present, lint/typecheck, image build, deployment render diff, SBOM
refresh, and dependency/security scans available in this repository.
13. Use PR title:
`fix(sec): remediate CVE-2026-42461 in Arcane templates`.
## Stop conditions
- No affected Arcane deployment, package, image, fork, or template API path is
controlled by this repository.
- The repository cannot consume Arcane `1.18.0+` without a larger platform
migration.
- Template ownership or tenant boundaries are unclear and changing them could
expose or hide customer data incorrectly; document the risk and require a
product/security decision.
- Secret rotation requires production access or customer approval outside the
repository; document the exact operator action instead of inventing a local
migration.
- Validation fails for unrelated pre-existing reasons; document those failures
instead of broadening scope.Verification - what the reviewer looks for
- No controlled Arcane package, image, Helm value, compose file, SBOM, or
deployment manifest remains pinned before
1.18.0. - Every custom template read endpoint requires authentication and any applicable ownership or tenant authorization.
- Tests cover unauthenticated denial for list, all, single-template, and content-read endpoints.
- Denied responses do not leak template names, Compose YAML,
.envcontent, or parsed environment variables. - Operator actions clearly state whether secret rotation and log review are required for the exposure window.
Watch for
- Updating the application image while a Helm chart, compose file, GitOps overlay, or backup/restore runbook still deploys an older Arcane tag.
- Adding authentication to the UI while generated API routes or direct backend calls remain unauthenticated.
- Tests that assert
200for public template reads because the old API contract accidentally treated templates as public catalogue data. - Logging real
.envcontent while adding regression tests or incident inventory.
References
- GitHub Advisory: https://github.com/advisories/GHSA-cxx3-hr75-4q96
- Arcane
v1.18.0release: https://github.com/getarcaneapp/arcane/releases/tag/v1.18.0