Apr 13, 2026·5 min read·112 visits
A missing interceptor in Temporal's gRPC streaming configuration allows unauthenticated access to a cross-cluster replication endpoint, enabling potential data exfiltration if the attacker possesses internal cluster routing configurations.
Temporal's go.temporal.io/server package contains a missing authentication vulnerability in its frontend gRPC server. The streaming interceptor chain omits the authorization interceptor, allowing unauthenticated network attackers to access the AdminService/StreamWorkflowReplicationMessages endpoint and potentially exfiltrate workflow replication data.
Temporal operates a frontend service that handles incoming gRPC requests, routing them to underlying subsystems like the history service. The frontend service enforces authentication and authorization via a ClaimMapper and Authorizer configuration.
This security model relies on gRPC interceptors to validate requests before they reach the designated endpoint handlers. Unary RPCs, which consist of a single request and response, pass through an interceptor chain that correctly invokes the authorization logic.
The vulnerability exists because the streaming RPC interceptor chain omits this critical authorization component. Consequently, streaming endpoints registered on the frontend service process requests without evaluating the client's credentials.
The primary affected component is the AdminService/StreamWorkflowReplicationMessages endpoint. This endpoint facilitates cross-cluster replication and operates on the default WorkflowService port (7233), meaning it shares the same network attack surface as standard client traffic.
The root cause of CVE-2026-5724 is classified as CWE-306: Missing Authentication for Critical Function. The frontend gRPC server initializes two distinct interceptor chains during startup: one for unary requests and one for streaming requests.
Developers successfully registered the authorization interceptor in the unary chain, ensuring that standard API calls undergo credential validation. However, the streaming chain initialization lacked the corresponding registration call.
When a client initiates a request to a streaming endpoint, the gRPC server routes the connection through the incomplete streaming interceptor chain. The system bypasses the ClaimMapper and Authorizer entirely, proceeding directly to the endpoint handler.
This configuration oversight exclusively affects endpoints utilizing gRPC streaming. Since the replication stream is bound to the primary frontend port and cannot be independently disabled, the unprotected endpoint remains exposed alongside authenticated services.
The flaw resides in the server initialization phase where the gRPC options are constructed. The vulnerable implementation applies the authorization interceptor to unary requests but neglects the grpc.StreamInterceptor option.
// Conceptual Vulnerable Configuration
serverOpts := []grpc.ServerOption{
grpc.UnaryInterceptor(
grpc_middleware.ChainUnaryServer(
authInterceptor.Unary(), // Authentication enforced here
// ... other interceptors
),
),
grpc.StreamInterceptor(
grpc_middleware.ChainStreamServer(
// Missing authInterceptor.Stream()
// ... other interceptors
),
),
}The patched implementation explicitly adds the streaming authorizer to the chain. The developers also introduced a dynamic configuration flag, system.disableStreamingAuthorizer, to allow backward compatibility during complex cluster upgrades.
// Conceptual Patched Configuration
serverOpts := []grpc.ServerOption{
// ... Unary chain remains unchanged
grpc.StreamInterceptor(
grpc_middleware.ChainStreamServer(
getStreamAuthInterceptor(dynamicConfig), // Authentication enforced here
// ... other interceptors
),
),
}This fix ensures that the gRPC core library evaluates authorization for both request patterns. If the dynamic configuration disables the authorizer, the system explicitly bypasses the check, allowing controlled fallback behavior.
Exploitation requires direct network routing to the Temporal frontend service port, typically exposed on TCP port 7233. The attacker initiates a standard gRPC streaming connection targeting the AdminService/StreamWorkflowReplicationMessages RPC method.
Because the streaming interceptor chain lacks the authorization check, the frontend service accepts the connection and forwards the request to the underlying history service. The attacker bypasses the initial access controls entirely.
Data exfiltration is constrained by secondary validation mechanisms within the history service. The backend logic requires valid cluster routing identifiers to process the replication stream.
To successfully extract workflow replication data, the attacker must possess prerequisite knowledge of the target cluster's internal configuration, specifically the cluster IDs and peer membership data. Without this telemetry, the history service will reject the data retrieval attempt, mitigating unauthenticated blind extraction.
The vulnerability carries a CVSS v4.0 score of 6.3 (Medium), reflecting the conditional nature of the data exfiltration impact. The attack requires no privileges and leverages low attack complexity, making the network attack surface highly accessible.
Successful exploitation compromises the confidentiality of workflow replication data. This data can contain sensitive business logic, execution state, and payload information traversing the Temporal cluster.
Integrity and availability remain unaffected, as the endpoint exclusively handles outbound replication streams. An attacker cannot inject false workflow state or disrupt existing replication operations through this vector.
The EPSS score of 0.001 (0.10%) indicates a very low probability of active exploitation in the wild. This correlates with the strict prerequisite of internal cluster knowledge, which severely limits the utility of automated scanning and mass exploitation.
Temporal addressed CVE-2026-5724 in go.temporal.io/server versions 1.28.4, 1.29.6, and 1.30.4. Administrators must upgrade their clusters to these patched releases to enforce streaming authorization.
Organizations utilizing cross-cluster replication must ensure their automated deployment pipelines provision appropriate credentials for the replication streams before enforcing the new configuration. Failing to update credentials will disrupt active replication.
During the upgrade process, administrators can utilize the system.disableStreamingAuthorizer dynamic configuration parameter. Setting this value to true temporarily reverts the system to the vulnerable state, preventing replication outages while teams coordinate credential rotation.
Security teams should monitor network telemetry for unexpected gRPC connections targeting the AdminService/StreamWorkflowReplicationMessages endpoint. Implement network segmentation to restrict frontend access strictly to authorized clients and peer clusters.
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| Product | Affected Versions | Fixed Version |
|---|---|---|
go.temporal.io/server Temporal Technologies, Inc. | 1.24.0 <= v < 1.28.4 | 1.28.4 |
go.temporal.io/server Temporal Technologies, Inc. | 1.29.0 <= v < 1.29.6 | 1.29.6 |
go.temporal.io/server Temporal Technologies, Inc. | 1.30.0 <= v < 1.30.4 | 1.30.4 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-306 |
| Attack Vector | Network |
| Authentication Required | None |
| CVSS v4.0 Score | 6.3 (Medium) |
| EPSS Score | 0.10% |
| Exploit Status | None |
| Impact | Conditional Data Exfiltration |
The software does not perform any authentication for a functionality that requires a restricted access control.
SiYuan is a privacy-first personal knowledge management system. In versions prior to v3.7.3, the application fails to apply publish-access filters to the getBacklinkDoc and getBackmentionDoc content endpoints (/api/ref/getBacklinkDoc and /api/ref/getBackmentionDoc). While the corresponding backlink list endpoints correctly filter out publish-forbidden documents, the content endpoints, which are only gated by high-level route authorization checks via CheckAuth, do not. Consequently, a user with low-privilege read access, or an anonymous reader when publish Basic Auth is disabled, can directly invoke these endpoints using a known publish-forbidden document's ID to retrieve its rendered DOM content or determine whether it references a specific target block.
A metadata disclosure vulnerability exists in SiYuan prior to version v3.7.3. The /api/block/getBlockInfo endpoint fails to validate authorization boundaries in publish mode, allowing anonymous readers to access private document metadata.
A critical authorization bypass vulnerability exists in SiYuan personal knowledge management system before v3.7.4. The /api/ref/refreshBacklink endpoint lacks administrative role verification, enabling unauthenticated users to initiate database transactions and disk operations. When combined with an unsafe SQL generation pattern in nested backlink queries, an attacker can exploit a secondary SQL injection vulnerability to compromise local databases or cause denial-of-service conditions.
A critical SQL Injection vulnerability exists in the SiYuan note-taking application (versions <= v3.7.2) due to improper neutralization of single quotes within the backlink and mention search queries. Because the application constructs SQLite Full Text Search (FTS) queries via direct string concatenation and uses a database driver that supports stacked query statements, remote unauthenticated attackers can execute arbitrary SQL commands on the master database, compromising all hosted notebooks. This issue has been fully remediated in version v3.7.4.
CVE-2026-72810 is a critical publish-boundary bypass vulnerability in the SiYuan personal knowledge management system before version 3.7.4. The flaw lies in the backend real-time WebSocket broadcast mechanism. When configured in public publish mode, the system fails to differentiate between unauthenticated public reader sessions and authorized administrative sessions within its global connection pool. This architectural oversight allows unauthenticated remote attackers connecting to the public WebSocket endpoint on port 6808 to passively receive real-time, raw workspace modification events, including keystroke logs, block updates, and content from protected or forbidden documents.
An authentication bypass vulnerability exists in the SiYuan personal knowledge management system (versions <= v3.7.2). The flaw occurs because the kernel's authorization validation handler trusts loopback connection origins blindly, allowing remote network attackers to gain administrative privileges via an exposed local reverse proxy.