CVE-2026-89140
Temporal Server internal completion callbacks are not bound to their namespace, allowing cross-namespace changes to Scheduler V2 schedule state
02 Description
Temporal Server internal completion callbacks are not bound to their namespace, allowing cross-namespace changes to Scheduler V2 schedule state
03 Exploitation and scoring
- Exploitation
- Assessed, none found. CISA's assessment recorded neither public exploit code nor evidence of exploitation when it was made.
- SSVC decision
- ExploitationnoneCISA recorded no public exploit code and no evidence of exploitation.
- AutomatablenoAt least one step from reconnaissance to exploitation cannot be reliably automated.
- Technical ImpactpartialSuccessful exploitation gives limited control of the vulnerable component.
- EPSS probability
- 0.33% probability of exploitation activity in the next 30 days.
- EPSS percentile
- Equal to or higher than the score of 25.8% of scored records. A rank, not a probability.
- NVD base score
- 6.0 (CVSS v4.0), scored by the NVD independently of the CNA.
- NVD CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
- NVD analysis status
- Awaiting Analysis. NVD last modified this record on 2026-10-16.
- Red Hat severity
- No Red Hat rating. Red Hat rates the CVEs that affect its products.
Exploit-prediction scores from FIRST. Independent scoring and analysis status from the NVD. Vendor severity from Red Hat. Exploitation assessment and catalog membership from CISA.
04 Metadata
- Published
- 2026-10-12 18:44Z16 DAYS AGO
- Last updated
- 2026-10-16 17:52Z12 DAYS AGO
- Reserved
- 2026-09-10
- Assigning CNA
- Temporal
- Record state
- PUBLISHED
- Severity
- Medium (CVSS 6.0)
- CNA CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
- Weaknesses
- CWE-639Authorization Bypass Through User-Controlled KeyBase
- Data version
- 5.2
- Document digest
- 2c0e44e32da17f79efb100fb66758d7a061aa6e48484defcd256ceebf8c812a1
05 Affected products
06 References
- github.comFix pull requesthttps://github.com/temporalio/temporal/pull/11876
- github.comFix commithttps://github.com/temporalio/temporal/commit/a210eeb8c2cc7e22338bb4f552ff1171d8f35969
- github.comBackport pull request for the 1.30 release linehttps://github.com/temporalio/temporal/pull/12318
- github.comBackport pull request for the 1.31 release linehttps://github.com/temporalio/temporal/pull/12319
- github.comFollow-up pull request for the 1.31 release line, checking every reading of the callback tokenhttps://github.com/temporalio/temporal/pull/12382
- github.comBackport pull request for the 1.32 release linehttps://github.com/temporalio/temporal/pull/12320
- github.comBackport commit on release/v1.32.xhttps://github.com/temporalio/temporal/commit/d0bd72e85014f31ecfbada1b436b08806496dbef
- github.comTemporal Server 1.30.8https://github.com/temporalio/temporal/releases/tag/v1.30.8
- github.comTemporal Server 1.31.4https://github.com/temporalio/temporal/releases/tag/v1.31.4
- github.comTemporal Server 1.32.1https://github.com/temporalio/temporal/releases/tag/v1.32.1
07 Remediation
Upgrade to Temporal Server 1.30.8, 1.31.4, or 1.32.1, as appropriate for the deployed minor release line. The fix requires no configuration change and adds no setting. When a start request attaches a temporal://internal completion callback, fixed releases decode the component reference in the callback token and reject the request with InvalidArgument unless the reference names both a namespace and a business identifier and its namespace is the namespace of the request. The check runs in the Frontend service when the callback is attached, before it is persisted; it does not apply to callbacks that were attached and persisted before the upgrade, which are delivered as before. Releases before 1.30.0 do not contain the reserved internal callback address and are not affected. On 1.32, completion callbacks attached through Workflow Update are not checked in 1.32.1. That path is off by default and is not a released feature on 1.32: keep history.enableUpdateCallbacks set to false.