CVE-2026-65651 PUBLISHED

temporalio/sqlparser deeply nested unary expressions can cause a fatal stack overflow during AST traversal

Assigner: Temporal
Reserved: 22.07.2026 Published: 21.09.2026 Updated: 21.09.2026

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.

Metrics

CVSS Vector: 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
CVSS Score: 8.7

temporalio/sqlparser reasonable worst-case network service embedding

CVSS Vector: 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
CVSS Score: 7.1

Temporal Server visibility or archival query path in a supported authenticated deployment

CVSS Vector: 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
CVSS Score: 6

Dynamically confirmed Temporal Server ListWorkers path with retained worker state

Product Status

Vendor Temporal Technologies, Inc.
Product temporalio/sqlparser
Versions Default: unaffected
  • affected from 0.0.0-20141206041240-1aae9baceee8 to 0.0.0-20260721183058-0466b6b405ac (excl.)
Vendor Temporal Technologies, Inc.
Product Temporal Server
Versions Default: unaffected
  • unknown from 0.0.0 to 0.10.0 (excl.)
  • affected from 0.10.0 to 1.29.7 (incl.)
  • affected from 1.30.0 to 1.30.7 (excl.)
  • affected from 1.31.0 to 1.31.3 (excl.)

Affected Configurations

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.

Workarounds

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.

Solutions

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.

Credits

  • An external security researcher who reported this issue responsibly to Temporal Technologies finder

References

Problem Types

  • CWE-674: Uncontrolled Recursion CWE

Impacts

  • Denial of service caused by runtime-fatal Go stack exhaustion and process termination. No confidentiality or integrity impact was identified.