Skip to main content

Hatchet EUVDEUVD-2026-83979

| CVE-2026-84298 LOW
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-09-21 GitHub_M GHSA-9q4h-f4x5-ffq8
3.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as tenant worker
  2. Delivery
    Obtain victim tenant's durable task UUID
  3. Exploit
    Open DurableTask stream on same dispatcher process
  4. Execution
    Registered in tenant-blind routing map
  5. Impact
    Receive victim's durable callback payload

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
Exploitation Conditions

Exploitation requires ALL of the following: (1) a multi-tenant Hatchet deployment running a version prior to 0.95.3 - single-tenant deployments are unaffected in practice; (2) valid authenticated tenant-worker credentials (PR:L); (3) prior knowledge of a victim tenant's durable task UUID, which is a non-enumerable UUIDv4 and therefore cannot be brute-forced or guessed (must be obtained out-of-band); and (4) the attacker's DurableTask stream must be held open on the SAME dispatcher process that is handling the victim's durable task, so that the tenant-blind durableInvocations routing map delivers the callback to the attacker. These conditions - non-enumerable identifier plus same-process co-location timing - are the primary limiting factors (AC:H) and confine exploitation to targeted rather than opportunistic attacks; impact is confidentiality-only (leak of the durable callback result payload).

Impact

This is a genuine but low-priority multi-tenant confidentiality flaw, and the signals are consistent rather than conflicting. The vendor CVSS 3.1 score of 3.1 (AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N) accurately reflects a narrow, high-complexity, authenticated-only issue with limited (low) confidentiality impact and no integrity or availability effect - I concur with this vector. AC:H is well justified: the description explicitly states UUIDv4 task identifiers are not enumerable, and successful exploitation additionally requires the attacker's stream to remain open on the SAME dispatcher process handling the victim's callback, a race/co-location condition the attacker cannot reliably force. No EPSS score, no CISA KEV listing, and no public POC are present in the input; the fix commit (9555bfdd) is confirmed but does not constitute an exploit. Net: this is a real defect worth patching for multi-tenant/SaaS Hatchet operators, but it is NOT a high-real-risk issue - it is a low-CVSS flaw whose low score correctly matches its constrained, targeted exploitation profile. The single-tenant caveat further shrinks the exposed population.

Exploit ScenarioDerived

A malicious but legitimately authenticated tenant on a shared multi-tenant Hatchet deployment obtains another tenant's durable task UUID (e.g., leaked via logs, a chained info-disclosure bug, or an insider) and opens a DurableTask stream on the dispatcher process that is servicing the victim's task. Because the durableInvocations routing map is keyed only by task UUID without tenant identity, the victim's durable callback result payload is delivered to the attacker's stream. No public exploit code was identified at time of analysis, and the non-enumerable UUID plus same-process co-location requirement make this opportunistic and targeted rather than mass-exploitable.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 21, 2026

Cross-tenant disclosure of durable workflow callback results in Hatchet before 0.95.3 lets an authenticated tenant worker receive another tenant's durable callback result payload. The V1 DurableTask stream handler stores worker-supplied task_external_id values in the durableInvocations routing map before tenant ownership is verified, and callback delivery resolves that map by task UUID alone with no tenant identity, so a tenant worker that knows a victim's durable task UUID and holds a stream open on the same dispatcher process can be handed the victim's payload. Exploitation requires out-of-band knowledge of a non-enumerable UUIDv4 plus same-process co-location, giving an assessed CVSS of 3.1 (AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N); no public exploit identified at time of analysis, and single-tenant deployments are unaffected in practice.

RemediationAI

Upgrade Hatchet to version 0.95.3 or later, which is the vendor-released patch; the fix commit 9555bfdd1e97f61d25e614ccaa107c5fb7dc4976 rekeys the durableInvocations routing map on a composite (tenantId, taskId) key and propagates tenant identity through all callback delivery paths, and the vendor advisory is at https://github.com/hatchet-dev/hatchet/security/advisories/GHSA-9q4h-f4x5-ffq8. Where immediate upgrading is not feasible, the most effective compensating control is to eliminate the same-process co-location precondition by running separate Hatchet dispatcher deployments per tenant or per trust boundary, rather than pooling mutually untrusted tenants onto a shared dispatcher; the trade-off is higher infrastructure cost and loss of pooled scheduling efficiency. Organizations should also treat durable task UUIDs as sensitive identifiers, avoid logging or surfacing them across tenant boundaries, and audit whether any multi-tenant channel could expose a victim UUID out-of-band, since without that UUID the flaw is not exploitable. Note that because the root cause is a missing tenant scoping on an identifier rather than a credential weakness, no authentication-hardening or rate-limiting change removes the exposure, and there is no vendor-provided configuration toggle identified in the available data; single-tenant deployments can be considered unaffected in practice but should still be upgraded to 0.95.3 to stay on the maintained release.

Affected VersionsENISA

hatchet < 0.95.3

Affected Packages

go github.com/hatchet-dev/hatchet fix: 0.95.3
euvd hatchet fix: 0.95.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Hatchet's dispatcher process maintains an in-memory syncx.Map named durableInvocations that routes durable task invocations to the correct worker stream. In the vulnerable code (internal/services/dispatcher/dispatcher_v1.go and server_v1.go), that map is keyed on a bare uuid.UUID taken from the worker-supplied task_external_id, and the registration path (d.durableInvocations.Store(taskExtId, invocation)) occurs before tenant ownership is validated. Callback delivery functions such as DeliverDurableEventLogEntryCompletion and deliverSatisfiedEntries then load the entry using only the task UUID, so lookups are tenant-blind. This is CWE-639 (Authorization Bypass Through User-Controlled Key): an attacker-influenced identifier is used as the direct lookup key for a protected resource without being scoped to the caller's authorization context. The upstream fix introduces a durableInvocationsKey struct carrying both tenantId and taskId, rekeys every Store, Delete and Load call on that composite, and threads the invocation's tenantId through deliverSatisfiedEntries, handleMemo, handleTriggerRuns and handleWaitFor, as well as adding task.TenantID in handleDurableCallbackCompleted. The CVSS vector confirms network reachability (AV:N) and low privileges (PR:L, i.e. an authenticated tenant worker), with high attack complexity (AC:H) reflecting the need for a non-enumerable UUID and dispatcher co-location, and confidentiality-only impact (C:L).

Know when Hatchet gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 3.1 LOW
AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 3.1 LOW

Network-reachable but requires a non-enumerable UUID plus same-dispatcher-process co-location (AC:H) and an authenticated tenant worker (PR:L); leaks only a callback payload (C:L), no integrity or availability impact.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:H/AT:P/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

1
Patch available
Sep 21, 2026 - 17:02 EUVD

DescriptionCVE.org

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 task_external_id 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.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Low
niche open-source task-orchestration platform; only multi-tenant deployments exposed
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

36
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +16
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy