Missing Authentication on Streaming gRPC Replication Endpoint
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 1.28.4, 1.29.6, 1.30.4, 1.31.2
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- 1 proof of concept on GitHub
- Exploitation: none
- Automatable: no
- Technical impact: partial
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.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: partial
- Record last updated
Affected versions
- temporal
From 1.24.0 · fixed in 1.28.4; From 1.29.0 · fixed in 1.29.6; From 1.30.0 · fixed in 1.30.4; From 1.31.0 · fixed in 1.31.2
- go.temporal.io/serverGo
fixed in 1.28.4; From 1.29.0-135.0 · fixed in 1.29.6; From 1.30.0-143.0 · fixed in 1.30.4
- go.temporal.io/serverGo
fixed in 1.28.4
- go.temporal.io/serverGo
From 1.29.0-135.0 · fixed in 1.29.6
- go.temporal.io/serverGo
From 1.30.0-143.0 · fixed in 1.30.4