GHSA-9q4h-f4x5-ffq8

Suggest an improvement
Source
https://github.com/advisories/GHSA-9q4h-f4x5-ffq8
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-9q4h-f4x5-ffq8/GHSA-9q4h-f4x5-ffq8.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-9q4h-f4x5-ffq8
Aliases
Published
2026-09-22T20:40:43Z
Modified
2026-09-22T21:00:04Z
Severity
  • 3.1 (Low) CVSS_V3 - CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N CVSS Calculator
Summary
Hatchet: Cross-tenant durable callback payload disclosure in Hatchet V1 Dispatcher
Details

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

Database specific
{
    "cwe_ids":  [
        "CWE-639",
        "CWE-862"
    ],
    "github_reviewed":  true,
    "github_reviewed_at":  "2026-09-22T20:40:43Z",
    "nvd_published_at":  "2026-09-21T16:17:24Z",
    "severity":  "LOW"
}
References

Affected packages

Go / github.com/hatchet-dev/hatchet

Package

Name
github.com/hatchet-dev/hatchet
View open source insights on deps.dev
Purl
pkg:golang/github.com/hatchet-dev/hatchet

Affected ranges

Type
SEMVER
Events
Introduced
0 Unknown introduced version / All previous versions are affected
Fixed
0.95.3

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-9q4h-f4x5-ffq8/GHSA-9q4h-f4x5-ffq8.json"