Search
Find a vulnerability
Search criteria
ⓘ
Use this form to refine search results.
Full-text search supports keyword queries with ranking and filtering.
You can combine vendor, product, and sources to narrow results.
Enable “Apply ordering” to sort by date instead of relevance.
18 vulnerabilities
CVE-2026-89139 (GCVE-0-2026-89139)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:41 – Updated: 2026-09-21 15:24
VLAI
EPSS
VEX
Title
Temporal Server worker deployment compute provider executes a caller-supplied command on the Worker Service host
Summary
Temporal Server compiles a Worker Controller Instance module into its Worker Service, and that module registers a compute provider named subprocess whose function is to launch a worker by running a command on the machine hosting the Worker Service. The program name and the argument vector that provider executes are taken from the compute provider configuration supplied in the caller's request rather than from operator configuration. An authenticated caller holding only a write role in a single namespace can therefore configure a worker deployment version so that the Worker Service executes a command of the caller's choosing on its own host, under the account the server process runs as. Execution is immediate rather than deferred: the configuration handler invokes every provider using the invoke strategy directly after validating the submitted specification, so no scaling decision, task arrival, or unusual request sequence is required. Because the Worker Service process holds the persistence credentials for every namespace in the cluster and the cluster's TLS material, the consequence reaches beyond the caller's namespace to the cluster as a whole. The provider is present in the official temporal-server binaries and container images for the affected releases. The only control that can keep it unreachable is the compute provider allowlist, the per-namespace dynamic configuration setting workercontroller.compute_providers.enabled, and that control does not deny by default: its default value is an unset list, and the allowlist check is skipped entirely when the value is unset, so every registered compute provider is permitted, this one included. To determine whether a deployment is affected, check the following together. The deployed Temporal Server version is 1.31.0 or later and earlier than 1.31.3. The Worker Service is running, which it is in the default service set and therefore in a stock deployment. The effective per-namespace value of workercontroller.compute_providers.enabled is either unset or contains subprocess. And authorization is configured, meaning a real authorizer and claim mapper are in place; a deployment running with no authorizer already grants every caller unrestricted access to every namespace, so it has no namespace boundary for this to cross. Note that the separate per-namespace dynamic configuration setting workercontroller.enabled does not gate the affected path. It defaults to false, and a deployment that has never set it in any namespace is still affected, which was confirmed by running an affected release with no value for that setting present anywhere in dynamic configuration. To look for a compute configuration that is already attached, call DescribeWorkerDeploymentVersion for each worker deployment version in each namespace and check whether any scaling group's compute provider type is subprocess.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:24 UTC
CWE
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/temporalio/temporal/releases/t… | release-notes |
| https://github.com/temporalio/temporal/releases/t… | release-notes |
| https://github.com/temporalio/temporal-auto-scale… | patch |
| https://github.com/temporalio/temporal/pull/12021 | patch |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | Temporal Server |
Affected:
1.31.0 , < 1.31.3
(semver)
cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-89139",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "total"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:24:29.098568Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:24:46.549Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"cpes": [
"cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"packageName": "go.temporal.io/server",
"product": "Temporal Server",
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.31.3",
"status": "affected",
"version": "1.31.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eExploitation requires all of the following at once. The deployment runs an affected Temporal Server release with the Worker Service enabled, which is the default service set, so a stock deployment satisfies this. Authorization is configured through an authorizer and a claim mapper; without it every caller already holds unrestricted access to every namespace and there is no namespace boundary to cross. The caller holds a write role in some namespace, which is what the frontend requires to create a worker deployment version or to update a worker deployment version\u0027s compute configuration. A worker deployment is already registered in that namespace, because the create call updates an existing worker deployment rather than starting one; registering a worker deployment requires the same namespace write role the rest of the path already requires, so this adds a step without raising the privilege needed. No feature flag has to be enabled by the operator: system.enableDeploymentVersions defaults to true, the per-namespace Worker Controller component is enabled unconditionally, and the compute provider allowlist defaults to permitting every registered provider. The provider wraps the command it runs in the timeout utility, which must resolve on the host\u0027s PATH; the base image used for the official container images supplies it.\u003c/p\u003e"
}
],
"value": "Exploitation requires all of the following at once. The deployment runs an affected Temporal Server release with the Worker Service enabled, which is the default service set, so a stock deployment satisfies this. Authorization is configured through an authorizer and a claim mapper; without it every caller already holds unrestricted access to every namespace and there is no namespace boundary to cross. The caller holds a write role in some namespace, which is what the frontend requires to create a worker deployment version or to update a worker deployment version\u0027s compute configuration. A worker deployment is already registered in that namespace, because the create call updates an existing worker deployment rather than starting one; registering a worker deployment requires the same namespace write role the rest of the path already requires, so this adds a step without raising the privilege needed. No feature flag has to be enabled by the operator: system.enableDeploymentVersions defaults to true, the per-namespace Worker Controller component is enabled unconditionally, and the compute provider allowlist defaults to permitting every registered provider. The provider wraps the command it runs in the timeout utility, which must resolve on the host\u0027s PATH; the base image used for the official container images supplies it."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Reported internally at Temporal Technologies, Inc."
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eTemporal Server compiles a Worker Controller Instance module into its Worker Service, and that module registers a compute provider named subprocess whose function is to launch a worker by running a command on the machine hosting the Worker Service. The program name and the argument vector that provider executes are taken from the compute provider configuration supplied in the caller\u0027s request rather than from operator configuration. An authenticated caller holding only a write role in a single namespace can therefore configure a worker deployment version so that the Worker Service executes a command of the caller\u0027s choosing on its own host, under the account the server process runs as. Execution is immediate rather than deferred: the configuration handler invokes every provider using the invoke strategy directly after validating the submitted specification, so no scaling decision, task arrival, or unusual request sequence is required. Because the Worker Service process holds the persistence credentials for every namespace in the cluster and the cluster\u0027s TLS material, the consequence reaches beyond the caller\u0027s namespace to the cluster as a whole. The provider is present in the official temporal-server binaries and container images for the affected releases. The only control that can keep it unreachable is the compute provider allowlist, the per-namespace dynamic configuration setting workercontroller.compute_providers.enabled, and that control does not deny by default: its default value is an unset list, and the allowlist check is skipped entirely when the value is unset, so every registered compute provider is permitted, this one included. To determine whether a deployment is affected, check the following together. The deployed Temporal Server version is 1.31.0 or later and earlier than 1.31.3. The Worker Service is running, which it is in the default service set and therefore in a stock deployment. The effective per-namespace value of workercontroller.compute_providers.enabled is either unset or contains subprocess. And authorization is configured, meaning a real authorizer and claim mapper are in place; a deployment running with no authorizer already grants every caller unrestricted access to every namespace, so it has no namespace boundary for this to cross. Note that the separate per-namespace dynamic configuration setting workercontroller.enabled does not gate the affected path. It defaults to false, and a deployment that has never set it in any namespace is still affected, which was confirmed by running an affected release with no value for that setting present anywhere in dynamic configuration. To look for a compute configuration that is already attached, call DescribeWorkerDeploymentVersion for each worker deployment version in each namespace and check whether any scaling group\u0027s compute provider type is subprocess.\u003c/p\u003e"
}
],
"value": "Temporal Server compiles a Worker Controller Instance module into its Worker Service, and that module registers a compute provider named subprocess whose function is to launch a worker by running a command on the machine hosting the Worker Service. The program name and the argument vector that provider executes are taken from the compute provider configuration supplied in the caller\u0027s request rather than from operator configuration. An authenticated caller holding only a write role in a single namespace can therefore configure a worker deployment version so that the Worker Service executes a command of the caller\u0027s choosing on its own host, under the account the server process runs as. Execution is immediate rather than deferred: the configuration handler invokes every provider using the invoke strategy directly after validating the submitted specification, so no scaling decision, task arrival, or unusual request sequence is required. Because the Worker Service process holds the persistence credentials for every namespace in the cluster and the cluster\u0027s TLS material, the consequence reaches beyond the caller\u0027s namespace to the cluster as a whole. The provider is present in the official temporal-server binaries and container images for the affected releases. The only control that can keep it unreachable is the compute provider allowlist, the per-namespace dynamic configuration setting workercontroller.compute_providers.enabled, and that control does not deny by default: its default value is an unset list, and the allowlist check is skipped entirely when the value is unset, so every registered compute provider is permitted, this one included. To determine whether a deployment is affected, check the following together. The deployed Temporal Server version is 1.31.0 or later and earlier than 1.31.3. The Worker Service is running, which it is in the default service set and therefore in a stock deployment. The effective per-namespace value of workercontroller.compute_providers.enabled is either unset or contains subprocess. And authorization is configured, meaning a real authorizer and claim mapper are in place; a deployment running with no authorizer already grants every caller unrestricted access to every namespace, so it has no namespace boundary for this to cross. Note that the separate per-namespace dynamic configuration setting workercontroller.enabled does not gate the affected path. It defaults to false, and a deployment that has never set it in any namespace is still affected, which was confirmed by running an affected release with no value for that setting present anywhere in dynamic configuration. To look for a compute configuration that is already attached, call DescribeWorkerDeploymentVersion for each worker deployment version in each namespace and check whether any scaling group\u0027s compute provider type is subprocess."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Command execution on the host running the Temporal Worker Service, as the operating system account the server process runs under, reachable from an ordinary namespace write role. That process holds the persistence credentials for every namespace in the cluster as well as the cluster\u0027s TLS material, so the effect is cross-namespace and cluster-wide rather than confined to the caller\u0027s own namespace. In the official container image the server runs as an unprivileged account rather than root, which bounds host takeover but does not bound access to the credentials and key material the server process itself holds."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "HIGH",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-78",
"description": "CWE-78: Improper Neutralization of Special Elements used in an OS Command (\u0027OS Command Injection\u0027)",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-749",
"description": "CWE-749: Exposed Dangerous Method or Function",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-1188",
"description": "CWE-1188: Initialization of a Resource with an Insecure Default",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:41:23.342Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "First fixed release",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.32.0"
},
{
"name": "Temporal Server 1.31.3, first fixed 1.31 release",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.31.3"
},
{
"name": "Fix pull request, compute provider allowlist changed to deny by default",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal-auto-scaled-workers/pull/129"
},
{
"name": "Module bump carrying the fix into the Temporal Server 1.32 release branch",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/12021"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to Temporal Server 1.32.0 or 1.31.3. Both pin a Worker Controller Instance module revision whose compute provider allowlist denies by default instead of permitting every registered provider. Operators who cannot upgrade immediately can apply the workaround below, which closes the same path without waiting for a release. The 1.30 release line does not depend on the Worker Controller Instance module at all and is unaffected. Note that the change shipped in 1.32.0 and 1.31.3 makes the allowlist deny by default and does not change where the executed command comes from: for a compute provider an operator does deliberately add to the allowlist, the program name and argument vector still arrive in the caller\u0027s request.\u003c/p\u003e"
}
],
"value": "Upgrade to Temporal Server 1.32.0 or 1.31.3. Both pin a Worker Controller Instance module revision whose compute provider allowlist denies by default instead of permitting every registered provider. Operators who cannot upgrade immediately can apply the workaround below, which closes the same path without waiting for a release. The 1.30 release line does not depend on the Worker Controller Instance module at all and is unaffected. Note that the change shipped in 1.32.0 and 1.31.3 makes the allowlist deny by default and does not change where the executed command comes from: for a compute provider an operator does deliberately add to the allowlist, the program name and argument vector still arrive in the caller\u0027s request."
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Temporal Server worker deployment compute provider executes a caller-supplied command on the Worker Service host",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eSet the per-namespace dynamic configuration setting workercontroller.compute_providers.enabled to an explicit list naming only the compute providers the deployment intends to permit, omitting subprocess. An explicit empty list denies every compute provider. Leaving the setting unset is what permits everything, because the allowlist check is skipped when no value is configured; giving the setting any explicit value, an empty list included, makes the check run and denies any provider absent from the list. The request is then rejected with InvalidArgument before the provider runs. This is dynamic configuration, so it takes effect without restarting the server and is available during an incident rather than only at a maintenance window. Verify the effective value for every namespace in scope, including any namespace-constrained entries that could override a cluster-wide value.\u003c/p\u003e"
}
],
"value": "Set the per-namespace dynamic configuration setting workercontroller.compute_providers.enabled to an explicit list naming only the compute providers the deployment intends to permit, omitting subprocess. An explicit empty list denies every compute provider. Leaving the setting unset is what permits everything, because the allowlist check is skipped when no value is configured; giving the setting any explicit value, an empty list included, makes the check run and denies any provider absent from the list. The request is then rejected with InvalidArgument before the provider runs. This is dynamic configuration, so it takes effect without restarting the server and is available during an incident rather than only at a maintenance window. Verify the effective value for every namespace in scope, including any namespace-constrained entries that could override a cluster-wide value."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-89139",
"datePublished": "2026-09-21T11:41:23.342Z",
"dateReserved": "2026-09-10T23:08:25.314Z",
"dateUpdated": "2026-09-21T15:24:46.549Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-87858 (GCVE-0-2026-87858)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:39 – Updated: 2026-09-21 15:25
VLAI
EPSS
VEX
Title
Temporal Server completion callback source header can direct attacker-chosen requests to the internal frontend with administrator authorization
Summary
Temporal Server decided whether a Workflow completion callback was internal by reading a caller-supplied HTTP header. An authenticated caller holding only write permission in a single namespace could attach a completion callback whose URL host matched the configured callback address allowlist, whose URL path was any Temporal HTTP API route, and whose header map contained a non-empty header named source. When the History service delivered that callback, the non-empty source header caused it to re-target the request at the local frontend client and rewrite only the scheme and host, preserving the caller's path, query, and request body. Where an internal frontend is deployed with its HTTP API enabled, that client resolves to the internal frontend, which authorizes every request as a system administrator without requiring authentication information. The result is that the server performs an attacker-chosen state-changing HTTP POST against its own administrative API on the caller's behalf, in namespaces where the caller has no permission. The caller never needs network access to the internal frontend, because the History service makes the request. Confirmed effects include terminating Workflows in other namespaces, registering namespaces, modifying another namespace's configuration, and deleting another namespace and its Workflows. The affected routing logic is present in both the HSM and CHASM callback delivery implementations. This description and the CVSS score in this record describe releases 1.30.0 and later, where any non-empty source header is sufficient. Releases 1.25.0 through 1.29.7 are affected by a narrower form of the same defect in which the header must exactly match a configured cluster ID, a UUID that a namespace-scoped caller cannot read through the API. The consequence once that match occurs is the same, but the attack is materially harder and scores lower. To determine whether a deployment is affected, check two settings together: the static Server configuration for a non-zero services.internal-frontend.rpc.httpPort, and the effective per-namespace dynamic configuration value of component.callbacks.allowedAddresses. A deployment is exposed only when an internal frontend is deployed with a non-zero HTTP port, at least one allowlist rule admits a host, and authorization is enabled. The allowlist is empty by default, which denies all external callback URLs, and the stock static topology does not include an internal frontend. Note that a failed attach returns the error 'invalid url: url does not match any configured callback address', which proves only that one tested URL did not match and does not prove the effective allowlist is empty. To look for callbacks already attached, use DescribeWorkflowExecution, which returns callback information for a Workflow's registered completion callbacks. Operators should be aware of a gap when searching for evidence of delivery: the frontend HTTP API server records the request method and URL at debug level only, so at default log levels a delivered request is not written to the internal frontend's logs, and the absence of such log entries is not evidence that the issue was not exploited.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:25 UTC
CWE
- CWE-807 - Reliance on Untrusted Inputs in a Security Decision
Assigner
References
6 references
Impacted products
2 products
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | Temporal Server |
Affected:
1.30.0 , < 1.30.7
(semver)
Affected: 1.31.0 , < 1.31.3 (semver) cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:* |
|
| Temporal Technologies, Inc. | Temporal Server |
Affected:
1.25.0 , ≤ 1.29.7
(semver)
cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-87858",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:25:09.392404Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:25:30.901Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"cpes": [
"cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"History",
"Frontend"
],
"packageName": "go.temporal.io/server",
"product": "Temporal Server",
"programFiles": [
"components/callbacks/request.go",
"chasm/lib/callback/request.go",
"service/frontend/workflow_handler.go",
"common/authorization/claim_mapper.go"
],
"programRoutines": [
{
"name": "routeRequest"
},
{
"name": "validateWorkflowCompletionCallbacks"
},
{
"name": "validateCallbackURL"
},
{
"name": "internalClaimMapper.GetClaims"
}
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.30.7",
"status": "affected",
"version": "1.30.0",
"versionType": "semver"
},
{
"lessThan": "1.31.3",
"status": "affected",
"version": "1.31.0",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://pkg.go.dev",
"cpes": [
"cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"History",
"Frontend"
],
"packageName": "go.temporal.io/server",
"product": "Temporal Server",
"programFiles": [
"components/callbacks/fx.go",
"service/frontend/workflow_handler.go",
"common/authorization/claim_mapper.go"
],
"programRoutines": [
{
"name": "HTTPCallerProviderProvider"
},
{
"name": "validateWorkflowCompletionCallbacks"
},
{
"name": "validateCallbackURL"
},
{
"name": "internalClaimMapper.GetClaims"
}
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThanOrEqual": "1.29.7",
"status": "affected",
"version": "1.25.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eExploitation requires all of the following at once. Authorization must be enabled through a configured authorizer and claim mapper; without it every caller already holds administrative rights and there is no boundary to cross. The caller must be able to call StartWorkflowExecution in some namespace. An internal frontend must be deployed with services.internal-frontend.rpc.httpPort set to a non-zero value; the stock static topology contains no internal frontend, and an omitted or zero port disables its HTTP API. At least one rule in the effective per-namespace component.callbacks.allowedAddresses value must admit the supplied URL host; the code default is an empty rule set, which denies all external callback URLs. In the bundled config/docker.yaml template, setting USE_INTERNAL_FRONTEND also defaults INTERNAL_FRONTEND_HTTP_PORT to 7246, so opting into the internal frontend in that template also enables its HTTP API unless the rendered port is explicitly zero. Only the URL host is matched against the allowlist; the path and query are never validated, and the allowlist is not consulted again when the request is re-targeted internally.\u003c/p\u003e"
}
],
"value": "Exploitation requires all of the following at once. Authorization must be enabled through a configured authorizer and claim mapper; without it every caller already holds administrative rights and there is no boundary to cross. The caller must be able to call StartWorkflowExecution in some namespace. An internal frontend must be deployed with services.internal-frontend.rpc.httpPort set to a non-zero value; the stock static topology contains no internal frontend, and an omitted or zero port disables its HTTP API. At least one rule in the effective per-namespace component.callbacks.allowedAddresses value must admit the supplied URL host; the code default is an empty rule set, which denies all external callback URLs. In the bundled config/docker.yaml template, setting USE_INTERNAL_FRONTEND also defaults INTERNAL_FRONTEND_HTTP_PORT to 7246, so opting into the internal frontend in that template also enables its HTTP API unless the rendered port is explicitly zero. Only the URL host is matched against the allowlist; the path and query are never validated, and the allowlist is not consulted again when the request is re-targeted internally."
},
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eReleases 1.25.0 through 1.29.7 are affected by a narrower form of the same defect and are listed as a separate affected entry above. In those releases the delivery path routes a callback internally only when the caller-supplied source header exactly matches a configured cluster ID, and an unrecognized value falls back to the external client rather than the local one. When that match does occur the request is re-targeted the same way, rewriting only the scheme and host while preserving the caller\u0027s path and query, so the outcome is identical once the precondition is met. The same requirement for an internal frontend with a non-zero rpc.httpPort applies. A cluster ID is a UUID: if the configured value is not a valid UUID the server generates a random one at startup, and reading it through GetClusterInfo requires a cluster-scoped read role that a namespace-scoped caller does not hold. Beginning in 1.30.0 the exact-match requirement was removed and any non-empty source header routes internally, which is why the two ranges are described separately. No fix is planned for 1.25 through 1.29; those releases fall outside the supported window, which covers the last three minor versions. Falling outside that window is a statement about support, not a statement that those releases are unaffected.\u003c/p\u003e"
}
],
"value": "Releases 1.25.0 through 1.29.7 are affected by a narrower form of the same defect and are listed as a separate affected entry above. In those releases the delivery path routes a callback internally only when the caller-supplied source header exactly matches a configured cluster ID, and an unrecognized value falls back to the external client rather than the local one. When that match does occur the request is re-targeted the same way, rewriting only the scheme and host while preserving the caller\u0027s path and query, so the outcome is identical once the precondition is met. The same requirement for an internal frontend with a non-zero rpc.httpPort applies. A cluster ID is a UUID: if the configured value is not a valid UUID the server generates a random one at startup, and reading it through GetClusterInfo requires a cluster-scoped read role that a namespace-scoped caller does not hold. Beginning in 1.30.0 the exact-match requirement was removed and any non-empty source header routes internally, which is why the two ranges are described separately. No fix is planned for 1.25 through 1.29; those releases fall outside the supported window, which covers the last three minor versions. Falling outside that window is a statement about support, not a statement that those releases are unaffected."
},
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe CVSS score in this record describes the worst case, which is releases 1.30.0 and later where any non-empty source header is sufficient. It does not apply uniformly to every listed version. For releases 1.25.0 through 1.29.7 the attacker must additionally supply an exact cluster ID UUID that a namespace-scoped caller cannot read through the API, which raises Attack Complexity to High and yields CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N, 6.1 Medium.\u003c/p\u003e"
}
],
"value": "The CVSS score in this record describes the worst case, which is releases 1.30.0 and later where any non-empty source header is sufficient. It does not apply uniformly to every listed version. For releases 1.25.0 through 1.29.7 the attacker must additionally supply an exact cluster ID UUID that a namespace-scoped caller cannot read through the API, which raises Attack Complexity to High and yields CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N, 6.1 Medium."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eTemporal Server decided whether a Workflow completion callback was internal by reading a caller-supplied HTTP header. An authenticated caller holding only write permission in a single namespace could attach a completion callback whose URL host matched the configured callback address allowlist, whose URL path was any Temporal HTTP API route, and whose header map contained a non-empty header named source. When the History service delivered that callback, the non-empty source header caused it to re-target the request at the local frontend client and rewrite only the scheme and host, preserving the caller\u0027s path, query, and request body. Where an internal frontend is deployed with its HTTP API enabled, that client resolves to the internal frontend, which authorizes every request as a system administrator without requiring authentication information. The result is that the server performs an attacker-chosen state-changing HTTP POST against its own administrative API on the caller\u0027s behalf, in namespaces where the caller has no permission. The caller never needs network access to the internal frontend, because the History service makes the request. Confirmed effects include terminating Workflows in other namespaces, registering namespaces, modifying another namespace\u0027s configuration, and deleting another namespace and its Workflows. The affected routing logic is present in both the HSM and CHASM callback delivery implementations. This description and the CVSS score in this record describe releases 1.30.0 and later, where any non-empty source header is sufficient. Releases 1.25.0 through 1.29.7 are affected by a narrower form of the same defect in which the header must exactly match a configured cluster ID, a UUID that a namespace-scoped caller cannot read through the API. The consequence once that match occurs is the same, but the attack is materially harder and scores lower. To determine whether a deployment is affected, check two settings together: the static Server configuration for a non-zero services.internal-frontend.rpc.httpPort, and the effective per-namespace dynamic configuration value of component.callbacks.allowedAddresses. A deployment is exposed only when an internal frontend is deployed with a non-zero HTTP port, at least one allowlist rule admits a host, and authorization is enabled. The allowlist is empty by default, which denies all external callback URLs, and the stock static topology does not include an internal frontend. Note that a failed attach returns the error \u0027invalid url: url does not match any configured callback address\u0027, which proves only that one tested URL did not match and does not prove the effective allowlist is empty. To look for callbacks already attached, use DescribeWorkflowExecution, which returns callback information for a Workflow\u0027s registered completion callbacks. Operators should be aware of a gap when searching for evidence of delivery: the frontend HTTP API server records the request method and URL at debug level only, so at default log levels a delivered request is not written to the internal frontend\u0027s logs, and the absence of such log entries is not evidence that the issue was not exploited.\u003c/p\u003e"
}
],
"value": "Temporal Server decided whether a Workflow completion callback was internal by reading a caller-supplied HTTP header. An authenticated caller holding only write permission in a single namespace could attach a completion callback whose URL host matched the configured callback address allowlist, whose URL path was any Temporal HTTP API route, and whose header map contained a non-empty header named source. When the History service delivered that callback, the non-empty source header caused it to re-target the request at the local frontend client and rewrite only the scheme and host, preserving the caller\u0027s path, query, and request body. Where an internal frontend is deployed with its HTTP API enabled, that client resolves to the internal frontend, which authorizes every request as a system administrator without requiring authentication information. The result is that the server performs an attacker-chosen state-changing HTTP POST against its own administrative API on the caller\u0027s behalf, in namespaces where the caller has no permission. The caller never needs network access to the internal frontend, because the History service makes the request. Confirmed effects include terminating Workflows in other namespaces, registering namespaces, modifying another namespace\u0027s configuration, and deleting another namespace and its Workflows. The affected routing logic is present in both the HSM and CHASM callback delivery implementations. This description and the CVSS score in this record describe releases 1.30.0 and later, where any non-empty source header is sufficient. Releases 1.25.0 through 1.29.7 are affected by a narrower form of the same defect in which the header must exactly match a configured cluster ID, a UUID that a namespace-scoped caller cannot read through the API. The consequence once that match occurs is the same, but the attack is materially harder and scores lower. To determine whether a deployment is affected, check two settings together: the static Server configuration for a non-zero services.internal-frontend.rpc.httpPort, and the effective per-namespace dynamic configuration value of component.callbacks.allowedAddresses. A deployment is exposed only when an internal frontend is deployed with a non-zero HTTP port, at least one allowlist rule admits a host, and authorization is enabled. The allowlist is empty by default, which denies all external callback URLs, and the stock static topology does not include an internal frontend. Note that a failed attach returns the error \u0027invalid url: url does not match any configured callback address\u0027, which proves only that one tested URL did not match and does not prove the effective allowlist is empty. To look for callbacks already attached, use DescribeWorkflowExecution, which returns callback information for a Workflow\u0027s registered completion callbacks. Operators should be aware of a gap when searching for evidence of delivery: the frontend HTTP API server records the request method and URL at debug level only, so at default log levels a delivered request is not written to the internal frontend\u0027s logs, and the absence of such log entries is not evidence that the issue was not exploited."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Privilege escalation from a single-namespace caller to cluster administrator, resulting in unauthorized state-changing operations against any namespace in the cluster. Confirmed effects include terminating another namespace\u0027s Workflows, registering namespaces, modifying another namespace\u0027s configuration, and deleting another namespace together with its Workflows. No confidentiality impact was identified; the request path is write-only and response bodies are discarded."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.2,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "HIGH",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-807",
"description": "CWE-807: Reliance on Untrusted Inputs in a Security Decision",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:39:52.412Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "Fix pull request",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/11965"
},
{
"name": "1.31 backport, adds the callback.inspectSourceHeader toggle defaulted to true",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/11982"
},
{
"name": "1.30 backport, adds the callback.inspectSourceHeader toggle defaulted to true",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/12085"
},
{
"name": "Temporal Server 1.30.7",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.30.7"
},
{
"name": "Temporal Server 1.31.3",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.31.3"
},
{
"name": "Temporal Server 1.32.0",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.32.0"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to Temporal Server 1.32.0, which ships callback.inspectSourceHeader set to false and needs no further change. The fix makes the completion-callback source header opt-in behind the callback.inspectSourceHeader setting, so a callback\u0027s internality is decided from the server-generated callback URL rather than from a caller-supplied header. Releases 1.30.7 and 1.31.3 carry the same code but ship callback.inspectSourceHeader set to true for mixed-version compatibility while callbacks created with the older callback URL template drain, and while it is true the routing behavior matches the affected releases; an operator upgrading within the 1.30 or 1.31 line must therefore also set callback.inspectSourceHeader to false once every pre-fix server has drained. Operators who set callback.inspectSourceHeader to true restore the pre-fix behavior in full, including preservation of the caller\u0027s path and query across the internal rewrite, and should not enable it on a cluster that accepts caller-supplied completion callbacks. Temporal Server releases in the 1.25.0 through 1.29.7 range are outside the supported window and receive no fix; operators on those releases should upgrade to a supported line.\u003c/p\u003e"
}
],
"value": "Upgrade to Temporal Server 1.32.0, which ships callback.inspectSourceHeader set to false and needs no further change. The fix makes the completion-callback source header opt-in behind the callback.inspectSourceHeader setting, so a callback\u0027s internality is decided from the server-generated callback URL rather than from a caller-supplied header. Releases 1.30.7 and 1.31.3 carry the same code but ship callback.inspectSourceHeader set to true for mixed-version compatibility while callbacks created with the older callback URL template drain, and while it is true the routing behavior matches the affected releases; an operator upgrading within the 1.30 or 1.31 line must therefore also set callback.inspectSourceHeader to false once every pre-fix server has drained. Operators who set callback.inspectSourceHeader to true restore the pre-fix behavior in full, including preservation of the caller\u0027s path and query across the internal rewrite, and should not enable it on a cluster that accepts caller-supplied completion callbacks. Temporal Server releases in the 1.25.0 through 1.29.7 range are outside the supported window and receive no fix; operators on those releases should upgrade to a supported line."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Temporal Server completion callback source header can direct attacker-chosen requests to the internal frontend with administrator authorization",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUntil a fixed release is available, a cluster that does not accept externally addressed Workflow completion callbacks can set the effective component.callbacks.allowedAddresses dynamic configuration value to an empty list, and remove or empty any more specific namespace-constrained entries that admit a host. Verify the effective value for every namespace in scope. An absent key already has the same deny-all default, but an explicit empty value is easier to audit. This rejects external http and https callback URLs at StartWorkflowExecution, before persistence and before either delivery implementation runs. It is a targeted mitigation rather than a way to disable Nexus: the reserved internal forms temporal://system and temporal://internal remain admitted, and there is no supported cluster-wide setting that turns Nexus off. As a separate defense in depth, operators that do not need the internal frontend\u0027s HTTP API can remove that service or set services.internal-frontend.rpc.httpPort to zero after confirming no internal consumers depend on it; this closes the administrative amplifier but does not correct the routing defect itself. Restricting or removing Nexus endpoints is not sufficient, because attaching the affected completion callback does not require a registered Nexus endpoint.\u003c/p\u003e"
}
],
"value": "Until a fixed release is available, a cluster that does not accept externally addressed Workflow completion callbacks can set the effective component.callbacks.allowedAddresses dynamic configuration value to an empty list, and remove or empty any more specific namespace-constrained entries that admit a host. Verify the effective value for every namespace in scope. An absent key already has the same deny-all default, but an explicit empty value is easier to audit. This rejects external http and https callback URLs at StartWorkflowExecution, before persistence and before either delivery implementation runs. It is a targeted mitigation rather than a way to disable Nexus: the reserved internal forms temporal://system and temporal://internal remain admitted, and there is no supported cluster-wide setting that turns Nexus off. As a separate defense in depth, operators that do not need the internal frontend\u0027s HTTP API can remove that service or set services.internal-frontend.rpc.httpPort to zero after confirming no internal consumers depend on it; this closes the administrative amplifier but does not correct the routing defect itself. Restricting or removing Nexus endpoints is not sufficient, because attaching the affected completion callback does not require a registered Nexus endpoint."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-87858",
"datePublished": "2026-09-21T11:39:52.412Z",
"dateReserved": "2026-09-09T13:05:43.884Z",
"dateUpdated": "2026-09-21T15:25:30.901Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-65654 (GCVE-0-2026-65654)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:38 – Updated: 2026-09-21 15:26
VLAI
EPSS
VEX
Title
temporalio/ringpop-go fails to enforce configured label limits on inbound membership gossip
Summary
github.com/temporalio/ringpop-go enforces configured LabelOptions limits when an application changes the local node's labels, but affected versions do not apply those limits to label maps received in SWIM membership changes. A network peer that can reach a live Ringpop TChannel listener can repeatedly submit changes for distinct member addresses containing label keys, values, or counts that exceed the receiver's configured limits. Accepted labels are retained in the member list and disseminated to peers, allowing memory and gossip-bandwidth consumption to exceed configured bounds and potentially making the hosting process unavailable. The fix validates peer-supplied label maps before they are retained or disseminated. Availability only; no confidentiality or integrity impact was identified.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:26 UTC
CWE
- CWE-770 - Allocation of Resources Without Limits or Throttling
Assigner
References
6 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporalio/ringpop-go |
Affected:
0.0.0-20160824133849-d0de5fe13330 , < 0.0.0-20260724173031-c317effcdc8b
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-65654",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:26:15.984122Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:26:44.632Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"defaultStatus": "unaffected",
"modules": [
"Labels",
"SWIM membership"
],
"packageName": "github.com/temporalio/ringpop-go",
"product": "temporalio/ringpop-go",
"programFiles": [
"swim/labels.go",
"swim/member.go",
"swim/memberlist.go"
],
"repo": "https://github.com/temporalio/ringpop-go",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "0.0.0-20260724173031-c317effcdc8b",
"status": "affected",
"version": "0.0.0-20160824133849-d0de5fe13330",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe CVSS Base score reflects an application that exposes a Ringpop membership listener to untrusted network peers without authenticated transport. Ringpop does not authenticate peers at the application layer. An embedding application can restrict the listener to trusted cluster members or require verified client certificates before TChannel receives a request. Deployments using those controls should apply appropriate Environmental metrics.\u003c/p\u003e"
}
],
"value": "The CVSS Base score reflects an application that exposes a Ringpop membership listener to untrusted network peers without authenticated transport. Ringpop does not authenticate peers at the application layer. An embedding application can restrict the listener to trusted cluster members or require verified client certificates before TChannel receives a request. Deployments using those controls should apply appropriate Environmental metrics."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003egithub.com/temporalio/ringpop-go enforces configured LabelOptions limits when an application changes the local node\u0027s labels, but affected versions do not apply those limits to label maps received in SWIM membership changes. A network peer that can reach a live Ringpop TChannel listener can repeatedly submit changes for distinct member addresses containing label keys, values, or counts that exceed the receiver\u0027s configured limits. Accepted labels are retained in the member list and disseminated to peers, allowing memory and gossip-bandwidth consumption to exceed configured bounds and potentially making the hosting process unavailable. The fix validates peer-supplied label maps before they are retained or disseminated. Availability only; no confidentiality or integrity impact was identified.\u003c/p\u003e"
}
],
"value": "github.com/temporalio/ringpop-go enforces configured LabelOptions limits when an application changes the local node\u0027s labels, but affected versions do not apply those limits to label maps received in SWIM membership changes. A network peer that can reach a live Ringpop TChannel listener can repeatedly submit changes for distinct member addresses containing label keys, values, or counts that exceed the receiver\u0027s configured limits. Accepted labels are retained in the member list and disseminated to peers, allowing memory and gossip-bandwidth consumption to exceed configured bounds and potentially making the hosting process unavailable. The fix validates peer-supplied label maps before they are retained or disseminated. Availability only; no confidentiality or integrity impact was identified."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Denial of service through persistent memory and gossip-bandwidth consumption. No confidentiality or integrity impact was identified."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "temporalio/ringpop-go reasonable worst-case network service embedding"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-770",
"description": "CWE-770: Allocation of Resources Without Limits or Throttling",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:38:23.307Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "First affected source revision",
"tags": [
"product"
],
"url": "https://github.com/temporalio/ringpop-go/commit/d0de5fe1333074d5c41a88e9053592e39f495bb2"
},
{
"name": "Configured label limits and their resource-control purpose",
"tags": [
"product"
],
"url": "https://github.com/temporalio/ringpop-go/blob/b97329e994f792f70427a7533a3e7a98976eb262/swim/labels.go#L11-L61"
},
{
"name": "Vulnerable inbound membership-update path",
"tags": [
"product"
],
"url": "https://github.com/temporalio/ringpop-go/blob/b97329e994f792f70427a7533a3e7a98976eb262/swim/memberlist.go#L521-L612"
},
{
"name": "Inbound label-validation fix",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/ringpop-go/pull/22"
},
{
"name": "First fixed default-branch revision",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/ringpop-go/commit/c317effcdc8bc09ed1c11f00994782bda9685d4b"
},
{
"name": "Fixed release tag v0.1.0",
"tags": [
"product"
],
"url": "https://github.com/temporalio/ringpop-go/tree/v0.1.0"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade github.com/temporalio/ringpop-go to v0.1.0 or later. The fix validates peer-supplied label maps against the configured LabelOptions before labels are retained or disseminated. Invalid incoming labels are discarded while the remaining membership change can still be processed.\u003c/p\u003e"
}
],
"value": "Upgrade github.com/temporalio/ringpop-go to v0.1.0 or later. The fix validates peer-supplied label maps against the configured LabelOptions before labels are retained or disseminated. Invalid incoming labels are discarded while the remaining membership change can still be processed."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "temporalio/ringpop-go fails to enforce configured label limits on inbound membership gossip",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eRestrict the Ringpop membership listener to trusted cluster members. Where supported by the embedding application, require mutual TLS with verified client certificates. These controls prevent untrusted clients from reaching the vulnerable receive path but do not correct the missing validation for an authenticated or compromised peer.\u003c/p\u003e"
}
],
"value": "Restrict the Ringpop membership listener to trusted cluster members. Where supported by the embedding application, require mutual TLS with verified client certificates. These controls prevent untrusted clients from reaching the vulnerable receive path but do not correct the missing validation for an authenticated or compromised peer."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-65654",
"datePublished": "2026-09-21T11:38:23.307Z",
"dateReserved": "2026-07-22T18:08:48.925Z",
"dateUpdated": "2026-09-21T15:26:44.632Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-65653 (GCVE-0-2026-65653)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:36 – Updated: 2026-09-21 15:28
VLAI
EPSS
VEX
Title
temporalio/tchannel-go zero-chunk call fragment causes process termination
Summary
github.com/temporalio/tchannel-go did not reject TChannel call fragments containing checksum metadata but no length-prefixed argument chunks. The fragment reader left its chunk slice empty and then unconditionally selected the first element. A network peer can supply such a malformed call fragment, including as a direct initial call request after completing the standard initialization handshake. On that inbound path, the resulting unrecovered Go slice-bounds panic occurs on a library-created dispatch goroutine and terminates the hosting process. This allows remote denial of service against applications that expose the listener to untrusted peers. The impact is limited to availability; no confidentiality or integrity impact was identified.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:28 UTC
CWE
- CWE-129 - Improper Validation of Array Index
Assigner
References
6 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporalio/tchannel-go |
Affected:
0.0.0-20150531204735-8d8ca17342b3 , < 1.22.1-0.20260720194454-0cb017f6870a
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-65653",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:28:04.791087Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:28:21.825Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"defaultStatus": "unaffected",
"modules": [
"Fragmentation",
"Frame parser"
],
"packageName": "github.com/temporalio/tchannel-go",
"product": "temporalio/tchannel-go",
"programFiles": [
"fragmenting_reader.go",
"inbound.go",
"outbound.go"
],
"repo": "https://github.com/temporalio/tchannel-go",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.22.1-0.20260720194454-0cb017f6870a",
"status": "affected",
"version": "0.0.0-20150531204735-8d8ca17342b3",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe CVSS Base score reflects an application that exposes a tchannel-go listener to untrusted network peers without an authenticated transport. The library accepts caller-supplied listeners and dialers, so an embedding application can require mutually authenticated TLS. When client certificates are required and verified, unauthenticated peers are rejected before TChannel frame parsing and the deployment should be assessed using appropriate Environmental metrics.\u003c/p\u003e"
}
],
"value": "The CVSS Base score reflects an application that exposes a tchannel-go listener to untrusted network peers without an authenticated transport. The library accepts caller-supplied listeners and dialers, so an embedding application can require mutually authenticated TLS. When client certificates are required and verified, unauthenticated peers are rejected before TChannel frame parsing and the deployment should be assessed using appropriate Environmental metrics."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003egithub.com/temporalio/tchannel-go did not reject TChannel call fragments containing checksum metadata but no length-prefixed argument chunks. The fragment reader left its chunk slice empty and then unconditionally selected the first element. A network peer can supply such a malformed call fragment, including as a direct initial call request after completing the standard initialization handshake. On that inbound path, the resulting unrecovered Go slice-bounds panic occurs on a library-created dispatch goroutine and terminates the hosting process. This allows remote denial of service against applications that expose the listener to untrusted peers. The impact is limited to availability; no confidentiality or integrity impact was identified.\u003c/p\u003e"
}
],
"value": "github.com/temporalio/tchannel-go did not reject TChannel call fragments containing checksum metadata but no length-prefixed argument chunks. The fragment reader left its chunk slice empty and then unconditionally selected the first element. A network peer can supply such a malformed call fragment, including as a direct initial call request after completing the standard initialization handshake. On that inbound path, the resulting unrecovered Go slice-bounds panic occurs on a library-created dispatch goroutine and terminates the hosting process. This allows remote denial of service against applications that expose the listener to untrusted peers. The impact is limited to availability; no confidentiality or integrity impact was identified."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Denial of service: one malformed TChannel call fragment can cause an unrecovered panic and terminate the process hosting the connection. No confidentiality or integrity impact was identified."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "temporalio/tchannel-go reasonable worst-case network service embedding"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-129",
"description": "CWE-129: Improper Validation of Array Index",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:36:47.095Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "First affected source revision",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/commit/8d8ca17342b3620d3a6d5c1a825145595e7588ff"
},
{
"name": "Vulnerable zero-chunk fragment handling",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/blob/8706a1ab5f617efd79dace7ab2d1d80cc1881df0/fragmenting_reader.go#L256-L308"
},
{
"name": "Direct inbound call route",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/commit/1dcfa67262ecd56a24f12940f4082549190cb5d1"
},
{
"name": "Zero-chunk fragment validation fix",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/tchannel-go/pull/14"
},
{
"name": "First fixed source revision",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/tchannel-go/commit/0cb017f6870a8420695abeb9a4560d39dadc4e2e"
},
{
"name": "Fixed release tag v1.22.1",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/tree/v1.22.1"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade github.com/temporalio/tchannel-go to v1.22.1 or later. The fix rejects fragments containing no argument chunks before indexing the chunk slice.\u003c/p\u003e"
}
],
"value": "Upgrade github.com/temporalio/tchannel-go to v1.22.1 or later. The fix rejects fragments containing no argument chunks before indexing the chunk slice."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "temporalio/tchannel-go zero-chunk call fragment causes process termination",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eRestrict TChannel listener access to trusted peers. Where supported by the embedding application, require mutually authenticated TLS so peers without a trusted client certificate are rejected before TChannel frame parsing. External panic-recovery middleware is not a reliable mitigation because the confirmed inbound panic occurs on a library-created dispatch goroutine.\u003c/p\u003e"
}
],
"value": "Restrict TChannel listener access to trusted peers. Where supported by the embedding application, require mutually authenticated TLS so peers without a trusted client certificate are rejected before TChannel frame parsing. External panic-recovery middleware is not a reliable mitigation because the confirmed inbound panic occurs on a library-created dispatch goroutine."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-65653",
"datePublished": "2026-09-21T11:36:47.095Z",
"dateReserved": "2026-07-22T18:08:48.925Z",
"dateUpdated": "2026-09-21T15:28:21.825Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-65652 (GCVE-0-2026-65652)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:35 – Updated: 2026-09-21 15:30
VLAI
EPSS
VEX
Title
temporalio/tchannel-go malformed checksum type causes process termination
Summary
github.com/temporalio/tchannel-go did not validate the one-byte checksum-type field in inbound TChannel call frames. A network peer that can reach a listener can complete the standard initialization handshake and send a call request with an unsupported checksum type. The parser uses that value as an index into a four-entry checksum pool, causing an unrecovered Go panic on the connection read goroutine and terminating the hosting process. This allows remote denial of service against applications that expose the listener to untrusted peers. The impact is limited to availability; no confidentiality or integrity impact was identified.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:29 UTC
CWE
- CWE-129 - Improper Validation of Array Index
Assigner
References
6 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporalio/tchannel-go |
Affected:
0.0.0-20160105034737-a6904155f628 , < 1.22.1-0.20260720194454-0cb017f6870a
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-65652",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:29:36.927700Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:30:00.325Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"defaultStatus": "unaffected",
"modules": [
"Checksum",
"Frame parser"
],
"packageName": "github.com/temporalio/tchannel-go",
"product": "temporalio/tchannel-go",
"programFiles": [
"checksum.go",
"reqres.go",
"inbound.go"
],
"repo": "https://github.com/temporalio/tchannel-go",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.22.1-0.20260720194454-0cb017f6870a",
"status": "affected",
"version": "0.0.0-20160105034737-a6904155f628",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe CVSS Base score reflects an application that exposes a tchannel-go listener to untrusted network peers without an authenticated transport. The library accepts caller-supplied listeners and dialers, so an embedding application can require mutually authenticated TLS. When client certificates are required and verified, unauthenticated peers are rejected before TChannel frame parsing and the deployment should be assessed using appropriate Environmental metrics.\u003c/p\u003e"
}
],
"value": "The CVSS Base score reflects an application that exposes a tchannel-go listener to untrusted network peers without an authenticated transport. The library accepts caller-supplied listeners and dialers, so an embedding application can require mutually authenticated TLS. When client certificates are required and verified, unauthenticated peers are rejected before TChannel frame parsing and the deployment should be assessed using appropriate Environmental metrics."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003egithub.com/temporalio/tchannel-go did not validate the one-byte checksum-type field in inbound TChannel call frames. A network peer that can reach a listener can complete the standard initialization handshake and send a call request with an unsupported checksum type. The parser uses that value as an index into a four-entry checksum pool, causing an unrecovered Go panic on the connection read goroutine and terminating the hosting process. This allows remote denial of service against applications that expose the listener to untrusted peers. The impact is limited to availability; no confidentiality or integrity impact was identified.\u003c/p\u003e"
}
],
"value": "github.com/temporalio/tchannel-go did not validate the one-byte checksum-type field in inbound TChannel call frames. A network peer that can reach a listener can complete the standard initialization handshake and send a call request with an unsupported checksum type. The parser uses that value as an index into a four-entry checksum pool, causing an unrecovered Go panic on the connection read goroutine and terminating the hosting process. This allows remote denial of service against applications that expose the listener to untrusted peers. The impact is limited to availability; no confidentiality or integrity impact was identified."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Denial of service: one malformed TChannel call request can cause an unrecovered panic and terminate the process hosting the listener. No confidentiality or integrity impact was identified."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "temporalio/tchannel-go reasonable worst-case network service embedding"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-129",
"description": "CWE-129: Improper Validation of Array Index",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:35:40.896Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "First affected source revision",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/commit/a6904155f628b9e602b7bc88ef489004a786f7f4"
},
{
"name": "Vulnerable checksum-type parsing",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/blob/8706a1ab5f617efd79dace7ab2d1d80cc1881df0/reqres.go#L280-L295"
},
{
"name": "Vulnerable checksum-pool access",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/blob/8706a1ab5f617efd79dace7ab2d1d80cc1881df0/checksum.go#L29-L93"
},
{
"name": "Checksum-type validation fix",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/tchannel-go/pull/14"
},
{
"name": "First fixed source revision",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/tchannel-go/commit/0cb017f6870a8420695abeb9a4560d39dadc4e2e"
},
{
"name": "Fixed release tag v1.22.1",
"tags": [
"product"
],
"url": "https://github.com/temporalio/tchannel-go/tree/v1.22.1"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade github.com/temporalio/tchannel-go to v1.22.1 or later. The fix rejects unsupported checksum types during direct and relay frame parsing and prevents out-of-range checksum-pool access.\u003c/p\u003e"
}
],
"value": "Upgrade github.com/temporalio/tchannel-go to v1.22.1 or later. The fix rejects unsupported checksum types during direct and relay frame parsing and prevents out-of-range checksum-pool access."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "temporalio/tchannel-go malformed checksum type causes process termination",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eRestrict TChannel listener access to trusted peers. Where supported by the embedding application, require mutually authenticated TLS so peers without a trusted client certificate are rejected before TChannel frame parsing. External panic-recovery middleware is not a reliable mitigation because the panic occurs on a library-created connection goroutine.\u003c/p\u003e"
}
],
"value": "Restrict TChannel listener access to trusted peers. Where supported by the embedding application, require mutually authenticated TLS so peers without a trusted client certificate are rejected before TChannel frame parsing. External panic-recovery middleware is not a reliable mitigation because the panic occurs on a library-created connection goroutine."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-65652",
"datePublished": "2026-09-21T11:35:40.896Z",
"dateReserved": "2026-07-22T18:08:48.925Z",
"dateUpdated": "2026-09-21T15:30:00.325Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-65651 (GCVE-0-2026-65651)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:34 – Updated: 2026-09-21 15:31
VLAI
EPSS
VEX
Title
temporalio/sqlparser deeply nested unary expressions can cause a fatal stack overflow during AST traversal
Summary
temporalio/sqlparser accepts SQL containing deeply nested unary expressions and can return a correspondingly deep abstract syntax tree without enforcing an applicable nesting limit. The library's String and Walk operations recursively traverse that tree. An application that parses attacker-controlled SQL and later formats or walks the returned tree can encounter a runtime-fatal Go stack overflow that terminates the process; Go panic recovery cannot contain this condition. Temporal Server passes caller-controlled query input through the affected parser in archival, visibility, and worker-query paths. In affected validation paths, the Server recursively formats an invalid expression while constructing an error. In a supported authenticated deployment, a caller with namespace read permission can terminate the receiving Frontend or Matching process. The dynamically confirmed ListWorkers route additionally requires at least one retained worker heartbeat. Repeated requests can sustain a denial of service. The issue affects availability only; no confidentiality or integrity impact was identified.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:30 UTC
CWE
- CWE-674 - Uncontrolled Recursion
Assigner
References
9 references
Impacted products
2 products
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporalio/sqlparser |
Affected:
0.0.0-20141206041240-1aae9baceee8 , < 0.0.0-20260721183058-0466b6b405ac
(semver)
|
|
| Temporal Technologies, Inc. | Temporal Server |
Unknown:
0.0.0 , < 0.10.0
(semver)
Affected: 0.10.0 , ≤ 1.29.7 (semver) Affected: 1.30.0 , < 1.30.7 (semver) Affected: 1.31.0 , < 1.31.3 (semver) cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-65651",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:30:53.004421Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:31:05.352Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"defaultStatus": "unaffected",
"modules": [
"AST",
"Parser"
],
"packageName": "github.com/temporalio/sqlparser",
"product": "temporalio/sqlparser",
"programFiles": [
"ast.go",
"sql.y"
],
"programRoutines": [
{
"name": "Parse"
},
{
"name": "ParseStrictDDL"
},
{
"name": "ParseNext"
},
{
"name": "String"
},
{
"name": "Walk"
},
{
"name": "UnaryExpr.Format"
}
],
"repo": "https://github.com/temporalio/sqlparser",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "0.0.0-20260721183058-0466b6b405ac",
"status": "affected",
"version": "0.0.0-20141206041240-1aae9baceee8",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://pkg.go.dev",
"cpes": [
"cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Archival",
"Frontend",
"Matching",
"Visibility"
],
"packageName": "go.temporal.io/server",
"product": "Temporal Server",
"programFiles": [
"common/archiver/filestore/queryParser.go",
"common/persistence/visibility/store/query/converter.go",
"common/persistence/visibility/store/sql/query_converter.go",
"service/matching/workers/worker_query_engine.go"
],
"programRoutines": [
{
"name": "queryParser.convertComparisonExpr"
},
{
"name": "QueryConverter.convertComparisonExpr"
},
{
"name": "comparisonExprConverter.Convert"
},
{
"name": "workerQueryEngine.evaluateComparison"
}
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "0.10.0",
"status": "unknown",
"version": "0.0.0",
"versionType": "semver"
},
{
"lessThanOrEqual": "1.29.7",
"status": "affected",
"version": "0.10.0",
"versionType": "semver"
},
{
"lessThan": "1.30.7",
"status": "affected",
"version": "1.30.0",
"versionType": "semver"
},
{
"lessThan": "1.31.3",
"status": "affected",
"version": "1.31.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe temporalio/sqlparser CVSS scenario uses the reasonable worst case of a network service passing unauthenticated attacker-controlled SQL to the parser and then invoking String or Walk on the resulting AST. Applications that embed the library should reassess the vector for their actual input and privilege boundaries.\u003c/p\u003e"
}
],
"value": "The temporalio/sqlparser CVSS scenario uses the reasonable worst case of a network service passing unauthenticated attacker-controlled SQL to the parser and then invoking String or Walk on the resulting AST. Applications that embed the library should reassess the vector for their actual input and privilege boundaries."
},
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe known affected Temporal Server lower bound is 0.10.0, based on a source-confirmed built-in filestore visibility-archival query path; earlier Server releases are unknown. Additional source-confirmed SQL and Elasticsearch visibility paths begin in later releases. These routes do not require retained worker state. Their availability depends on the deployed visibility or archival configuration, which CVSS Base scoring assumes is enabled when assessing the vulnerable configuration.\u003c/p\u003e"
}
],
"value": "The known affected Temporal Server lower bound is 0.10.0, based on a source-confirmed built-in filestore visibility-archival query path; earlier Server releases are unknown. Additional source-confirmed SQL and Elasticsearch visibility paths begin in later releases. These routes do not require retained worker state. Their availability depends on the deployed visibility or archival configuration, which CVSS Base scoring assumes is enabled when assessing the vulnerable configuration."
},
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe dynamically confirmed Temporal Server ListWorkers route begins in 1.29.0. In 1.29.x, frontend.ListWorkersEnabled defaults to false; it defaults to true in 1.30.x. Beginning in 1.31.0, the setting remains defined but is no longer honored, and ListWorkers is always enabled. In supported authenticated deployments, ListWorkers requires namespace read permission. The confirmed process-exit route also requires at least one retained worker heartbeat.\u003c/p\u003e"
}
],
"value": "The dynamically confirmed Temporal Server ListWorkers route begins in 1.29.0. In 1.29.x, frontend.ListWorkersEnabled defaults to false; it defaults to true in 1.30.x. Beginning in 1.31.0, the setting remains defined but is no longer honored, and ListWorkers is always enabled. In supported authenticated deployments, ListWorkers requires namespace read permission. The confirmed process-exit route also requires at least one retained worker heartbeat."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003etemporalio/sqlparser accepts SQL containing deeply nested unary expressions and can return a correspondingly deep abstract syntax tree without enforcing an applicable nesting limit. The library\u0027s String and Walk operations recursively traverse that tree. An application that parses attacker-controlled SQL and later formats or walks the returned tree can encounter a runtime-fatal Go stack overflow that terminates the process; Go panic recovery cannot contain this condition. Temporal Server passes caller-controlled query input through the affected parser in archival, visibility, and worker-query paths. In affected validation paths, the Server recursively formats an invalid expression while constructing an error. In a supported authenticated deployment, a caller with namespace read permission can terminate the receiving Frontend or Matching process. The dynamically confirmed ListWorkers route additionally requires at least one retained worker heartbeat. Repeated requests can sustain a denial of service. The issue affects availability only; no confidentiality or integrity impact was identified.\u003c/p\u003e"
}
],
"value": "temporalio/sqlparser accepts SQL containing deeply nested unary expressions and can return a correspondingly deep abstract syntax tree without enforcing an applicable nesting limit. The library\u0027s String and Walk operations recursively traverse that tree. An application that parses attacker-controlled SQL and later formats or walks the returned tree can encounter a runtime-fatal Go stack overflow that terminates the process; Go panic recovery cannot contain this condition. Temporal Server passes caller-controlled query input through the affected parser in archival, visibility, and worker-query paths. In affected validation paths, the Server recursively formats an invalid expression while constructing an error. In a supported authenticated deployment, a caller with namespace read permission can terminate the receiving Frontend or Matching process. The dynamically confirmed ListWorkers route additionally requires at least one retained worker heartbeat. Repeated requests can sustain a denial of service. The issue affects availability only; no confidentiality or integrity impact was identified."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Denial of service caused by runtime-fatal Go stack exhaustion and process termination. No confidentiality or integrity impact was identified."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "temporalio/sqlparser reasonable worst-case network service embedding"
}
]
},
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Temporal Server visibility or archival query path in a supported authenticated deployment"
}
]
},
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 6,
"baseSeverity": "MEDIUM",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Dynamically confirmed Temporal Server ListWorkers path with retained worker state"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-674",
"description": "CWE-674: Uncontrolled Recursion",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:34:05.930Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "First affected sqlparser source revision",
"tags": [
"product"
],
"url": "https://github.com/temporalio/sqlparser/commit/1aae9baceee8e48525da8f56b07bf6a5ca7eb147"
},
{
"name": "sqlparser nested-expression fix pull request",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/sqlparser/pull/6"
},
{
"name": "First fixed sqlparser commit",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/sqlparser/commit/0466b6b405accfaa781e4bef417933efc18bcaef"
},
{
"name": "Fixed release tag v0.1.0",
"tags": [
"product"
],
"url": "https://github.com/temporalio/sqlparser/tree/v0.1.0"
},
{
"name": "Broader sqlparser AST-depth hardening",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/sqlparser/pull/7"
},
{
"name": "Temporal Server dependency update",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/11202"
},
{
"name": "Temporal Server 0.10.0 source-confirmed archival route",
"tags": [
"product"
],
"url": "https://github.com/temporalio/temporal/blob/v0.10.0/common/archiver/filestore/queryParser.go#L77-L132"
},
{
"name": "Temporal Server 1.30.7",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.30.7"
},
{
"name": "Temporal Server 1.31.3",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.31.3"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade github.com/temporalio/sqlparser to v0.0.0-20260721183058-0466b6b405ac or later; v0.0.0-20260722001706-17d16cfe1da5 is the preferred upgrade. Temporal Server operators should upgrade to 1.30.7, 1.31.3, or 1.32.0, as appropriate for the deployed minor release line. The parser changes reject excessive nesting before recursive AST consumers receive an attacker-deep tree.\u003c/p\u003e"
}
],
"value": "Upgrade github.com/temporalio/sqlparser to v0.0.0-20260721183058-0466b6b405ac or later; v0.0.0-20260722001706-17d16cfe1da5 is the preferred upgrade. Temporal Server operators should upgrade to 1.30.7, 1.31.3, or 1.32.0, as appropriate for the deployed minor release line. The parser changes reject excessive nesting before recursive AST consumers receive an attacker-deep tree."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "temporalio/sqlparser deeply nested unary expressions can cause a fatal stack overflow during AST traversal",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eApplications can impose a conservative query-size or nesting limit before parsing and avoid recursively formatting or walking parser-produced trees derived from untrusted input. Temporal Server 1.29 and 1.30 operators can disable ListWorkers when it is unused, disable unused archival reads, and restrict namespace read permission to trusted principals. Go panic recovery is not an effective mitigation for runtime-fatal stack overflow.\u003c/p\u003e"
}
],
"value": "Applications can impose a conservative query-size or nesting limit before parsing and avoid recursively formatting or walking parser-produced trees derived from untrusted input. Temporal Server 1.29 and 1.30 operators can disable ListWorkers when it is unused, disable unused archival reads, and restrict namespace read permission to trusted principals. Go panic recovery is not an effective mitigation for runtime-fatal stack overflow."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-65651",
"datePublished": "2026-09-21T11:34:05.930Z",
"dateReserved": "2026-07-22T18:08:48.925Z",
"dateUpdated": "2026-09-21T15:31:05.352Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-16651 (GCVE-0-2026-16651)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:32 – Updated: 2026-09-21 15:32
VLAI
EPSS
VEX
Title
temporalio/sqlparser malformed MySQL version comments can cause a panic
Summary
temporalio/sqlparser can panic when Parse, ParseStrictDDL, or ParseNext processes a MySQL version comment whose contents are empty or consist only of one to five decimal digits. ExtractMysqlComment does not check the -1 result returned by strings.IndexFunc before using it as a slice boundary. The resulting Go runtime panic propagates unless the caller recovers it on the parsing goroutine, so applications that parse attacker-controlled SQL can terminate. Temporal Server exposes the affected parser through ListWorkers. When that API is enabled, an authenticated caller with namespace read permission can submit a malformed query that terminates the receiving Matching process. Repeated requests can sustain a denial of service. The issue affects availability only; no confidentiality or integrity impact was identified.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:32 UTC
CWE
- CWE-129 - Improper Validation of Array Index
Assigner
References
7 references
Impacted products
2 products
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporalio/sqlparser |
Affected:
0.0.0-20180604150908-b055e9c9b4fa , < 0.0.0-20260721183040-74181ffcbaaf
(semver)
|
|
| Temporal Technologies, Inc. | Temporal Server |
Affected:
1.29.0 , ≤ 1.29.7
(semver)
Affected: 1.30.0 , < 1.30.7 (semver) Affected: 1.31.0 , < 1.31.3 (semver) cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-16651",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:32:17.328992Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:32:34.656Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"defaultStatus": "unaffected",
"modules": [
"Parser"
],
"packageName": "github.com/temporalio/sqlparser",
"product": "temporalio/sqlparser",
"programFiles": [
"comments.go",
"token.go"
],
"programRoutines": [
{
"name": "ExtractMysqlComment"
},
{
"name": "Tokenizer.scanMySQLSpecificComment"
},
{
"name": "Parse"
},
{
"name": "ParseStrictDDL"
},
{
"name": "ParseNext"
}
],
"repo": "https://github.com/temporalio/sqlparser",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "0.0.0-20260721183040-74181ffcbaaf",
"status": "affected",
"version": "0.0.0-20180604150908-b055e9c9b4fa",
"versionType": "semver"
}
]
},
{
"collectionURL": "https://pkg.go.dev",
"cpes": [
"cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Matching"
],
"packageName": "go.temporal.io/server",
"product": "Temporal Server",
"programFiles": [
"service/matching/handler.go",
"service/matching/workers/worker_query_engine.go"
],
"programRoutines": [
{
"name": "Handler.ListWorkers"
},
{
"name": "getWhereCause"
}
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThanOrEqual": "1.29.7",
"status": "affected",
"version": "1.29.0",
"versionType": "semver"
},
{
"lessThan": "1.30.7",
"status": "affected",
"version": "1.30.0",
"versionType": "semver"
},
{
"lessThan": "1.31.3",
"status": "affected",
"version": "1.31.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe temporalio/sqlparser CVSS scenario uses the reasonable worst case of a network service passing unauthenticated attacker-controlled SQL to the parser without same-goroutine panic recovery. Applications that embed the library should reassess the vector for their actual input, privilege, and recovery boundaries.\u003c/p\u003e"
}
],
"value": "The temporalio/sqlparser CVSS scenario uses the reasonable worst case of a network service passing unauthenticated attacker-controlled SQL to the parser without same-goroutine panic recovery. Applications that embed the library should reassess the vector for their actual input, privilege, and recovery boundaries."
},
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eIn Temporal Server 1.29.x, ListWorkers reaches the vulnerable parser only when frontend.ListWorkersEnabled is enabled; the setting defaults to false. In 1.30.x, the setting defaults to true. Beginning in 1.31.0, the setting remains defined but is no longer honored, and ListWorkers is always enabled. In supported authenticated deployments, ListWorkers requires namespace read permission.\u003c/p\u003e"
}
],
"value": "In Temporal Server 1.29.x, ListWorkers reaches the vulnerable parser only when frontend.ListWorkersEnabled is enabled; the setting defaults to false. In 1.30.x, the setting defaults to true. Beginning in 1.31.0, the setting remains defined but is no longer honored, and ListWorkers is always enabled. In supported authenticated deployments, ListWorkers requires namespace read permission."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003etemporalio/sqlparser can panic when Parse, ParseStrictDDL, or ParseNext processes a MySQL version comment whose contents are empty or consist only of one to five decimal digits. ExtractMysqlComment does not check the -1 result returned by strings.IndexFunc before using it as a slice boundary. The resulting Go runtime panic propagates unless the caller recovers it on the parsing goroutine, so applications that parse attacker-controlled SQL can terminate. Temporal Server exposes the affected parser through ListWorkers. When that API is enabled, an authenticated caller with namespace read permission can submit a malformed query that terminates the receiving Matching process. Repeated requests can sustain a denial of service. The issue affects availability only; no confidentiality or integrity impact was identified.\u003c/p\u003e"
}
],
"value": "temporalio/sqlparser can panic when Parse, ParseStrictDDL, or ParseNext processes a MySQL version comment whose contents are empty or consist only of one to five decimal digits. ExtractMysqlComment does not check the -1 result returned by strings.IndexFunc before using it as a slice boundary. The resulting Go runtime panic propagates unless the caller recovers it on the parsing goroutine, so applications that parse attacker-controlled SQL can terminate. Temporal Server exposes the affected parser through ListWorkers. When that API is enabled, an authenticated caller with namespace read permission can submit a malformed query that terminates the receiving Matching process. Repeated requests can sustain a denial of service. The issue affects availability only; no confidentiality or integrity impact was identified."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Availability degradation or denial of service caused by an uncaught Go runtime panic. No confidentiality or integrity impact was identified."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 8.7,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "temporalio/sqlparser reasonable worst-case network service embedding"
}
]
},
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "Temporal Server ListWorkers in a supported authenticated deployment"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-129",
"description": "CWE-129: Improper Validation of Array Index",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:32:44.699Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "sqlparser fix pull request",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/sqlparser/pull/5"
},
{
"name": "sqlparser fix commit",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/sqlparser/commit/74181ffcbaaf0c52faa925f4cf27ed6c0c2be86f"
},
{
"name": "Fixed release tag v0.1.0",
"tags": [
"product"
],
"url": "https://github.com/temporalio/sqlparser/tree/v0.1.0"
},
{
"name": "Temporal Server dependency update",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/11190"
},
{
"name": "Temporal Server matching-handler panic containment",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/11090"
},
{
"name": "Temporal Server 1.30.7",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.30.7"
},
{
"name": "Temporal Server 1.31.3",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.31.3"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade github.com/temporalio/sqlparser to v0.0.0-20260721183040-74181ffcbaaf or later. Temporal Server operators should upgrade to 1.30.7, 1.31.3, or 1.32.0, as appropriate for the deployed minor release line. The parser fix treats MySQL version comments as ordinary comments instead of interpreting their contents as SQL.\u003c/p\u003e"
}
],
"value": "Upgrade github.com/temporalio/sqlparser to v0.0.0-20260721183040-74181ffcbaaf or later. Temporal Server operators should upgrade to 1.30.7, 1.31.3, or 1.32.0, as appropriate for the deployed minor release line. The parser fix treats MySQL version comments as ordinary comments instead of interpreting their contents as SQL."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "temporalio/sqlparser malformed MySQL version comments can cause a panic",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUntil upgrading, applications can reject MySQL version comments before invoking the parser or recover parser panics on the parsing goroutine. Temporal Server 1.29 and 1.30 operators can set frontend.ListWorkersEnabled to false. On any affected Server release, restrict ListWorkers to trusted principals or apply the matching-handler panic-recovery change as interim containment. Panic recovery does not replace the parser fix.\u003c/p\u003e"
}
],
"value": "Until upgrading, applications can reject MySQL version comments before invoking the parser or recover parser panics on the parsing goroutine. Temporal Server 1.29 and 1.30 operators can set frontend.ListWorkersEnabled to false. On any affected Server release, restrict ListWorkers to trusted principals or apply the matching-handler panic-recovery change as interim containment. Panic recovery does not replace the parser fix."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-16651",
"datePublished": "2026-09-21T11:32:44.699Z",
"dateReserved": "2026-07-22T18:08:54.825Z",
"dateUpdated": "2026-09-21T15:32:34.656Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-16652 (GCVE-0-2026-16652)
Vulnerability from cvelistv5 – Published: 2026-09-21 11:23 – Updated: 2026-09-21 15:33
VLAI
EPSS
VEX
Title
Temporal Server Schedule exclusion search can cause excessive CPU consumption
Summary
Temporal Server did not bound the work performed while searching for a Schedule's next action time. An authenticated caller with namespace write permission could create or update a Schedule that combines a fine-grained cadence with an exclusion calendar that rejects every candidate time, causing the server to evaluate excluded candidates without a per-search work budget. This can consume excessive CPU in Frontend and Schedule worker components. A persisted specification can also cause its backing Schedule Workflow to repeatedly fail and retry, allowing CPU consumption to continue without additional requests until the Schedule is deleted or its backing Workflow is terminated. Repeated or parallel exploitation can deny service. The issue affects availability only; it does not expose or modify Workflow data.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-09-21 15:32 UTC
CWE
- CWE-606 - Unchecked Input for Loop Condition
Assigner
References
4 references
| URL | Tags |
|---|---|
| https://github.com/temporalio/temporal/pull/11014 | patch |
| https://github.com/temporalio/temporal/commit/c10… | patch |
| https://github.com/temporalio/temporal/releases/t… | release-notes |
| https://github.com/temporalio/temporal/releases/t… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | Temporal Server |
Affected:
1.17.0 , ≤ 1.29.7
(semver)
Affected: 1.30.0 , < 1.30.7 (semver) Affected: 1.31.0 , < 1.31.3 (semver) cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:* |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-16652",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-09-21T15:32:53.335177Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T15:33:15.387Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"cpes": [
"cpe:2.3:a:temporal:temporal:*:*:*:*:*:*:*:*"
],
"defaultStatus": "unaffected",
"modules": [
"Schedules"
],
"packageName": "go.temporal.io/server",
"product": "Temporal Server",
"programFiles": [
"service/worker/scheduler/spec.go"
],
"programRoutines": [
{
"name": "CompiledSpec.GetNextTime"
}
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThanOrEqual": "1.29.7",
"status": "affected",
"version": "1.17.0",
"versionType": "semver"
},
{
"lessThan": "1.30.7",
"status": "affected",
"version": "1.30.0",
"versionType": "semver"
},
{
"lessThan": "1.31.3",
"status": "affected",
"version": "1.31.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eIn Temporal Server 1.17.x, Schedule APIs were disabled by default and the issue was reachable only when frontend.enableSchedules was enabled. Schedule APIs are enabled by default beginning in 1.18.0. In fixed releases, scheduler.specMaxIterations must remain positive. Setting it to zero or a negative value disables the hard work bound.\u003c/p\u003e"
}
],
"value": "In Temporal Server 1.17.x, Schedule APIs were disabled by default and the issue was reachable only when frontend.enableSchedules was enabled. Schedule APIs are enabled by default beginning in 1.18.0. In fixed releases, scheduler.specMaxIterations must remain positive. Setting it to zero or a negative value disables the hard work bound."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eTemporal Server did not bound the work performed while searching for a Schedule\u0027s next action time. An authenticated caller with namespace write permission could create or update a Schedule that combines a fine-grained cadence with an exclusion calendar that rejects every candidate time, causing the server to evaluate excluded candidates without a per-search work budget. This can consume excessive CPU in Frontend and Schedule worker components. A persisted specification can also cause its backing Schedule Workflow to repeatedly fail and retry, allowing CPU consumption to continue without additional requests until the Schedule is deleted or its backing Workflow is terminated. Repeated or parallel exploitation can deny service. The issue affects availability only; it does not expose or modify Workflow data.\u003c/p\u003e"
}
],
"value": "Temporal Server did not bound the work performed while searching for a Schedule\u0027s next action time. An authenticated caller with namespace write permission could create or update a Schedule that combines a fine-grained cadence with an exclusion calendar that rejects every candidate time, causing the server to evaluate excluded candidates without a per-search work budget. This can consume excessive CPU in Frontend and Schedule worker components. A persisted specification can also cause its backing Schedule Workflow to repeatedly fail and retry, allowing CPU consumption to continue without additional requests until the Schedule is deleted or its backing Workflow is terminated. Repeated or parallel exploitation can deny service. The issue affects availability only; it does not expose or modify Workflow data."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Availability degradation or denial of service caused by excessive CPU consumption and a persistent Schedule retry condition. No confidentiality or integrity impact was identified."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "HIGH",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-606",
"description": "CWE-606: Unchecked Input for Loop Condition",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-21T11:23:47.298Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "Fix pull request",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/pull/11014"
},
{
"name": "Fix commit",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/commit/c10c730e53ae394fffaefe44ba3722150fe40720"
},
{
"name": "Temporal Server 1.30.7",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.30.7"
},
{
"name": "Temporal Server 1.31.3",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.31.3"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to Temporal Server 1.30.7, 1.31.3, or 1.32.0, as appropriate for the deployed minor release line, and retain a positive scheduler.specMaxIterations value. The fix bounds the number of excluded candidates evaluated by each next-action search and stops the search with an error when the bound is reached. Review and replace or remove Schedule specifications that exceed the configured bound. Setting scheduler.specMaxIterations to zero or a negative value disables the hard bound.\u003c/p\u003e"
}
],
"value": "Upgrade to Temporal Server 1.30.7, 1.31.3, or 1.32.0, as appropriate for the deployed minor release line, and retain a positive scheduler.specMaxIterations value. The fix bounds the number of excluded candidates evaluated by each next-action search and stops the search with an error when the bound is reached. Review and replace or remove Schedule specifications that exceed the configured bound. Setting scheduler.specMaxIterations to zero or a negative value disables the hard bound."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Temporal Server Schedule exclusion search can cause excessive CPU consumption",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUntil upgrading, set frontend.enableSchedules to false for namespaces that do not require Schedules. This prevents new Schedule API triggers but does not repair already-running problematic Schedules. For namespaces that must retain the feature, restrict Schedule creation and update to trusted principals and delete Schedules whose exclusions prevent next-action computation from completing. Rate limiting alone is insufficient because it does not bound the work caused by one accepted evaluation.\u003c/p\u003e"
}
],
"value": "Until upgrading, set frontend.enableSchedules to false for namespaces that do not require Schedules. This prevents new Schedule API triggers but does not repair already-running problematic Schedules. For namespaces that must retain the feature, restrict Schedule creation and update to trusted principals and delete Schedules whose exclusions prevent next-action computation from completing. Rate limiting alone is insufficient because it does not bound the work caused by one accepted evaluation."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-16652",
"datePublished": "2026-09-21T11:23:47.298Z",
"dateReserved": "2026-07-22T18:08:55.806Z",
"dateUpdated": "2026-09-21T15:33:15.387Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-65655 (GCVE-0-2026-65655)
Vulnerability from cvelistv5 – Published: 2026-08-11 19:29 – Updated: 2026-08-11 20:15
VLAI
EPSS
VEX
Title
Temporal UI Server may set OAuth credential cookies without Secure behind a TLS-terminating reverse proxy
Summary
When OAuth authentication is enabled and browser-facing TLS terminates at a reverse proxy that forwards the callback to Temporal UI Server over HTTP, affected versions derive authentication-cookie Secure attributes from the proxy-to-server connection. Temporal UI Server can therefore issue access-token cookies, and refresh-token cookies when provided by the identity provider, without Secure even though the browser completed login over HTTPS.
A victim who visits attacker-controlled content while a credential remains live may expose that credential only if the attacker can also steer traffic for the UI hostname, prevent the browser's HTTPS connection from succeeding, serve the hostname over HTTP, and read a later same-site plaintext request. A malicious website alone cannot read the cookie, and passive observation of a successful TLS connection is insufficient. Effective HSTS, a blocking HTTPS-only warning, or TLS re-encryption between the proxy and Temporal UI Server prevents the demonstrated disclosure path.
A recovered credential may be replayed within the victim's assigned permissions. Refresh-token replay additionally depends on the identity provider's issuance, expiry, rotation, and reuse-detection behavior.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-11 20:15 UTC
CWE
- CWE-614 - Sensitive Cookie in HTTPS Session Without 'Secure' Attribute
Assigner
References
8 references
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | Temporal UI Server |
Affected:
2.7.0 , < 2.53.2
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-65655",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-08-11T20:15:46.742171Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-08-11T20:15:56.858Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://pkg.go.dev",
"defaultStatus": "unaffected",
"modules": [
"OIDC authentication cookies"
],
"packageName": "github.com/temporalio/ui-server/v2",
"product": "Temporal UI Server",
"programFiles": [
"server/auth/auth.go",
"server/route/auth.go"
],
"repo": "https://github.com/temporalio/ui-server",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "2.53.2",
"status": "affected",
"version": "2.7.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eThe affected configuration enables OAuth authentication, exposes Temporal UI Server to browsers over HTTPS through a TLS-terminating reverse proxy, and forwards requests from that proxy to Temporal UI Server over HTTP. Credential disclosure additionally requires a later plaintext HTTP request for the same UI hostname while a credential remains live, no effective HSTS or blocking HTTPS-only warning, and an attacker able to steer and read that traffic.\u003c/p\u003e"
}
],
"value": "The affected configuration enables OAuth authentication, exposes Temporal UI Server to browsers over HTTPS through a TLS-terminating reverse proxy, and forwards requests from that proxy to Temporal UI Server over HTTP. Credential disclosure additionally requires a later plaintext HTTP request for the same UI hostname while a credential remains live, no effective HSTS or blocking HTTPS-only warning, and an attacker able to steer and read that traffic."
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "An external security researcher who reported this issue responsibly to Temporal Technologies"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eWhen OAuth authentication is enabled and browser-facing TLS terminates at a reverse proxy that forwards the callback to Temporal UI Server over HTTP, affected versions derive authentication-cookie Secure attributes from the proxy-to-server connection. Temporal UI Server can therefore issue access-token cookies, and refresh-token cookies when provided by the identity provider, without Secure even though the browser completed login over HTTPS.\u003c/p\u003e\u003cp\u003eA victim who visits attacker-controlled content while a credential remains live may expose that credential only if the attacker can also steer traffic for the UI hostname, prevent the browser\u0027s HTTPS connection from succeeding, serve the hostname over HTTP, and read a later same-site plaintext request. A malicious website alone cannot read the cookie, and passive observation of a successful TLS connection is insufficient. Effective HSTS, a blocking HTTPS-only warning, or TLS re-encryption between the proxy and Temporal UI Server prevents the demonstrated disclosure path.\u003c/p\u003e\u003cp\u003eA recovered credential may be replayed within the victim\u0027s assigned permissions. Refresh-token replay additionally depends on the identity provider\u0027s issuance, expiry, rotation, and reuse-detection behavior.\u003c/p\u003e"
}
],
"value": "When OAuth authentication is enabled and browser-facing TLS terminates at a reverse proxy that forwards the callback to Temporal UI Server over HTTP, affected versions derive authentication-cookie Secure attributes from the proxy-to-server connection. Temporal UI Server can therefore issue access-token cookies, and refresh-token cookies when provided by the identity provider, without Secure even though the browser completed login over HTTPS.\n\n\n\nA victim who visits attacker-controlled content while a credential remains live may expose that credential only if the attacker can also steer traffic for the UI hostname, prevent the browser\u0027s HTTPS connection from succeeding, serve the hostname over HTTP, and read a later same-site plaintext request. A malicious website alone cannot read the cookie, and passive observation of a successful TLS connection is insufficient. Effective HSTS, a blocking HTTPS-only warning, or TLS re-encryption between the proxy and Temporal UI Server prevents the demonstrated disclosure path.\n\n\n\nA recovered credential may be replayed within the victim\u0027s assigned permissions. Refresh-token replay additionally depends on the identity provider\u0027s issuance, expiry, rotation, and reuse-detection behavior."
}
],
"impacts": [
{
"descriptions": [
{
"lang": "en",
"value": "Disclosure and possible replay of one victim\u0027s live, permission-scoped access or refresh credential. Confidentiality and integrity impact are limited to that credential\u0027s permissions. No direct availability impact was established."
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 2.3,
"baseSeverity": "LOW",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "PASSIVE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-614",
"description": "CWE-614: Sensitive Cookie in HTTPS Session Without \u0027Secure\u0027 Attribute",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-08-11T19:29:39.620Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"name": "Access-token cookie implementation introduced in v2.7.0",
"url": "https://github.com/temporalio/ui-server/commit/821cf598371353f1b579dfe1e87aeb3638b041d6"
},
{
"name": "Refresh-token cookie implementation introduced in v2.45.2",
"url": "https://github.com/temporalio/ui-server/commit/7b9ff533fb51beba75497c0a192c66775c08f279"
},
{
"name": "Affected OAuth credential-cookie implementation in v2.53.1",
"url": "https://github.com/temporalio/ui-server/blob/v2.53.1/server/auth/auth.go#L87-L153"
},
{
"name": "Affected route-cookie implementation in v2.53.1",
"url": "https://github.com/temporalio/ui-server/blob/v2.53.1/server/route/auth.go#L281-L316"
},
{
"name": "Latest confirmed affected release",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/ui-server/releases/tag/v2.53.1"
},
{
"name": "Fix pull request",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/ui/pull/3806"
},
{
"name": "Fix mirrored to Temporal UI Server",
"tags": [
"patch"
],
"url": "https://github.com/temporalio/ui-server/commit/8876b80b63003688ab736f45ef28885695a4f6db"
},
{
"name": "First fixed release",
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/ui-server/releases/tag/v2.53.2"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eUpgrade to Temporal UI Server v2.53.2 or later. The fix derives the authentication-cookie Secure attribute from the configured browser-facing OAuth callback URL instead of the proxy-to-server connection and applies that decision consistently to all authentication cookies.\u003c/p\u003e"
}
],
"value": "Upgrade to Temporal UI Server v2.53.2 or later. The fix derives the authentication-cookie Secure attribute from the configured browser-facing OAuth callback URL instead of the proxy-to-server connection and applies that decision consistently to all authentication cookies."
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Temporal UI Server may set OAuth credential cookies without Secure behind a TLS-terminating reverse proxy",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cp\u003eConfigure TLS between the reverse proxy and Temporal UI Server, enforce HSTS for the public UI hostname, and block plaintext HTTP. These controls prevent the demonstrated disclosure path but do not correct the configuration-dependent cookie attribute.\u003c/p\u003e"
}
],
"value": "Configure TLS between the reverse proxy and Temporal UI Server, enforce HSTS for the public UI hostname, and block plaintext HTTP. These controls prevent the demonstrated disclosure path but do not correct the configuration-dependent cookie attribute."
}
]
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-65655",
"datePublished": "2026-08-11T19:29:39.620Z",
"dateReserved": "2026-07-22T18:08:48.925Z",
"dateUpdated": "2026-08-11T20:15:56.858Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-5724 (GCVE-0-2026-5724)
Vulnerability from cvelistv5 – Published: 2026-04-10 21:06 – Updated: 2026-07-08 19:20
VLAI
EPSS
VEX
Title
Missing Authentication on Streaming gRPC Replication Endpoint
Summary
The frontend gRPC server's streaming interceptor chain did not include the authorization interceptor. When a ClaimMapper and Authorizer are configured, unary RPCs enforce authentication and authorization, but the streaming AdminService/StreamWorkflowReplicationMessages endpoint accepted requests without credentials. This endpoint is registered on the same port as WorkflowService and cannot be disabled independently. An attacker with network access to the frontend port could open the replication stream without authentication. Data exfiltration is possible, but only when a configured replication target is correctly configured and the attacker has knowledge of the cluster configuration, as the history service validates cluster IDs and peer membership before returning replication data.
The fix was applied per release line: it is present in 1.28.4, 1.29.6, 1.30.4, 1.31.2, and 1.32.0 and later releases on each line. Releases 1.31.0 and 1.31.1 do not contain the fix and are affected.
Temporal Cloud is not affected.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-04-13 16:10 UTC
CWE
- CWE-306 - Missing authentication for critical function
Assigner
References
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporal |
Affected:
1.24.0 , < 1.28.4
(semver)
Affected: 1.29.0 , < 1.29.6 (semver) Affected: 1.30.0 , < 1.30.4 (semver) Affected: 1.31.0 , < 1.31.2 (semver) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-5724",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-04-13T16:10:36.242097Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-04-13T16:10:49.014Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com",
"defaultStatus": "unaffected",
"packageName": "temporal",
"product": "temporal",
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.28.4",
"status": "affected",
"version": "1.24.0",
"versionType": "semver"
},
{
"lessThan": "1.29.6",
"status": "affected",
"version": "1.29.0",
"versionType": "semver"
},
{
"lessThan": "1.30.4",
"status": "affected",
"version": "1.30.0",
"versionType": "semver"
},
{
"lessThan": "1.31.2",
"status": "affected",
"version": "1.31.0",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "finder",
"value": "Tiberiu Baron of UiPath\u0027s security team"
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cdiv\u003eThe frontend gRPC server\u0027s streaming interceptor chain did not include the authorization interceptor. When a\u0026nbsp;\u003ccode\u003eClaimMapper\u003c/code\u003e\u0026nbsp;and\u0026nbsp;\u003ccode\u003eAuthorizer\u003c/code\u003e\u0026nbsp;are configured, unary RPCs enforce authentication and authorization, but the streaming\u0026nbsp;\u003ccode\u003eAdminService/StreamWorkflowReplicationMessages\u003c/code\u003e\u0026nbsp;endpoint accepted requests without credentials. This endpoint is registered on the same port as\u0026nbsp;\u003ccode\u003eWorkflowService\u003c/code\u003e\u0026nbsp;and cannot be disabled independently. An attacker with network access to the frontend port could open the replication stream without authentication. Data exfiltration is possible, but\u0026nbsp; only when a configured replication target is correctly configured and the attacker has knowledge of the cluster configuration, as the history service validates cluster IDs and peer membership before returning replication data.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cdiv\u003eThe fix was applied per release line: it is present in 1.28.4, 1.29.6, 1.30.4, 1.31.2, and 1.32.0 and later releases on each line. Releases 1.31.0 and 1.31.1 do not contain the fix and are affected.\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cdiv\u003eTemporal Cloud is not affected.\u003cspan\u003e\u003c/span\u003e\u003c/div\u003e"
}
],
"value": "The frontend gRPC server\u0027s streaming interceptor chain did not include the authorization interceptor. When a\u00a0ClaimMapper\u00a0and\u00a0Authorizer\u00a0are configured, unary RPCs enforce authentication and authorization, but the streaming\u00a0AdminService/StreamWorkflowReplicationMessages\u00a0endpoint accepted requests without credentials. This endpoint is registered on the same port as\u00a0WorkflowService\u00a0and cannot be disabled independently. An attacker with network access to the frontend port could open the replication stream without authentication. Data exfiltration is possible, but\u00a0 only when a configured replication target is correctly configured and the attacker has knowledge of the cluster configuration, as the history service validates cluster IDs and peer membership before returning replication data.\n\n\n\n\nThe fix was applied per release line: it is present in 1.28.4, 1.29.6, 1.30.4, 1.31.2, and 1.32.0 and later releases on each line. Releases 1.31.0 and 1.31.1 do not contain the fix and are affected.\n\n\n\n\nTemporal Cloud is not affected."
}
],
"impacts": [
{
"capecId": "CAPEC-115",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-115 Authentication Bypass"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NO",
"Recovery": "USER",
"Safety": "NEGLIGIBLE",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 6.3,
"baseSeverity": "MEDIUM",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "LOW",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:L/SC:L/SI:N/SA:N/S:N/AU:N/R:U/RE:L",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "LOW"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-306",
"description": "CWE-306 Missing authentication for critical function",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-07-08T19:20:28.034Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.29.6"
},
{
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.30.4"
},
{
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.28.4"
},
{
"tags": [
"patch"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.31.2"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Missing Authentication on Streaming gRPC Replication Endpoint",
"x_generator": {
"engine": "Vulnogram 1.0.1"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-5724",
"datePublished": "2026-04-10T21:06:31.788Z",
"dateReserved": "2026-04-06T21:59:05.129Z",
"dateUpdated": "2026-07-08T19:20:28.034Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2026-5199 (GCVE-0-2026-5199)
Vulnerability from cvelistv5 – Published: 2026-04-01 17:49 – Updated: 2026-04-01 18:24
VLAI
EPSS
VEX
Title
Cross Namespace Access via Batch Operation
Summary
A writer role user in an attacker-controlled namespace could signal, delete, and reset workflows or activities in a victim namespace on the same cluster. Exploitation requires the attacker to know or guess specific victim workflow ID(s) and, for signal operations, signal names. This was due to a bug introduced in Temporal Server v1.29.0 which inadvertently allowed an attacker to control the namespace name value instead of using the server's own trusted name value within the batch activity code. The batch activity validated the namespace ID but did not cross-check the namespace name against the worker's bound namespace, allowing the per-namespace worker's privileged credentials to operate on an arbitrary namespace. Exploitation requires a server configuration where internal components have cross-namespace authorization, such as deployment of the internal-frontend service or equivalent TLS-based authorization for internal identities.
This vulnerability also impacted Temporal Cloud when the attacker and victim namespaces were on the same cell, with the same preconditions as self-hosted clusters.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-04-01 18:23 UTC
CWE
- CWE-639 - Authorization bypass through User-Controlled key
Assigner
References
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | temporal |
Affected:
1.29.0 , < 1.29.5
(semver)
Affected: 1.30.0 , < 1.30.3 (semver) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2026-5199",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-04-01T18:23:18.346230Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-04-01T18:24:50.983Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"modules": [
"Batch Operations"
],
"packageName": "temporal",
"product": "temporal",
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.29.5",
"status": "affected",
"version": "1.29.0",
"versionType": "semver"
},
{
"lessThan": "1.30.3",
"status": "affected",
"version": "1.30.0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cdiv\u003e\u003cspan\u003eA writer role user in an attacker-controlled namespace could signal, delete, and reset workflows or activities in a victim namespace on the same cluster. Exploitation requires the attacker to know or guess specific victim workflow ID(s) and, for signal operations, signal names. This was due to a bug introduced in Temporal Server v1.29.0 which inadvertently allowed an attacker to control the namespace name value instead of using the server\u0027s own trusted name value within the batch activity code. The batch activity validated the namespace ID but did not cross-check the namespace name against the worker\u0027s bound namespace, allowing the per-namespace worker\u0027s privileged credentials to operate on an arbitrary namespace. Exploitation requires a server configuration where internal components have cross-namespace authorization, such as deployment of the internal-frontend service or equivalent TLS-based authorization for internal identities.\u003c/span\u003e\u003c/div\u003e\u003cdiv\u003e\u003cbr\u003e\u003c/div\u003e\u003cdiv\u003eThis vulnerability also impacted Temporal Cloud when the attacker and victim namespaces were on the same cell, with the same preconditions as self-hosted clusters.\u003c/div\u003e\u003cdiv\u003e\u003cpre\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/pre\u003e\u003c/div\u003e"
}
],
"value": "A writer role user in an attacker-controlled namespace could signal, delete, and reset workflows or activities in a victim namespace on the same cluster. Exploitation requires the attacker to know or guess specific victim workflow ID(s) and, for signal operations, signal names. This was due to a bug introduced in Temporal Server v1.29.0 which inadvertently allowed an attacker to control the namespace name value instead of using the server\u0027s own trusted name value within the batch activity code. The batch activity validated the namespace ID but did not cross-check the namespace name against the worker\u0027s bound namespace, allowing the per-namespace worker\u0027s privileged credentials to operate on an arbitrary namespace. Exploitation requires a server configuration where internal components have cross-namespace authorization, such as deployment of the internal-frontend service or equivalent TLS-based authorization for internal identities.\n\n\n\n\nThis vulnerability also impacted Temporal Cloud when the attacker and victim namespaces were on the same cell, with the same preconditions as self-hosted clusters."
}
],
"impacts": [
{
"capecId": "CAPEC-6",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-6 Argument Injection"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "YES",
"Recovery": "USER",
"Safety": "NEGLIGIBLE",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"attackVector": "NETWORK",
"baseScore": 2.3,
"baseSeverity": "LOW",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "LOW",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "LOW",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:L/VA:L/SC:N/SI:L/SA:L/S:N/AU:Y/R:U/RE:M",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "MODERATE"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-639",
"description": "CWE-639 Authorization bypass through User-Controlled key",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-04-01T17:49:15.464Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.29.5"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.30.3"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Cross Namespace Access via Batch Operation",
"x_generator": {
"engine": "Vulnogram 1.0.1"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2026-5199",
"datePublished": "2026-04-01T17:49:15.464Z",
"dateReserved": "2026-03-30T23:48:01.861Z",
"dateUpdated": "2026-04-01T18:24:50.983Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2025-14986 (GCVE-0-2025-14986)
Vulnerability from cvelistv5 – Published: 2025-12-30 20:17 – Updated: 2026-01-02 15:31
VLAI
EPSS
VEX
Title
ExecuteMultiOperation Namespace Policy Bypass
Summary
When frontend.enableExecuteMultiOperation is enabled, the server can apply namespace-scoped validation and feature gates for the embedded StartWorkflowExecutionRequest using its Namespace field rather than the outer, authorized ExecuteMultiOperationRequest.Namespace. This allows a caller authorized for one namespace to bypass that namespace's limits/policies by setting the embedded start request's namespace to a different namespace. The workflow is still created in the outer (authorized) namespace; only validation/gating is performed under the wrong namespace context.
This issue affects Temporal: from 1.24.0 through 1.29.1. Fixed in 1.27.4, 1.28.2, 1.29.2.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-01-02 15:30 UTC
CWE
- CWE-863 - Incorrect Authorization
Assigner
References
Impacted products
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2025-14986",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-01-02T15:30:54.551721Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-01-02T15:31:02.796Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/temporalio/temporal",
"defaultStatus": "unaffected",
"packageName": "temporal",
"product": "Temporal",
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal",
"versions": [
{
"lessThanOrEqual": "1.29.1",
"status": "affected",
"version": "1.24.0",
"versionType": "semver"
},
{
"lessThanOrEqual": "1.28.1",
"status": "affected",
"version": "1.24.0",
"versionType": "semver"
},
{
"lessThanOrEqual": "1.27.3",
"status": "affected",
"version": "1.24.0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "When \u003ccode\u003efrontend.enableExecuteMultiOperation\u003c/code\u003e is enabled, the server can apply namespace-scoped validation and feature gates for the embedded StartWorkflowExecutionRequest using its Namespace field rather than the outer, authorized ExecuteMultiOperationRequest.Namespace. This allows a caller authorized for one namespace to bypass that namespace\u0027s limits/policies by setting the embedded start request\u0027s namespace to a different namespace. The workflow is still created in the outer (authorized) namespace; only validation/gating is performed under the wrong namespace context.\u003cbr\u003eThis issue affects Temporal: from 1.24.0 through 1.29.1. Fixed in 1.27.4, 1.28.2, 1.29.2."
}
],
"value": "When frontend.enableExecuteMultiOperation is enabled, the server can apply namespace-scoped validation and feature gates for the embedded StartWorkflowExecutionRequest using its Namespace field rather than the outer, authorized ExecuteMultiOperationRequest.Namespace. This allows a caller authorized for one namespace to bypass that namespace\u0027s limits/policies by setting the embedded start request\u0027s namespace to a different namespace. The workflow is still created in the outer (authorized) namespace; only validation/gating is performed under the wrong namespace context.\nThis issue affects Temporal: from 1.24.0 through 1.29.1. Fixed in 1.27.4, 1.28.2, 1.29.2."
}
],
"impacts": [
{
"capecId": "CAPEC-115",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-115 Authentication Bypass"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "YES",
"Recovery": "USER",
"Safety": "NEGLIGIBLE",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 1.3,
"baseSeverity": "LOW",
"exploitMaturity": "UNREPORTED",
"privilegesRequired": "LOW",
"providerUrgency": "GREEN",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:U/S:N/AU:Y/R:U/RE:L/U:Green",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "LOW"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-863",
"description": "CWE-863 Incorrect Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2025-12-30T20:17:47.201Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.27.4"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.28.2"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.29.2"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "ExecuteMultiOperation Namespace Policy Bypass",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Set\u0026nbsp;\u003ccode\u003e\u003cspan style=\"background-color: rgba(232, 232, 232, 0.04);\"\u003efrontend.enableExecuteMultiOperation\u003c/span\u003e\u003c/code\u003e\u003cspan style=\"background-color: rgb(255, 255, 255);\"\u003e to false\u003c/span\u003e\u003cbr\u003e"
}
],
"value": "Set\u00a0frontend.enableExecuteMultiOperation to false"
}
],
"x_generator": {
"engine": "Vulnogram 0.5.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2025-14986",
"datePublished": "2025-12-30T20:17:47.201Z",
"dateReserved": "2025-12-19T19:18:54.548Z",
"dateUpdated": "2026-01-02T15:31:02.796Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2025-14987 (GCVE-0-2025-14987)
Vulnerability from cvelistv5 – Published: 2025-12-30 20:16 – Updated: 2026-01-02 15:30
VLAI
EPSS
VEX
Title
Cross Namespace Commands Authorization Bypass
Summary
When system.enableCrossNamespaceCommands is enabled (on by default), the Temporal server permits certain workflow task commands (e.g. StartChildWorkflowExecution, SignalExternalWorkflowExecution, RequestCancelExternalWorkflowExecution) to target a different namespace than the namespace authorized at the gRPC boundary. The frontend authorizes RespondWorkflowTaskCompleted based on the outer request namespace, but the history service later resolves and executes the command using the namespace embedded in command attributes without authorizing the caller for that target namespace. This can allow a worker authorized for one namespace to create, signal, or cancel workflows in another namespace.
This issue affects Temporal: through 1.29.1. Fixed in 1.27.4, 1.28.2, 1.29.2.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-01-02 15:30 UTC
CWE
- CWE-863 - Incorrect Authorization
Assigner
References
Impacted products
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2025-14987",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2026-01-02T15:30:07.041981Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2026-01-02T15:30:19.797Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/temporalio/temporal",
"defaultStatus": "unaffected",
"packageName": "temporal",
"product": "Temporal",
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal",
"versions": [
{
"lessThanOrEqual": "1.29.1",
"status": "affected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "1.28.1",
"status": "affected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "1.27.3",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "When \u003ccode\u003esystem.enableCrossNamespaceCommands\u003c/code\u003e is enabled (on by default), the Temporal server permits certain workflow task commands (e.g. \u003ccode\u003eStartChildWorkflowExecution\u003c/code\u003e, \u003ccode\u003eSignalExternalWorkflowExecution\u003c/code\u003e, \u003ccode\u003eRequestCancelExternalWorkflowExecution\u003c/code\u003e) to target a different namespace than the namespace authorized at the gRPC boundary. The frontend authorizes \u003ccode\u003eRespondWorkflowTaskCompleted\u003c/code\u003e based on the outer request namespace, but the history service later resolves and executes the command using the namespace embedded in command attributes without authorizing the caller for that target namespace. This can allow a worker authorized for one namespace to create, signal, or cancel workflows in another namespace.\u003cbr\u003eThis issue affects Temporal: through 1.29.1. Fixed in 1.27.4, 1.28.2, 1.29.2."
}
],
"value": "When system.enableCrossNamespaceCommands is enabled (on by default), the Temporal server permits certain workflow task commands (e.g. StartChildWorkflowExecution, SignalExternalWorkflowExecution, RequestCancelExternalWorkflowExecution) to target a different namespace than the namespace authorized at the gRPC boundary. The frontend authorizes RespondWorkflowTaskCompleted based on the outer request namespace, but the history service later resolves and executes the command using the namespace embedded in command attributes without authorizing the caller for that target namespace. This can allow a worker authorized for one namespace to create, signal, or cancel workflows in another namespace.\nThis issue affects Temporal: through 1.29.1. Fixed in 1.27.4, 1.28.2, 1.29.2."
}
],
"impacts": [
{
"capecId": "CAPEC-115",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-115 Authentication Bypass"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 5.3,
"baseSeverity": "MEDIUM",
"exploitMaturity": "NOT_DEFINED",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "LOW",
"subConfidentialityImpact": "LOW",
"subIntegrityImpact": "LOW",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:L/SC:L/SI:L/SA:L",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "LOW",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-863",
"description": "CWE-863 Incorrect Authorization",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2025-12-30T20:16:20.154Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.27.4"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.28.2"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.29.2"
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Cross Namespace Commands Authorization Bypass",
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Set \u003ccode\u003esystem.enableCrossNamespaceCommands\u003c/code\u003e to false, unless cross-namespace workflow-task commands are explicitly required."
}
],
"value": "Set system.enableCrossNamespaceCommands to false, unless cross-namespace workflow-task commands are explicitly required."
}
],
"x_generator": {
"engine": "Vulnogram 0.5.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2025-14987",
"datePublished": "2025-12-30T20:16:20.154Z",
"dateReserved": "2025-12-19T19:19:01.833Z",
"dateUpdated": "2026-01-02T15:30:19.797Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}
CVE-2025-8396 (GCVE-0-2025-8396)
Vulnerability from cvelistv5 – Published: 2025-09-15 14:13 – Updated: 2025-09-15 14:52
VLAI
EPSS
VEX
Summary
Insufficiently specific bounds checking on authorization header could lead to denial of service in the Temporal server on all platforms due to excessive memory allocation.This issue affects all platforms and versions of OSS Server prior to 1.26.3, 1.27.3, and 1.28.1 (i.e., fixed in 1.26.3, 1.27.3, and 1.28.1 and later). Temporal Cloud services are not impacted.
Severity
SSVC
Exploitation: none
Automatable: yes
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2025-09-15 14:51 UTC
CWE
- CWE-770 - Allocation of Resources Without Limits or Throttling
Assigner
References
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal | OSS Server |
Affected:
0 , < 1.26.3
(semver)
Affected: 1.27.0 , < 1.27.3 (semver) Affected: 1.28.0 , < 1.28.1 (semver) |
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2025-8396",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "yes"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2025-09-15T14:51:41.610605Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2025-09-15T14:52:27.444Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/temporalio/temporal",
"defaultStatus": "unaffected",
"modules": [
"default claim mapper"
],
"packageName": "temporal",
"platforms": [
"Linux",
"Windows",
"MacOS"
],
"product": "OSS Server",
"programFiles": [
"default_jwt_claim_mapper.go"
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal",
"versions": [
{
"lessThan": "1.26.3",
"status": "affected",
"version": "0",
"versionType": "semver"
},
{
"lessThan": "1.27.3",
"status": "affected",
"version": "1.27.0",
"versionType": "semver"
},
{
"lessThan": "1.28.1",
"status": "affected",
"version": "1.28.0",
"versionType": "semver"
}
]
}
],
"configurations": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Using the default claim mapper, with an OSS Temporal server accessible from untrusted clients (i.e. the open internet)."
}
],
"value": "Using the default claim mapper, with an OSS Temporal server accessible from untrusted clients (i.e. the open internet)."
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Insufficiently specific bounds checking on authorization header could lead to denial of service in the Temporal server on all platforms due to excessive memory allocation.\u003cp\u003eThis issue affects all platforms and versions of OSS Server prior to 1.26.3, 1.27.3, and 1.28.1 (i.e., fixed in 1.26.3, 1.27.3, and 1.28.1 and later). \u003cspan style=\"background-color: rgb(252, 252, 252);\"\u003eTemporal Cloud services are not impacted.\u003c/span\u003e\u003c/p\u003e"
}
],
"value": "Insufficiently specific bounds checking on authorization header could lead to denial of service in the Temporal server on all platforms due to excessive memory allocation.This issue affects all platforms and versions of OSS Server prior to 1.26.3, 1.27.3, and 1.28.1 (i.e., fixed in 1.26.3, 1.27.3, and 1.28.1 and later). Temporal Cloud services are not impacted."
}
],
"impacts": [
{
"capecId": "CAPEC-130",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-130 Excessive Allocation"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "YES",
"Recovery": "NOT_DEFINED",
"Safety": "NEGLIGIBLE",
"attackComplexity": "LOW",
"attackRequirements": "NONE",
"attackVector": "NETWORK",
"baseScore": 6.9,
"baseSeverity": "MEDIUM",
"privilegesRequired": "NONE",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "LOW",
"subConfidentialityImpact": "NONE",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:L/S:N/AU:Y",
"version": "4.0",
"vulnAvailabilityImpact": "LOW",
"vulnConfidentialityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-770",
"description": "CWE-770 Allocation of Resources Without Limits or Throttling",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2025-09-15T14:13:26.507Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.26.3"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.27.3"
},
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.28.1"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Upgrade to a fixed release: \u003ccode\u003ev1.26.3\u003c/code\u003e, \u003ccode\u003ev1.27.3\u003c/code\u003e, \u003ccode\u003ev1.28.1\u003c/code\u003e or later (latest recommended)."
}
],
"value": "Upgrade to a fixed release: v1.26.3, v1.27.3, v1.28.1 or later (latest recommended)."
}
],
"source": {
"discovery": "INTERNAL"
},
"workarounds": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Use mTLS, or bring your own claim mapper."
}
],
"value": "Use mTLS, or bring your own claim mapper."
}
],
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2025-8396",
"datePublished": "2025-09-15T14:13:26.507Z",
"dateReserved": "2025-07-30T20:55:26.996Z",
"dateUpdated": "2025-09-15T14:52:27.444Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
CVE-2025-1243 (GCVE-0-2025-1243)
Vulnerability from cvelistv5 – Published: 2025-02-12 00:09 – Updated: 2025-02-12 15:29
VLAI
EPSS
VEX
Title
Field in api-go proxy not transformed before version 1.44.1
Summary
The Temporal api-go library prior to version 1.44.1 did not send `update response` information to Data Converter when the proxy package within the api-go module was used in a gRPC proxy prior to transmission. This resulted in information contained within the `update response` field not having Data Converter transformations (e.g. encryption) applied. This is an issue only when using the UpdateWorkflowExecution APIs (released on 13th January 2025) with a proxy leveraging the api-go library before version 1.44.1.
Other data fields were correctly sent to Data Converter. This issue does not impact the Data Converter server. Data was encrypted in transit. Temporal Cloud services are not impacted.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2025-02-12 15:29 UTC
CWE
- CWE-311 - Missing Encryption of Sensitive Data
Assigner
References
2 references
| URL | Tags |
|---|---|
| https://github.com/temporalio/api-go/releases/tag… | release-notes |
| https://temporal.io/blog/announcing-a-new-operati… | related |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | api-go library |
Affected:
0 , < 1.44.1
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2025-1243",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2025-02-12T15:29:39.719088Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2025-02-12T15:29:47.069Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"packageName": "api-go",
"product": "api-go library",
"repo": "https://github.com/temporalio/api-go/",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.44.1",
"status": "affected",
"version": "0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "The Temporal api-go library prior to version 1.44.1 did not send `update response` information to Data Converter when the proxy package within the api-go module was used in a gRPC proxy prior to transmission. This resulted in\u0026nbsp;information contained within the `update response` field not having Data Converter transformations (e.g. encryption) applied. This is an issue only when using the UpdateWorkflowExecution APIs (released on 13th January 2025) with a proxy leveraging the api-go library before version 1.44.1.\u003cbr\u003e\u003cbr\u003eOther data fields were correctly sent to Data Converter. This issue does not impact the Data Converter server. Data was encrypted in transit. Temporal Cloud services are not impacted."
}
],
"value": "The Temporal api-go library prior to version 1.44.1 did not send `update response` information to Data Converter when the proxy package within the api-go module was used in a gRPC proxy prior to transmission. This resulted in\u00a0information contained within the `update response` field not having Data Converter transformations (e.g. encryption) applied. This is an issue only when using the UpdateWorkflowExecution APIs (released on 13th January 2025) with a proxy leveraging the api-go library before version 1.44.1.\n\nOther data fields were correctly sent to Data Converter. This issue does not impact the Data Converter server. Data was encrypted in transit. Temporal Cloud services are not impacted."
}
],
"impacts": [
{
"capecId": "CAPEC-204",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-204 Lifting Sensitive Data Embedded in Cache"
}
]
}
],
"metrics": [
{
"cvssV4_0": {
"Automatable": "NOT_DEFINED",
"Recovery": "NOT_DEFINED",
"Safety": "NOT_DEFINED",
"attackComplexity": "LOW",
"attackRequirements": "PRESENT",
"attackVector": "LOCAL",
"baseScore": 2,
"baseSeverity": "LOW",
"privilegesRequired": "LOW",
"providerUrgency": "NOT_DEFINED",
"subAvailabilityImpact": "NONE",
"subConfidentialityImpact": "LOW",
"subIntegrityImpact": "NONE",
"userInteraction": "NONE",
"valueDensity": "NOT_DEFINED",
"vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N",
"version": "4.0",
"vulnAvailabilityImpact": "NONE",
"vulnConfidentialityImpact": "LOW",
"vulnIntegrityImpact": "NONE",
"vulnerabilityResponseEffort": "NOT_DEFINED"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-311",
"description": "CWE-311 Missing Encryption of Sensitive Data",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2025-02-12T00:09:59.647Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/api-go/releases/tag/v1.44.1"
},
{
"tags": [
"related"
],
"url": "https://temporal.io/blog/announcing-a-new-operation-workflow-update"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Upgrade proxy servers leveraging the `api-go` library in your environment to use version 1.44.1 or later of the library."
}
],
"value": "Upgrade proxy servers leveraging the `api-go` library in your environment to use version 1.44.1 or later of the library."
}
],
"source": {
"discovery": "USER"
},
"title": "Field in api-go proxy not transformed before version 1.44.1",
"x_generator": {
"engine": "Vulnogram 0.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2025-1243",
"datePublished": "2025-02-12T00:09:59.647Z",
"dateReserved": "2025-02-11T23:55:49.028Z",
"dateUpdated": "2025-02-12T15:29:47.069Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
CVE-2024-2689 (GCVE-0-2024-2689)
Vulnerability from cvelistv5 – Published: 2024-04-03 21:13 – Updated: 2025-08-27 21:02
VLAI
EPSS
VEX
Title
Denial of Service if invalid UTF-8 sent
Summary
Denial of Service in Temporal Server prior to version 1.20.5, 1.21.6, and 1.22.7 allows an authenticated user who has permissions to interact with workflows and has crafted an invalid UTF-8 string for submission to potentially cause a crashloop. If left unchecked, the task containing the invalid UTF-8 will become stuck in the queue, causing an increase in queue lag. Eventually, all processes handling these queues will become stuck and the system will run out of resources. The workflow ID of the failing task will be visible in the logs, and can be used to remove that workflow as a mitigation. Version 1.23 is not impacted. In this context, a user is an operator of Temporal Server.
Severity
4.4 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2024-04-04 16:14 UTC
CWE
- CWE-20 - Improper Input Validation
Assigner
References
1 reference
| URL | Tags |
|---|---|
| https://github.com/temporalio/temporal/releases | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies, Inc. | Temporal Server |
Affected:
0 , < 1.20.5
(semver)
Affected: 1.21.0 , < 1.21.6 (semver) Affected: 1.22.0 , < 1.22.7 (semver) |
{
"containers": {
"adp": [
{
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 4.4,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "HIGH",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
}
},
{
"other": {
"content": {
"id": "CVE-2024-2689",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2024-04-04T16:14:17.842942Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2025-08-27T21:02:57.514Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
},
{
"providerMetadata": {
"dateUpdated": "2024-08-01T19:18:48.248Z",
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
"shortName": "CVE"
},
"references": [
{
"tags": [
"release-notes",
"x_transferred"
],
"url": "https://github.com/temporalio/temporal/releases"
}
],
"title": "CVE Program Container"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://hub.docker.com/r/temporalio/server",
"defaultStatus": "unaffected",
"packageName": "temporalio/server",
"product": "Temporal Server",
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies, Inc.",
"versions": [
{
"lessThan": "1.20.5",
"status": "affected",
"version": "0",
"versionType": "semver"
},
{
"lessThan": "1.21.6",
"status": "affected",
"version": "1.21.0",
"versionType": "semver"
},
{
"lessThan": "1.22.7",
"status": "affected",
"version": "1.22.0",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cspan style=\"background-color: rgba(232, 232, 232, 0.04);\"\u003eDenial of Service in Temporal Server prior to version 1.20.5, 1.21.6, and 1.22.7 allows an authenticated user who has permissions to interact with workflows and has crafted an invalid UTF-8 string for submission to potentially cause a crashloop. If left unchecked, the task containing the invalid UTF-8 will become stuck in the queue, causing an increase in queue lag. Eventually, all processes handling these queues will become stuck and the system will run out of resources. The workflow ID of the failing task will be visible in the logs, and can be used to remove that workflow as a mitigation. Version 1.23 is not impacted.\u0026nbsp;In this context, a user is an operator of Temporal Server.\u003c/span\u003e\u003cbr\u003e"
}
],
"value": "Denial of Service in Temporal Server prior to version 1.20.5, 1.21.6, and 1.22.7 allows an authenticated user who has permissions to interact with workflows and has crafted an invalid UTF-8 string for submission to potentially cause a crashloop. If left unchecked, the task containing the invalid UTF-8 will become stuck in the queue, causing an increase in queue lag. Eventually, all processes handling these queues will become stuck and the system will run out of resources. The workflow ID of the failing task will be visible in the logs, and can be used to remove that workflow as a mitigation. Version 1.23 is not impacted.\u00a0In this context, a user is an operator of Temporal Server.\n"
}
],
"impacts": [
{
"capecId": "CAPEC-131",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-131 Resource Leak Exposure"
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 4.4,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "NONE",
"integrityImpact": "NONE",
"privilegesRequired": "HIGH",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-20",
"description": "CWE-20 Improper Input Validation",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2024-04-03T21:13:31.599Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/temporal/releases"
}
],
"source": {
"discovery": "INTERNAL"
},
"title": "Denial of Service if invalid UTF-8 sent",
"x_generator": {
"engine": "Vulnogram 0.1.0-dev"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2024-2689",
"datePublished": "2024-04-03T21:13:31.599Z",
"dateReserved": "2024-03-19T20:18:51.036Z",
"dateUpdated": "2025-08-27T21:02:57.514Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
CVE-2024-2435 (GCVE-0-2024-2435)
Vulnerability from cvelistv5 – Published: 2024-04-02 16:40 – Updated: 2024-08-01 19:11
VLAI
EPSS
VEX
Title
Stored XSS in Timeline View
Summary
For an attacker with pre-existing access to send a signal to a workflow, the attacker can make the signal name a script that executes when a victim views that signal. The XSS is in the timeline page displaying the workflow execution details of the workflow that was sent the crafted signal.
Access to send a signal to a workflow is determined by how you configured the authorizer on your server. This includes any entity with permission to directly call SignalWorkflowExecution or SignalWithStartWorkflowExecution, or any entity can deploy a worker that has access to call workflow progress APIs (specifically RespondWorkflowTaskCompleted).
Severity
4.3 (Medium)
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2024-04-02 18:46 UTC
CWE
- CWE-79 - Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Assigner
References
1 reference
| URL | Tags |
|---|---|
| https://github.com/temporalio/ui-server/releases/… | release-notes |
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal OSS | ui-server |
Affected:
2.16.2 , < 2.25.0
(semver)
|
{
"containers": {
"adp": [
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2024-2435",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2024-04-02T18:46:48.461273Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2024-06-04T17:30:46.501Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
},
{
"providerMetadata": {
"dateUpdated": "2024-08-01T19:11:53.568Z",
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
"shortName": "CVE"
},
"references": [
{
"tags": [
"release-notes",
"x_transferred"
],
"url": "https://github.com/temporalio/ui-server/releases/tag/v2.25.0"
}
],
"title": "CVE Program Container"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://hub.docker.com/r/temporalio/ui",
"defaultStatus": "unaffected",
"modules": [
"Timeline view"
],
"packageName": "temporalio/ui",
"product": "ui-server",
"repo": "https://github.com/temporalio/ui-server",
"vendor": "Temporal OSS",
"versions": [
{
"lessThan": "2.25.0",
"status": "affected",
"version": "2.16.2",
"versionType": "semver"
}
]
}
],
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "For an attacker with pre-existing access to send a signal to a workflow, the attacker can make the signal name a script that executes when a victim views that signal. The XSS is in the timeline page displaying the workflow execution details of the workflow that was sent the crafted signal.\u003cbr\u003eAccess to send a signal to a workflow is determined by how you configured the authorizer on your server. This includes any entity with permission to directly call SignalWorkflowExecution or SignalWithStartWorkflowExecution, or any entity can deploy a worker that has access to call workflow progress APIs (specifically RespondWorkflowTaskCompleted).\u003cbr\u003e"
}
],
"value": "For an attacker with pre-existing access to send a signal to a workflow, the attacker can make the signal name a script that executes when a victim views that signal. The XSS is in the timeline page displaying the workflow execution details of the workflow that was sent the crafted signal.\nAccess to send a signal to a workflow is determined by how you configured the authorizer on your server. This includes any entity with permission to directly call SignalWorkflowExecution or SignalWithStartWorkflowExecution, or any entity can deploy a worker that has access to call workflow progress APIs (specifically RespondWorkflowTaskCompleted).\n"
}
],
"impacts": [
{
"capecId": "CAPEC-63",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-63 Cross-Site Scripting (XSS)"
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "LOW",
"baseScore": 4.3,
"baseSeverity": "MEDIUM",
"confidentialityImpact": "LOW",
"integrityImpact": "LOW",
"privilegesRequired": "HIGH",
"scope": "UNCHANGED",
"userInteraction": "REQUIRED",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:L/A:L",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-79",
"description": "CWE-79 Improper Neutralization of Input During Web Page Generation (\u0027Cross-site Scripting\u0027)",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2024-04-02T16:40:24.552Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"tags": [
"release-notes"
],
"url": "https://github.com/temporalio/ui-server/releases/tag/v2.25.0"
}
],
"source": {
"discovery": "EXTERNAL"
},
"title": "Stored XSS in Timeline View",
"x_generator": {
"engine": "Vulnogram 0.1.0-dev"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2024-2435",
"datePublished": "2024-04-02T16:40:24.552Z",
"dateReserved": "2024-03-13T17:29:42.211Z",
"dateUpdated": "2024-08-01T19:11:53.568Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}
CVE-2023-3485 (GCVE-0-2023-3485)
Vulnerability from cvelistv5 – Published: 2023-06-30 17:37 – Updated: 2024-10-28 13:05
VLAI
EPSS
VEX
Title
Insecure Default Authorization in Temporal Server
Summary
Insecure defaults in open-source Temporal Server before version 1.20 on all platforms allows an attacker to craft a task token with access to a namespace other than the one specified in the request. Creation of this task token must be done outside of the normal Temporal server flow. It requires the namespace UUID and information from the workflow history for the target namespace. Under these conditions, it is possible to interfere with pending tasks in other namespaces, such as marking a task failed or completed.
If a task is targeted for completion by the attacker, the targeted namespace must also be using the same data converter configuration as the initial, valid, namespace for the task completion payload to be decoded by workers in the target namespace.
Severity
SSVC
Exploitation: none
Automatable: no
Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2024-10-28 13:04 UTC
CWE
Assigner
References
1 reference
Impacted products
1 product
| Vendor | Product | Version | |
|---|---|---|---|
| Temporal Technologies Inc. | Temporal Server |
Affected:
1.9.1 , < 1.20
(semver)
|
Date Public
2023-07-03 15:30
{
"containers": {
"adp": [
{
"providerMetadata": {
"dateUpdated": "2024-08-02T06:55:03.341Z",
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
"shortName": "CVE"
},
"references": [
{
"tags": [
"x_transferred"
],
"url": "https://github.com/temporalio/temporal/releases/tag/v1.20.0"
}
],
"title": "CVE Program Container"
},
{
"metrics": [
{
"other": {
"content": {
"id": "CVE-2023-3485",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"timestamp": "2024-10-28T13:04:57.081536Z",
"version": "2.0.3"
},
"type": "ssvc"
}
}
],
"providerMetadata": {
"dateUpdated": "2024-10-28T13:05:11.946Z",
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP"
},
"title": "CISA ADP Vulnrichment"
}
],
"cna": {
"affected": [
{
"collectionURL": "https://github.com/temporalio",
"defaultStatus": "unaffected",
"packageName": "temporal",
"product": "Temporal Server",
"programFiles": [
"https://github.com/temporalio/temporal/blob/master/service/frontend/service.go"
],
"repo": "https://github.com/temporalio/temporal",
"vendor": "Temporal Technologies Inc.",
"versions": [
{
"lessThan": "1.20",
"status": "affected",
"version": "1.9.1",
"versionType": "semver"
}
]
}
],
"credits": [
{
"lang": "en",
"type": "reporter",
"user": "00000000-0000-4000-9000-000000000000",
"value": "Jacob LeGrone"
}
],
"datePublic": "2023-07-03T15:30:00.000Z",
"descriptions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "Insecure defaults in open-source Temporal Server before version 1.20 on all platforms allows an attacker to craft a task token with access to a namespace other than the one specified in the request. Creation of this task token must be done outside of the normal Temporal server flow. It requires the namespace UUID and information from the workflow history for the target namespace. Under these conditions, it is possible to interfere with pending tasks in other namespaces, such as marking a task failed or completed.\u003cbr\u003eIf a task is targeted for completion by the attacker, the targeted namespace must also be using the same data converter configuration as the initial, valid, namespace for the task completion payload to be decoded by workers in the target namespace.\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e"
}
],
"value": "Insecure defaults in open-source Temporal Server before version 1.20 on all platforms allows an attacker to craft a task token with access to a namespace other than the one specified in the request. Creation of this task token must be done outside of the normal Temporal server flow. It requires the namespace UUID and information from the workflow history for the target namespace. Under these conditions, it is possible to interfere with pending tasks in other namespaces, such as marking a task failed or completed.\nIf a task is targeted for completion by the attacker, the targeted namespace must also be using the same data converter configuration as the initial, valid, namespace for the task completion payload to be decoded by workers in the target namespace.\n\n\n\n"
}
],
"impacts": [
{
"capecId": "CAPEC-114",
"descriptions": [
{
"lang": "en",
"value": "CAPEC-114 Authentication Abuse Authentication Abuse"
}
]
}
],
"metrics": [
{
"cvssV3_1": {
"attackComplexity": "HIGH",
"attackVector": "LOCAL",
"availabilityImpact": "LOW",
"baseScore": 3,
"baseSeverity": "LOW",
"confidentialityImpact": "NONE",
"integrityImpact": "LOW",
"privilegesRequired": "HIGH",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:L/A:L",
"version": "3.1"
},
"format": "CVSS",
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"cweId": "CWE-863",
"description": "CWE-863 Incorrect Authorization3 Incorrect Authorization",
"lang": "en",
"type": "CWE"
}
]
},
{
"descriptions": [
{
"cweId": "CWE-1188",
"description": "CWE-1188 Insecure Default Initialization of Resource Insecure Default Initialization of Resource",
"lang": "en",
"type": "CWE"
}
]
}
],
"providerMetadata": {
"dateUpdated": "2023-06-30T17:38:22.233Z",
"orgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"shortName": "Temporal"
},
"references": [
{
"url": "https://github.com/temporalio/temporal/releases/tag/v1.20.0"
}
],
"solutions": [
{
"lang": "en",
"supportingMedia": [
{
"base64": false,
"type": "text/html",
"value": "\u003cul\u003e\u003cli\u003e\u003cspan style=\"background-color: var(--wht);\"\u003eSet \u0026nbsp;\u003c/span\u003e\u003ccode\u003e\u003ca target=\"_blank\" rel=\"nofollow\" href=\"https://github.com/temporalio/temporal/pull/3798\"\u003efrontend.enableTokenNamespaceEnforcement\u003c/a\u003e\u0026nbsp;\u003c/code\u003e\u003cspan style=\"background-color: var(--wht);\"\u003eto \u003c/span\u003e\u003ctt\u003etrue\u003c/tt\u003e\u003cspan style=\"background-color: var(--wht);\"\u003e\u0026nbsp; \u003c/span\u003e\u003c/li\u003e\u003cli\u003e\u003cspan style=\"background-color: var(--wht);\"\u003eUpgrade to version 1.20 or above, where this is the default\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e"
}
],
"value": " * Set \u00a0 frontend.enableTokenNamespaceEnforcement https://github.com/temporalio/temporal/pull/3798 \u00a0to true\u00a0 \n * Upgrade to version 1.20 or above, where this is the default\n\n\n"
}
],
"source": {
"discovery": "UNKNOWN"
},
"title": "Insecure Default Authorization in Temporal Server",
"x_generator": {
"engine": "Vulnogram 0.1.0-dev"
}
}
},
"cveMetadata": {
"assignerOrgId": "61241ed8-fa44-4f23-92db-b8c443751968",
"assignerShortName": "Temporal",
"cveId": "CVE-2023-3485",
"datePublished": "2023-06-30T17:37:57.772Z",
"dateReserved": "2023-06-30T17:29:17.808Z",
"dateUpdated": "2024-10-28T13:05:11.946Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.1"
}