GHSA-9q4h-f4x5-ffq8: Low severity go/github.com/hatchet-dev/hatchet vulnerability

Published Sep 22, 2026
·
Updated

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

Affected Software

1 affected componentFixes available
go/github.com/hatchet-dev/hatchet<0.95.3
0.95.3

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/hatchet-dev/hatchet to a version that resolves this vulnerability.

    Fixed in 0.95.3

Event History

Sep 22, 2026
Advisory Published
via GitHub·08:40 PM
Data Sourced
via GitHub·08:40 PM
DescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

Which deployments are exposed to cross-tenant callback delivery?

Deployments hosting more than one tenant are impacted. The callback must be delivered on the same dispatcher process as the attacker's open worker stream.

2

What does an attacker need to exploit this?

The attacker needs an authenticated worker for one tenant and prior knowledge of another tenant's durable task external UUID. These UUIDs are UUIDv4 and not enumerable across tenants, so guessing alone is not considered practical.

3

What happens after a failed ownership check?

The handler logs the ownership-check error but retains the worker-supplied task external ID in its in-memory callback routing map until the stream closes. A callback for that ID can then be routed to the attacker's stream without a tenant identity check.

4

Is there an operational indicator of an attempted registration?

A failed tenant-scoped ownership check causes the handler to log an error. The routing-map entry remains active only while the associated stream is open.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203