Skip to main content

Hatchet CVE-2026-63342

| EUVDEUVD-2026-83977 MEDIUM
Incorrect Authorization (CWE-863)
2026-09-21 GitHub_M GHSA-g26x-m427-f48f
6.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate to own Hatchet tenant
  2. Delivery
    Obtain foreign tenant's durable-task UUID
  3. Exploit
    Send GET /durable-tasks/{uuid} without tenant scoping
  4. Execution
    Server skips tenant ownership check
  5. Impact
    Read 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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

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

hatchet < 0.91.1

Affected Packages

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

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

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

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

3.1 AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N
4.0 AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/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
Changed
Confidentiality
High
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.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

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Low
niche but growing open-source task/workflow orchestration platform, limited production footprint
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
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