Read the docs
TI-2026-66336 Aliases GHSA-9r75-g2cr-3h76

Vercel Workflow Allows Webhook Creation with Predictable User-Specified Tokens

Priority LOW 38CWE-287Published · Updated

Key facts

Attack vector
—
Privileges required
—
User interaction
—
Attack complexity
—
Impact type
Security bypass
Confidentiality · integrity · availability
—
Fix status
Fixed

No CVSS vector from any source. Fix status from GitHub. Impact type from CWE-287.

Summary

`createWebhook()` in Vercel Workflow DevKit accepts a user-specified `token` parameter that serves as the credential for the public webhook endpoint `/.well-known/workflow/v1/webhook/{token}`. Official documentation recommended predictable token patterns, making it possible for an unauthenticated remote attacker to guess the token and inject arbitrary payloads into the workflow execution context. #### Impact An attacker who guesses a webhook token can resume the associated workflow with an attacker-controlled HTTP request body, potentially triggering downstream side effects such as API calls, database writes, or deployments. #### Fix * Upgrade to version 4.2.0-beta.64. The fix removes the `token` option from `createWebhook()` so that webhook tokens are always randomly generated by the SDK. * Runs created with versions prior to 4.2.0-beta.64, that are 1) still active (i.e. running), and 2) have open hooks, are still susceptible to this vulnerability. If users suspect the hook tokens are predictable or leaked - consider cancelling those runs and restarting them on the latest patch. #### Workarounds In case a version upgrade is not possible, avoid passing predictable or guessable values to the `token` parameter of `createWebhook()`. Instead, users can either * switch from `createWebhook()` to `createHook()` instead and programmatically resume hooks using `resumeHook()` instead of the public webhook endpoint, or * use `createWebhook()` without passing a user-provided `token`, which uses a non-guessable random `nanoid` by default.

Why it matters now

Fix Fixed workflow (npm): 4.2.0-beta.64@workflow/core (npm): 4.2.0-beta.64

SSVC decision points

Not available: CISA has not published SSVC decision points for this record.

Affected products

VendorProductAffected versionsFixed inStatusSource
—workflow (npm)before 4.2.0-beta.644.2.0-beta.64Patch availableGHSA-9r75-g2cr-3h76
—@workflow/core (npm)before 4.2.0-beta.644.2.0-beta.64Patch availableGHSA-9r75-g2cr-3h76
  • workflow (npm) Vendor— Affected before 4.2.0-beta.64 Fixed in 4.2.0-beta.64 Patch available GHSA-9r75-g2cr-3h76
  • @workflow/core (npm) Vendor— Affected before 4.2.0-beta.64 Fixed in 4.2.0-beta.64 Patch available GHSA-9r75-g2cr-3h76

Remediation

  • Fix · GHSA-9r75-g2cr-3h76 workflow (npm) Fixed in 4.2.0-beta.64 Advisory →
  • Fix · GHSA-9r75-g2cr-3h76 @workflow/core (npm) Fixed in 4.2.0-beta.64 Advisory →

Timeline

  1. 2026-10-03 Threatist record created from GHSA-9r75-g2cr-3h76

References

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences