CVE-2026-39967 Overview
CVE-2026-39967 is an Insecure Direct Object Reference (IDOR) vulnerability [CWE-639] in TypeBot, an open-source chatbot builder tool. The flaw affects versions 3.15.2 and prior. The bot engine's findResult query does not filter results by typebotId, allowing an authenticated user to load result data from a different typebot by supplying a foreign resultId to the startChat endpoint. Successful exploitation exposes previous user answers, session variable values, and the hasStarted flag, potentially leaking personally identifiable information (PII) such as names, emails, and phone numbers. The issue is fixed in version 3.16.0.
Critical Impact
Authenticated attackers can read another user's chatbot session data, including answers and variable values that may contain PII.
Affected Products
- TypeBot versions 3.15.2 and prior
- TypeBot bot engine findResult query handler
- TypeBot startChat endpoint when rememberUser is enabled
Discovery Timeline
- 2026-05-22 - CVE-2026-39967 published to NVD
- 2026-05-26 - Last updated in NVD database
Technical Details for CVE-2026-39967
Vulnerability Analysis
The vulnerability resides in the findResult query used by the TypeBot bot engine. The query retrieves stored result records by resultId but fails to scope the lookup to the current typebotId. An authenticated user can pass a resultId belonging to a different typebot to the startChat endpoint and receive that result's stored state. The returned state includes prior answers, session variable values, and the hasStarted flag. When the foreign typebot has collected PII through its conversation flow, that data becomes accessible to the requester.
Root Cause
The root cause is a missing authorization check on a server-side query. The findResult resolver trusts the client-supplied resultId without verifying that the result belongs to the typebot referenced in the request. This is a textbook IDOR pattern: object lookups by identifier without an ownership or tenancy filter.
Attack Vector
Exploitation requires network access, authentication, and several preconditions. The attacker must obtain a valid resultId from another typebot. TypeBot uses CUID2 identifiers, which are cryptographically random 24-character strings, so brute-forcing valid IDs is infeasible. The target typebot must have rememberUser enabled, and the attacker's typebot must declare variable names matching those in the victim's session for variable values to surface. The vulnerability is described in the GitHub Security Advisory GHSA-f475-7m4x-m6mx.
Detection Methods for CVE-2026-39967
Indicators of Compromise
- Requests to the startChat endpoint where the supplied resultId does not belong to the referenced typebotId.
- Unusual patterns of authenticated users initiating chats with resultId values that were not previously associated with their sessions.
- Application logs showing findResult returning records across tenant or typebot boundaries.
Detection Strategies
- Audit application logs for startChat calls and correlate the resultId parameter with the typebotId of the requesting session.
- Instrument the findResult query path to log mismatches between a result's typebotId and the typebotId in the active request context.
- Review database access logs for result row reads that span multiple typebots in short time windows from a single user.
Monitoring Recommendations
- Alert on authenticated sessions that supply previously unseen resultId values not generated by the current typebot.
- Track variable-name collisions between typebots, since exploitation depends on shared variable names to surface data.
- Monitor TypeBot release channels and apply security advisories from the TypeBot repository.
How to Mitigate CVE-2026-39967
Immediate Actions Required
- Upgrade TypeBot to version 3.16.0 or later, which adds the missing typebotId filter to the findResult query.
- Review existing typebot configurations and disable rememberUser where it is not strictly required.
- Rotate or invalidate stored result records that may contain sensitive PII collected on vulnerable versions.
Patch Information
The fix is delivered in TypeBot 3.16.0. The patch updates the findResult resolver to filter results by the active typebotId, blocking cross-typebot result lookups. Patch details are available in the GitHub commit 73162634 and the v3.16.0 release notes.
Workarounds
- If immediate upgrade is not possible, disable the rememberUser setting on all typebots to prevent prior-session result lookups.
- Restrict authenticated access to the TypeBot instance and limit account provisioning to trusted users.
- Avoid collecting sensitive PII in chatbot flows until the patched version is deployed.
# Upgrade TypeBot to the patched release
git fetch --tags
git checkout v3.16.0
npm install
npm run build
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

