CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-84298

CVE-2026-84298: Cross-Tenant Authorization Bypass and Information Disclosure in Hatchet V1 Dispatcher

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 23, 2026·6 min read·6 visits

Executive Summary (TL;DR)

A design flaw in Hatchet's V1 Dispatcher allows authenticated users to receive sensitive task completion payloads of other tenants sharing the same dispatcher process, provided they obtain the non-enumerable UUIDv4 of the target task.

Hatchet V1 Dispatcher before version 0.95.3 fails to enforce proper tenant boundaries when managing active stream connections for durable task completions. Because the global lookup map is keyed solely by task external identifiers, authenticated attackers who obtain a victim's task UUID can register a stream subscription and receive task results belonging to another tenant.

Vulnerability Overview

The Hatchet V1 Dispatcher manages asynchronous communication, task execution streams, and worker callbacks. It acts as the routing orchestrator for background processes, ensuring that durable workflow events and system state changes map back to their originating tenant worker streams. The dispatcher uses in-memory concurrency-safe maps to track state and maintain active network connections.

Historically, the dispatcher exposed a vulnerable surface through its durable task streaming endpoints. Specifically, the component failed to enforce logical tenant isolation boundaries during worker registration for incoming task execution streams. This lack of logical separation is categorized as CWE-862: Missing Authorization.

In multi-tenant deployments where different tenants share the same underlying dispatcher process, this omission allows workers to register interest in events from another tenant. If an attacker possesses the specific, non-enumerable task identifier, they can intercept the payload sequence of target workflow executions, bypassing tenant isolation controls.

Root Cause Analysis

The technical root cause resides in the declaration and application of the durableInvocations map within internal/services/dispatcher/dispatcher_v1.go. This map tracks active task execution callbacks using Go's syncx.Map. Prior to version 0.95.3, the map structure was configured as syncx.Map[uuid.UUID, *durableTaskInvocation], associating a flat task UUID directly with an active execution context.

When a worker calls the DurableTask gRPC endpoint to subscribe to execution updates, the handler in server_v1.go checks if the requested task identifier exists in its registry. It registers the connection in the global durableInvocations map using the user-supplied task ID as the key. This lookup and registration occur before validating whether the authenticated worker's tenant context owns the task.

Similarly, when a callback completes, the dispatcher resolves the destination stream using DeliverDurableEventLogEntryCompletion. Because this lookup queries the map solely by the task's external UUID, it locates any registered stream without checking the destination stream's tenant. Consequently, if an attacker registers the task UUID first, the dispatcher routes the completed execution payload to the attacker's stream session.

Code Analysis and Comparison

Analyzing the patch in commit 9555bfdd1e97f61d25e614ccaa107c5fb7dc4976 shows how Hatchet engineers transitioned the lookup logic from a single identifier to a compound key.

Before the patch, the registry was keyed solely by the task's external UUID:

// Vulnerable global map definition
durableInvocations syncx.Map[uuid.UUID, *durableTaskInvocation]

The patch fixes this vulnerability by introducing the durableInvocationsKey struct, which implements a composite key of the tenant ID and the task ID:

// Patched key implementation enforcing multi-tenancy boundaries
type durableInvocationsKey struct {
	tenantId uuid.UUID
	taskId   uuid.UUID
}
 
type DispatcherServiceImpl struct {
	// ... other fields ...
	durableInvocations syncx.Map[durableInvocationsKey, *durableTaskInvocation]
}

The registration logic in server_v1.go was updated to require the composite key during both storage and cleanup phases. This ensures that a worker's registration is isolated to their specific tenant scope:

// Patched registration logic enforcing the validated tenant context
if _, exists := registeredTasks[taskExtId]; !exists {
	d.durableInvocations.Store(durableInvocationsKey{
		tenantId: tenantId,
		taskId:   taskExtId,
	}, invocation)
	registeredTasks[taskExtId] = struct{}{}
}

When the task completes, the dispatcher retrieves the event stream using the authenticated tenant ID of the execution, making it impossible to query registrations associated with other tenants:

// Patched lookup using the verified tenant context
func (d *DispatcherServiceImpl) DeliverDurableEventLogEntryCompletion(
	tenantId uuid.UUID, 
	taskExternalId uuid.UUID, 
	// ... other parameters ...
) error {
	inv, ok := d.durableInvocations.Load(durableInvocationsKey{
		tenantId: tenantId,
		taskId:   taskExternalId,
	})
	if !ok {
		return fmt.Errorf("no active invocation found for task %s", taskExternalId)
	}
	// ... delivery sequence ...
}

Exploitation Methodology

Exploiting this flaw requires specific conditions and a sequenced approach. The target deployment must run shared dispatcher processes with multi-tenancy enabled. Single-tenant deployments are not affected.

First, the attacker must discover or acquire the non-enumerable UUIDv4 associated with a victim's active workflow task. Because UUIDv4 values have high entropy, brute-force search is not computationally feasible. The attacker must obtain the ID through logs, diagnostic API leaks, or adjacent path disclosures.

Second, the attacker establishes a gRPC stream connection using an authenticated worker on Tenant A. This worker calls the DurableTask stream subscription handler, passing the victim's task UUID as the execution target.

Third, when the dispatcher receives the completion signal for the victim's task, it queries the shared durableInvocations map. Because the lookup matches only on the task UUID, it finds the attacker's stream registration. The dispatcher then delivers the completed workflow result directly to the attacker's gRPC stream, revealing potentially sensitive payload details.

Impact Assessment

The overall security impact of this vulnerability is assessed as low (CVSS Base Score 3.1). Although it allows cross-tenant data leakage, the high complexity of discovering a targeted, non-enumerable UUIDv4 prevents automated, widespread exploitation.

The attack vector is Network, as the gRPC endpoint is accessible remotely. The attack complexity is High because the attacker must acquire the specific task identifier via out-of-band means and operate on the exact same dispatcher instance. Privileges required are Low, as the attacker must have valid credentials as a tenant worker.

Confidentiality impact is Low because only individual task execution result payloads can be retrieved. There is no impact on integrity or availability, as the routing collision does not allow modification of execution states or denial of service on the dispatcher platform itself. It is not currently included in CISA's Known Exploited Vulnerabilities catalog.

Remediation and Mitigation

The primary recommendation is to update the Hatchet orchestrator to version 0.95.3 or later. This release replaces the vulnerable flat map key with a compound structure incorporating the verified tenant context, eliminating the routing collision vulnerability.

If upgrading is not immediately possible, deployers can restrict dispatcher instances to dedicated single-tenant workloads. Because the routing map exists in-memory per dispatcher process, isolating dispatcher instances by tenant blocks the cross-tenant exposure pathway.

Furthermore, developers and operators should review logging levels and sanitization rules. Ensure that internal task UUIDs are never exposed in user-facing logs, error messages, or diagnostic responses, as preserving the confidentiality of these identifiers is a key control in preventing exploitation.

Fix Analysis (1)

Technical Appendix

CVSS Score
3.1/ 10
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N
EPSS Probability
0.15%
Top 95% most exploited

Affected Systems

Hatchet Orchestrator (V1 Dispatcher Service)Hatchet multi-tenant deployments

Affected Versions Detail

Product
Affected Versions
Fixed Version
hatchet
hatchet-dev
< 0.95.30.95.3
AttributeDetail
CWE IDCWE-862 (Missing Authorization)
Secondary CWE IDCWE-639 (Authorization Bypass Through User-Controlled Key)
Attack VectorNetwork
CVSS v3.1 Score3.1 (Low)
Exploit Statusnone
KEV StatusNot Listed
EPSS Score0.00154 (0.15% probability of exploitation)

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-862
Missing Authorization

The software does not perform authorization checks when a user attempts to register stream listeners for execution task UUIDs, enabling a tenant worker to register for events belonging to another tenant.

References & Sources

  • [1]Hatchet V1 Dispatcher Durable Task Payload Disclosure Security Advisory
  • [2]Hatchet Fix Commit: Key durableInvocations registry by tenant and task id
  • [3]NVD Entry for CVE-2026-84298
  • [4]CVE Record on cve.org

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•CVE-2026-79913
6.5

CVE-2026-79913: Server-Side Request Forgery Bypass via IPv6 Transition Addresses in Cloudreve

Cloudreve versions prior to 4.18.0 contain a Server-Side Request Forgery (SSRF) vulnerability. The application's validation logic fails to canonicalize various IPv4-in-IPv6 transition formats, such as NAT64, 6to4, and Teredo addresses. Consequently, an authenticated user with remote-download permissions can issue requests that bypass SSRF network boundaries, enabling connection routing to loopback, private, or cloud metadata endpoints.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 3 hours ago•CVE-2026-88978
4.3

CVE-2026-88978: Multi-Tenant Isolation Failure in Hatchet Durable Workflow Engine

CVE-2026-88978 is a critical cross-tenant data exposure vulnerability in Hatchet, a platform for orchestrating background tasks and durable workflows. The flaw exists in the durable-task event retrieval system where client-supplied task, node, and branch UUIDs are resolved via the ListSatisfiedEntries database query without verifying the tenant ownership of the requesting worker context.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 4 hours ago•CVE-2026-88010
6.3

CVE-2026-88010: Unauthenticated Username-Enumeration Timing Oracle in Traefik BasicAuth Middleware

An unauthenticated timing oracle vulnerability exists in Traefik's BasicAuth middleware from version 3.6.11 up to (but not including) 3.7.13. By utilizing a request coalescing mechanism (singleflight.Group) that relies on server-side stored secret hashes for key generation, the software introduces a timing discrepancy. Concurrent requests targeting non-existent usernames generate identical singleflight keys and coalesce, resulting in accelerated response times. Conversely, requests targeting valid usernames produce distinct keys and execute independently, allowing remote attackers to systematically enumerate valid usernames.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 5 hours ago•CVE-2026-91129
5.4

CVE-2026-91129: Server-Side Request Forgery in Home Assistant Core IPP Integration

Home Assistant Core prior to version 2026.2.3 is vulnerable to Server-Side Request Forgery (SSRF) via the IPP integration's auto-discovery mechanism. Unauthenticated mDNS advertisements can trigger HTTP requests that follow malicious redirects to loopback interfaces.

Alon Barad
Alon Barad
9 views•7 min read
•about 6 hours ago•CVE-2026-91130
9.3

CVE-2026-91130: DOM-Based Cross-Site Scripting in Home Assistant Statistics Graph Card

CVE-2026-91130 is a critical DOM-based Cross-Site Scripting (XSS) vulnerability in the Home Assistant open-source home automation platform. Prior to version 2026.7.0, the Statistics Graph card rendered series tooltips using raw HTML string interpolation without escaping user-controlled entity friendly names. By abusing this vulnerability, an authenticated user with low-privilege access can inject arbitrary HTML and JavaScript into entity name fields, which executes in the context of an administrative user's browser session upon hovering over a data point on an affected chart.

Alon Barad
Alon Barad
7 views•5 min read
•about 7 hours ago•CVE-2026-58268
7.5

CVE-2026-58268: Denial of Service via Uncontrolled Memory Allocation in emiago/sipgo Stream Parser

A high-severity denial of service vulnerability exists in the emiago/sipgo Go library when parsing stream-based SIP messages. The stream parser fails to validate declared Content-Length header sizes before initiating memory allocations, allowing remote, unauthenticated attackers to trigger process memory exhaustion and application crashes.

Alon Barad
Alon Barad
8 views•6 min read