CVE-2026-84298: Hatchet: Cross-tenant durable callback payload disclosure in Hatchet V1 Dispatcher
Summary
The V1 DurableTask stream handler registers worker-supplied durable task external IDs in an in-memory callback routing map before verifying that the authenticated tenant owns the task. If the tenant-scoped ownership check fails, the handler logs the error and continues, but the map entry persists until the stream closes.
Durable callback delivery resolves the destination stream by taskexternalid only, without checking tenant identity. As a result, a tenant A worker that knows a tenant B durable task external UUID can hold its stream open and receive tenant B's durable callback result payload when the callback is delivered on the same dispatcher process.
Impact
This advisory requires an attacker to successfully guess a durable task external UUID belonging to another tenant. Durable task external IDs are generated with uuid.New() (UUIDv4) and are not enumerable across tenants, so exploitation requires prior knowledge of a target task UUID through an out-of-band channel. Thus, while the following environments are impacted, there is an extremely low probability it would be exploited.
Who is impacted. Any Hatchet deployment that hosts more than one tenant on the same instance: - Hatchet Cloud (multi-tenant SaaS) - Self-hosted Hatchet with multiple internal teams / business units sharing one instance - Any deployment where a single tenant's API token can be obtained by an attacker
Single-tenant self-hosted deployments are unaffected in practice (the "victim" and "attacker" tenants would be the same).
Other sources
Hatchet is a platform for orchestrating background tasks, AI agents, and durable workflows at scale. Prior to 0.95.3, the V1 DurableTask stream handler stores worker-supplied taskexternalid values in the durableInvocations routing map before tenant ownership is verified, and callback delivery resolves that map by task UUID without tenant identity. An authenticated tenant worker that knows another tenant's durable task UUID and keeps a stream open on the same dispatcher process can receive that task's durable callback result payload. UUIDv4 values are not enumerable, and single-tenant deployments are unaffected in practice. This issue is fixed in version 0.95.3.
— NVD
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/hatchet-dev/hatchetto a version that resolves this vulnerability.Fixed in 0.95.3 - Upgrade
Upgrade
Hatchetto a version that resolves this vulnerability.Fixed in 0.95.3
Event History
Frequently Asked Questions
Which deployments are realistically exposed?
Multi-tenant Hatchet deployments using versions before 0.95.3 are affected in practice. Single-tenant deployments are unaffected in practice.
What does an attacker need to exploit this issue?
The attacker needs authenticated access as a tenant worker, knowledge of another tenant's durable task UUID, and the ability to keep a stream open on the same dispatcher process. UUIDv4 task identifiers are not enumerable, which increases exploitation difficulty.
What data could be disclosed?
An attacker can receive the durable callback result payload for another tenant's durable task. The provided information does not indicate integrity or availability impact.
How can the issue be remediated?
Upgrade Hatchet to version 0.95.3, which fixes the issue.