Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to own Hatchet tenant
-
DeliveryObtain foreign tenant's durable-task UUID
-
ExploitSend GET /durable-tasks/{uuid} without tenant scoping
-
ExecutionServer skips tenant ownership check
-
ImpactRead cross-tenant event log data
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated Hatchet account (PR:L) AND prior knowledge of a specific durable-task UUID belonging to a different tenant - the 128-bit UUID is not guessable and must be obtained out-of-band (leaked logs, shared references, error messages, cross-tenant integrations). Only Hatchet deployments prior to version 0.91.1 running the multi-tenant durable-tasks API are affected; the vulnerable endpoint is GET /api/v1/stable/durable-tasks/{durable-task} (listDurableEventLog). What limits exploitation: the need for a valid foreign UUID (attack complexity high), the requirement to already hold valid credentials, and the read-only nature of the endpoint (no write/integrity or availability impact). Single-tenant or upgraded (>=0.91.1) deployments are not exposed. |
| Impact | This is a genuine but moderate-severity cross-tenant authorization flaw (CWE-863 / IDOR), not a critical drop-everything issue. The vendor CVSS 3.1 vector (AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N = 6.3) is internally consistent with the description and the commit evidence: exploitation is network-reachable but requires an authenticated account (PR:L) and, critically, prior knowledge of another tenant's durable-task UUID - a 128-bit unguessable identifier - which correctly justifies AC:H. The scope change (S:C) reflects that a user authenticated to their own tenant reads data belonging to a different security authority (another tenant), and impact is confidentiality-only (I:N/A:N) since the endpoint is a read-only event-log GET. No EPSS score, no CISA KEV listing, and no public POC were provided, so exploitation status is 'no public exploit identified at time of analysis.' There is no signal conflict here: all indicators point to a real-but-conditional bug whose main mitigating factor is the need to first obtain an out-of-band UUID, making opportunistic mass exploitation unlikely and targeted exploitation the realistic threat model. The fix is confirmed by the linked commit (06c1fe43), which re-scopes the route under /tenants/{tenant}/ and adds a 403 when the resource's parent does not match the URL tenant. |
| Exploit ScenarioDerived | An attacker with a valid Hatchet account on one tenant obtains a durable-task UUID belonging to a different tenant (e.g., via logs, a shared integration, a leaked reference, or error output) and issues an authenticated GET to /api/v1/stable/durable-tasks/{durable-task}. Because the pre-0.91.1 route did not require the tenant as a parent resource, the server returns the foreign task's event log - exposing task display names, workflow identifiers, user messages, wait conditions, branching logic, and timing. No public POC is identified, and the high attack complexity (needing a valid foreign UUID) means this favors targeted rather than opportunistic abuse. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 21, 2026
Hatchet deployments prior to 0.91.1 expose a cross-tenant insecure direct object reference (IDOR) on the durable-task event log endpoint, allowing an authenticated user who already knows another tenant's durable-task UUID to read that task's full event log. Successful abuse discloses task display names, workflow identifiers, user messages, wait conditions, branching logic, and timing metadata - a confidentiality-only impact with no integrity or availability effect. Exploitation requires valid Hatchet credentials (PR:L) plus prior out-of-band knowledge of a 128-bit UUID from a foreign tenant (AC:H), so this is a genuine but moderate-severity authorization flaw rather than a critical drop-everything issue; it is not confirmed as actively exploited (CISA KEV) and no public exploit code has been identified at time of analysis.
RemediationAI
Upgrade to Hatchet 0.91.1 or later - this is the vendor-released patch and the only complete fix; the upstream commit (06c1fe43543e853ea98ecc2e6a575e2b8310bbeb) re-scopes the endpoint to include the tenant as a mandatory parent resource and makes the populator return HTTP 403 on cross-tenant access, so the old un-scoped URL stops working after upgrade (clients and integrations calling GET /api/v1/stable/durable-tasks/{durable-task} must be updated to the new tenant-scoped path). See the advisory https://github.com/hatchet-dev/hatchet/security/advisories/GHSA-g26x-m427-f48f for details. If immediate upgrade is not possible, compensating controls are available but each carries trade-offs: front the API with a gateway/reverse proxy rule that rejects GET requests to /api/v1/stable/durable-tasks/* (this blocks the vulnerable route entirely and will break legitimate event-log consumers until the upgrade is applied); or, in multi-tenant deployments, temporarily restrict access to the durable-tasks endpoint to a single trusted tenant or to internal network ranges, accepting reduced functionality for external tenants. Because abuse depends on knowing a foreign 128-bit durable-task UUID, reducing UUID leakage is a meaningful secondary control: scrub durable-task identifiers from application logs, error responses, shared dashboards, and cross-tenant integration payloads, and rotate any UUIDs that may have been exposed. Additionally, audit access logs for GET /api/v1/stable/durable-tasks/<uuid> requests originating from accounts whose tenant does not own that task, since the flawed populator returned a generic population error rather than a clean 403 and such requests may have succeeded.
Affected VersionsENISA
Affected Packages
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
The root cause is CWE-863 (Incorrect Authorization), specifically an IDOR pattern in the OpenAPI-declared routing and resource-populator middleware of Hatchet's v1 API. The endpoint GET /api/v1/stable/durable-tasks/{durable-task} was declared in api-contracts/openapi/paths/v1/workflow-runs/workflow_run.yaml with x-resources set only to ["durable-task"] and was implemented by listDurableEventLog. Because the target tenant was not declared as a parent resource in the route, the populator middleware never verified that the resolved durable task actually belonged to the caller's tenant - the original code path only returned a generic "resource could not be populated" error when a parent/child ID mismatch occurred rather than a definitive authorization denial for cross-tenant access. The upstream fix (commit 06c1fe43543e853ea98ecc2e6a575e2b8310bbeb) changes the route to /api/v1/stable/tenants/{tenant}/durable-tasks/{durable-task}, adds a required tenant UUID path parameter, updates x-resources to ["tenant", "durable-task"], regenerates the OpenAPI Go bindings so the tenant is bound from the path, and changes the populator middleware to return HTTP 403 with "not authorized to access this resource" when a child resource belongs to a different parent than the one in the URL. The CPE cpe:2.3:a:hatchet-dev:hatchet:*:*:*:*:*:*:*:* confirms the affected component is the Hatchet application itself across all versions prior to the fix.
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
AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N
Network endpoint (AV:N) needing valid credentials (PR:L) and an unguessable foreign UUID (AC:H); reading another tenant's data is a scope change (S:C) with confidentiality-only impact (C:H/I:N/A:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Hatchet is a platform for orchestrating background tasks, AI agents, and durable workflows at scale. Prior to 0.91.1, api-contracts/openapi/paths/v1/workflow-runs/workflow_run.yaml defines the GET /api/v1/stable/durable-tasks/{durable-task} endpoint implemented by listDurableEventLog without requiring the target tenant as a parent resource, allowing an authenticated user who obtains another tenant's durable task UUID to read that task's event log. Disclosed data can include task display names, workflow identifiers, user messages, wait conditions, branching logic, and timing information. This issue is fixed in version 0.91.1.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Account fixation in Hatchet's OAuth callback handling lets an unauthenticated attacker bind a victim's existing Hatchet
Cross-tenant information disclosure in Hatchet before 0.106.1 allows an authenticated tenant worker in a multi-tenant de
Cross-tenant disclosure of durable workflow callback results in Hatchet before 0.95.3 lets an authenticated tenant worke
Unauthenticated remote attackers can exhaust server memory in Hatchet 0.110.5 and earlier by sending arbitrarily large o
Server-side request forgery in Hatchet versions prior to 0.91.1 lets an authenticated tenant of the platform coerce the
EUVD-2026-83977
GHSA-g26x-m427-f48f
NVD
CVE.org
EPSS
Exploit-DB