Typebot CVE-2026-39966
MEDIUMAttack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister or obtain authenticated Typebot account
-
DeliveryCreate bot with Typebot Link block referencing target bot ID
-
ExploitTrigger getLinkedTypebots API call
-
ExecutionAuthorization filter silently bypassed due to async/filter bug
-
PersistReceive full bot definition across workspace boundary
-
ImpactExtract embedded API keys, credentials, and PII from bot variables
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a valid authenticated Typebot session with at least low-privilege access (PR:L per CVSS vector - a regular user account with no special roles). The attacker must know or successfully enumerate the target bot's ID, which is referenced in a Typebot Link block within a bot they control. The vulnerability is triggered via the getLinkedTypebots API endpoint, which is part of the builder application's logic-block feature set. No special server-side configuration is required - the flawed code path is active by default in all 3.15.2 deployments. Exploitation is limited to read-only access (C:H/I:N/A:N); an attacker cannot modify or delete bots through this vector. The requirement for an authenticated account limits mass anonymous exploitation, but any registered Typebot user - including those on free tiers - meets the prerequisite. |
| Impact | The CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N scores 6.5, reflecting network-reachable, low-complexity exploitation requiring only a low-privilege authenticated account with no user interaction. The high confidentiality impact rating is fully justified given that leaked bot definitions may contain hardcoded API keys, credentials, and PII - secrets that are frequently reusable across other systems. EPSS data was not provided in the source intelligence, so exploitation probability cannot be quantified from that signal. This CVE is not listed in CISA KEV, and no standalone public exploit code has been identified, making exploitation status 'no public exploit identified at time of analysis.' However, the low attack complexity - any authenticated user, no special tooling, just a crafted API call with a target bot ID - means exploitation is trivially automatable once a bot ID is known or enumerated. The gap between CVSS 6.5 and actual risk is meaningful: the real-world priority should be treated as higher than medium due to potential credential exposure. No conflicting signals between CVSS vector and description - both consistently indicate a low-privilege, network-accessible exploit path. |
| Exploit ScenarioDerived | An attacker with a free or low-privilege Typebot account creates a bot containing a Typebot Link block configured with the ID of a target private bot in another workspace - the bot ID may be obtained through enumeration, social engineering, or prior reconnaissance. The attacker then triggers the getLinkedTypebots API call, which returns the full bot definition including all embedded variables, webhook URLs, and integration API keys. Because no public exploit code has been identified, exploitation currently requires manual construction of the API call, but the low complexity makes scripted mass-enumeration straightforward for a motivated attacker. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 22, 2026
Typebot 3.15.2 exposes complete private bot definitions across all workspaces to any authenticated platform user via a broken authorization check in the getLinkedTypebots API endpoint, constituting a classic IDOR. The root cause is a JavaScript async/await misuse: Array.filter() is synchronous, so passing it an async callback causes every bot to pass the filter - the isReadTypebotForbidden predicate is never actually evaluated. Sensitive data leaked includes embedded credentials, API keys, PII stored as variables, webhook URLs, and integration configurations from any other user's private workspace bots. No public exploit has been identified at time of analysis and this CVE is not listed in CISA KEV, but the exposure of hardcoded secrets elevates practical risk significantly beyond the 6.5 CVSS score suggests.
RemediationAI
Upgrade Typebot to version 3.16.0 immediately, as confirmed by the vendor release at https://github.com/baptisteArno/typebot.io/releases/tag/v3.16.0 and the fixing commit b9530a089b43bfa6e79e3ff9cbfab921ce832f45. The patch surgically replaces the async-in-filter anti-pattern with a proper Promise.all() resolution loop, correctly enforcing workspace-level access controls on all bot lookups. If immediate upgrade is not possible, a compensating control is to restrict authenticated API access to the getLinkedTypebots endpoint at the network or reverse-proxy layer for untrusted user segments - note this will break legitimate cross-workspace bot linking functionality for affected users. Additionally, organizations should audit embedded bot variables in their Typebot workspaces for hardcoded credentials, API keys, and PII, and rotate any secrets that may have been accessible during the exposure window, since the vulnerability allowed silent read access with no logging of unauthorized access in the affected version.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability resides in apps/builder/src/features/blocks/logic/typebotLink/api/getLinkedTypebots.ts within the Typebot builder application (CPE: cpe:2.3:a:baptistearno:typebot.io:*:*:*:*:*:*:*:*). CWE-863 (Incorrect Authorization) describes the root cause precisely: the authorization predicate exists in code but is never correctly evaluated. In JavaScript, Array.prototype.filter() executes its callback synchronously and treats the return value as a boolean. When the callback is declared async, it returns a Promise object - which is always truthy regardless of the resolved value - causing every element to pass the filter unconditionally. The original code used .filter(async (typebot) => !(await isReadTypebotForbidden(typebot, user))), which silently bypassed the await and let all bots through. The fix, confirmed in commit b9530a089b43bfa6e79e3ff9cbfab921ce832f45, replaces this with Promise.all() to properly resolve all async access checks before applying a synchronous filter, ensuring isReadTypebotForbidden is actually evaluated per bot. The Typebot Link block feature - which allows chaining bots - is the attack surface since it accepts arbitrary bot IDs submitted by the client.
Know when Typebot Io gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Primary rating from Vendor (GitHub_M) · only source for this CVE.
CVSS VectorVendor: GitHub_M
DescriptionCVE.org
TypeBot is a chatbot builder tool. In versions 3.15.2, the getLinkedTypebots API endpoint returns full bot definitions to any authenticated user who references a target bot ID in a Typebot Link block, regardless of workspace ownership, leading to IDOR. The authorization check uses Array.filter() with an async callback - since filter() is synchronous, the callback always returns a truthy Promise, so the access control predicate is never actually evaluated. Any authenticated Typebot user can read the full definition of any other workspace's private bots, including: all conversation blocks and logic flow, variable values embedded in the bot (credentials, API keys, PII), webhook URLs and integration configurations. This issue has been fixed in version 3.16.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Affected Products (CPE)CVE.org
More in Typebot Io
View allServer-Side Request Forgery in Typebot chatbot builder versions 3.15.2 and prior allows unauthenticated remote attackers
Cross-workspace OAuth credential takeover in Typebot (open-source chatbot builder) before 3.17.0 lets a user holding onl
Unauthenticated cross-tenant file upload in Typebot.io chatbot builder versions 3.16.1 and earlier allows anonymous visi
Cleartext storage of API bearer tokens in the self-hosted open-source Typebot chatbot builder (version 3.16.1) lets anyo
Stored cross-site scripting in Typebot chatbot builder versions 3.15.2 and prior allows a malicious imported or collabor
Stored cross-site scripting in Typebot (chatbot builder) versions 3.15.2 and prior lets an authenticated user upload a c
Unauthenticated S3 path traversal in Typebot versions prior to 3.17.0 allows any attacker to obtain presigned S3 PUT URL
Server-side request forgery in Typebot chatbot builder before version 3.17.2 allows remote unauthenticated attackers to
Server-side request forgery in Typebot before 3.17.2 lets an authenticated workspace editor or creator bypass the shared
Server-side request forgery in Typebot versions 3.15.2 and prior allows authenticated users to bypass the validateHttpRe
Credential exfiltration in Typebot prior to 3.17.0 allows a low-privilege guest workspace member to steal decrypted Open
Server-side request forgery in Typebot chatbot builder versions prior to 3.16.0 allows authenticated users to bypass SSR
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB