Skip to main content

Hatchet CVE-2026-42572

| EUVDEUVD-2026-30339 MEDIUM
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-05-06 https://github.com/hatchet-dev/hatchet GHSA-55gc-6fmc-fpx9
5.3
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
5.3 MEDIUM
AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N
vuln.today AI
5.3 MEDIUM

Network-accessible API requires authenticated account (PR:L) and out-of-band UUID discovery (AC:H); disclosure is bounded to metadata with no integrity or availability impact.

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

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

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

Lifecycle Timeline

3
Source Code Evidence Fetched
Jul 23, 2026 - 23:13 vuln.today
Analysis Generated
Jul 23, 2026 - 23:13 vuln.today
CVE Published
May 06, 2026 - 21:59 nvd
MEDIUM 5.3

DescriptionGitHub Advisory

Summary

A missing authorization directive on the GET /api/v1/stable/dags/tasks endpoint caused Hatchet's tenant-membership check to be skipped for this route. A user authenticated to any tenant on the same Hatchet instance could query the endpoint with another tenant's UUID and a DAG UUID belonging to that tenant, and receive task metadata for that DAG.

This issue has been patched in v0.83.39. Hatchet Cloud has been patched and requires no action from users. Self-hosted users should upgrade.

Impact

Who is affected. Multi-tenant Hatchet instances reachable by an attacker who can obtain an account on that instance. On Hatchet Cloud, account creation is open by default. On self-hosted instances, the API must be reachable by the attacker and the hostname known; instances deployed inside a VPC or with signup restricted are not exposed to arbitrary external actors.

Prerequisites for exploitation. An attacker needed:

  1. An account on the target Hatchet instance.
  2. The victim tenant's UUID.
  3. At least one DAG UUID (external_id) belonging to that tenant.

The two UUIDs are not treated as secrets - they appear in URLs, API responses, audit logs, invitation flows, shared run links, and dashboard screenshots - but an attacker does need to learn them through some out-of-band channel before exploitation is possible.

What could be disclosed. For each child task of a targeted DAG, the endpoint returned:

  • display_name, action_id, step_id
  • workflow_id, workflow_version_id, workflow_run_id, task_external_id
  • tenant_id, retry_count, status, timestamps
  • additional_metadata (JSON)

The additional_metadata field is the most sensitive: Hatchet workflows commonly use it to carry domain context such as user identifiers, customer IDs, feature flags, or correlation tokens. Its contents vary by deployment.

What was not disclosed. The raw task input payload is not part of this endpoint's response shape and was not exposed through this issue. The scope is limited to task metadata, not task arguments or results.

Exploitation status. We have no evidence that this vulnerability was exploited prior to the patch.

Root cause

Hatchet's multi-tenant authorization relies on an OpenAPI-driven middleware pipeline. Each authenticated operation declares x-resources: ["tenant", ...] in its spec. The populator middleware reads the declared resources, looks up the corresponding entities from request parameters, and stores them on the request context. The authz middleware then verifies that the authenticated user is a member of the tenant found on the context.

The listTasksByDAGIds operation accepted a tenant UUID as a query parameter, but its OpenAPI definition did not declare x-resources: ["tenant"]. As a result:

  1. The populator, which early-returns when no resources are declared, did not populate the tenant onto the request context.
  2. The authz middleware, which runs its membership check only when a tenant is present on the context, silently passed the request through.
  3. The handler read the tenant UUID directly from the query parameter and used it as the filter in the downstream OLAP query.

The SQL query itself correctly filters by tenant_id, so it returned only rows matching the supplied UUID - but the UUID came from the caller rather than from an authorization-validated context, so the filter bounded the response to the *attacker-named* tenant rather than to a tenant the caller was authorized to read.

Every other authenticated operation in the same path file (tasks.yaml) correctly declared x-resources. This endpoint was the only authenticated operation in the file that did not.

Patch

The fix adds the missing resource authz checks inline on the handler, enforcing valid tenant membership before the handler runs.

Shipped in v0.83.39.

Remediation

Hatchet Cloud. No action required. The patch was deployed on April 23, 2026 within the same day it was reported.

Self-hosted - recommended. Upgrade to v0.83.39 or later.

Self-hosted - if you cannot upgrade immediately. Either of the following reduces exposure until you can upgrade:

  • Restrict account creation by setting SERVER_AUTH_RESTRICTED_EMAIL_DOMAINS to an allowlist of domains you control. This prevents arbitrary users from registering an account on your instance, which removes the most common path to the prerequisite account.
  • Ensure the Hatchet API is not exposed to untrusted networks. We generally recommend running Hatchet inside a VPC and fronting the API with authenticated network controls; deployments configured this way were not reachable by arbitrary external attackers.

Timeline

All times April 23, 2026.

  • 14:05 - Reported to Hatchet.
  • 16:28 - Patch deployed to Hatchet Cloud and released as v0.83.39.
  • Public disclosure - this advisory.

Credit

Reported by @sajdakabir.

Hatchet thanks the reporter for responsibly disclosing this issue and for the clear, reproducible writeup.

AnalysisAI

Cross-tenant information disclosure in Hatchet's GET /api/v1/stable/dags/tasks endpoint permits any authenticated user on a multi-tenant instance to read task metadata belonging to other tenants by supplying a victim's tenant UUID and DAG UUID in query parameters. The CVSS 5.3 (AV:N/AC:H/PR:L) reflects that an attacker must hold a valid account and obtain victim UUIDs through out-of-band channels before exploitation - but on Hatchet Cloud, where account registration is open by default, the account prerequisite is trivially satisfied. No public exploit code exists, no exploitation was observed prior to patching, and vendor-released fix v0.83.39 was deployed within hours of the April 23, 2026 report.

Technical ContextAI

Hatchet is a Go-based workflow orchestration platform (CPE: pkg:go/github.com_hatchet-dev_hatchet) that implements multi-tenant isolation through an OpenAPI-driven middleware pipeline. Each API operation is expected to declare x-resources: ["tenant"] in its OpenAPI spec, which causes the populator middleware to resolve the tenant from the request and store it on the request context, and then the authz middleware to verify the calling user is a member of that tenant before proceeding. The listTasksByDAGIds operation (tasks.yaml) was the sole authenticated endpoint in its path file that omitted this declaration. As a result, the populator early-returned without populating the tenant context, and the authz middleware silently passed the request through. The SQL query downstream correctly filtered by tenant_id, but used the attacker-supplied UUID from the query parameter rather than from an authorization-validated context. This is a textbook CWE-639 (Authorization Bypass Through User-Controlled Key): the system correctly enforced data scoping by key but failed to verify the caller's authority over that key.

RemediationAI

Vendor-released patch: v0.83.39. Self-hosted users should upgrade to v0.83.39 or later immediately, as documented at https://github.com/hatchet-dev/hatchet/security/advisories/GHSA-55gc-6fmc-fpx9. If an immediate upgrade is not possible, two compensating controls reduce exposure: (1) Set SERVER_AUTH_RESTRICTED_EMAIL_DOMAINS to an allowlist of email domains you control - this prevents arbitrary users from registering an account and eliminates the most common path to the required authenticated credential, though it does not protect against existing accounts or insider threat; (2) Ensure the Hatchet API is not reachable from untrusted networks by deploying within a VPC and fronting with authenticated network controls - this prevents arbitrary external actors from even reaching the vulnerable endpoint, though it does not protect against authenticated internal users. Neither workaround closes the root authorization gap; upgrading to v0.83.39 is the definitive fix.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Server 16.1 Affected
SUSE Linux Enterprise Server for SAP applications 16.1 Affected
SUSE Linux Enterprise Module for Package Hub 15 SP5 Affected
SUSE Linux Enterprise Module for Package Hub 15 SP6 Affected
openSUSE Leap 15.5 Affected

Share

CVE-2026-42572 vulnerability details – vuln.today

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