AI DRAFT / HUMAN REVIEW

This briefing was produced by AI from the linked sources and is scheduled for human editorial review within 24 hours. Read the sources directly for material decisions.

EVIDENCE — CVE-2026-87858 was published on 21 September 2026 with a CVSS 4.0 score of 7.2. Temporal Server treated a non-empty, caller-supplied source header as proof that a Workflow completion callback was internal. An authenticated caller with write access to one namespace could exploit that trust decision to make the History service send a state-changing POST to the internal frontend, where the request was authorized as a system administrator. The public record does not report active exploitation.

THE SERVER SUPPLIED THE PRIVILEGE — The attacker did not need network access to the internal frontend. A callback URL only had to use a host admitted by the configured callback allowlist while its path, query, body, and source header were attacker-controlled. Temporal rewrote the scheme and host for internal delivery but preserved the attacker-selected API route and payload. Confirmed effects include terminating Workflows in other namespaces, registering namespaces, changing another namespace's configuration, and deleting a namespace with its Workflows.

EXPOSURE REQUIRES THREE SETTINGS — A deployment is exposed only when an internal frontend runs with services.internal-frontend.rpc.httpPort set to a non-zero value, at least one component.callbacks.allowedAddresses rule admits a host, and authorization is enabled. The callback allowlist is empty by default, and Temporal's stock static topology does not include an internal frontend. Releases 1.30.0 and later accept any non-empty source header under those conditions; versions 1.25.0 through 1.29.7 have a narrower form that requires the header to equal a configured cluster ID.

THE FIX MOVES TRUST INTO THE URL SCHEME — Temporal 1.32.0 routes system callbacks through temporal://system and disables legacy source-header inspection by default. Releases 1.30.7 and 1.31.3 add the callback.inspectSourceHeader control, but their backports retain a compatibility-oriented default that can leave legacy inspection enabled during mixed-version migration. Operators on those branches should migrate worker callbacks, then explicitly disable the legacy behavior; installing the point release without checking the effective setting is not enough.

WHAT TO CHECK — Inventory self-hosted Temporal Server versions and inspect the internal-frontend HTTP port, effective callback allowlist, authorization state, and callback.inspectSourceHeader value together. Upgrade to 1.32.0 or a later fixed release where possible; if remaining on 1.30.7 or 1.31.3, complete the temporal://system migration and turn legacy header inspection off. Use DescribeWorkflowExecution to find registered completion callbacks and investigate unexpected cross-namespace terminations, registrations, configuration changes, or deletions. Temporal warns that the internal frontend logs method and URL only at debug level, so missing default-level request logs do not prove the flaw was not used.

Published 21 SEP 2026Back to Daily Briefs