Executive brief
ToolJet is a low-code platform for building internal tools and dashboards. Before version 3.16.208, any authenticated user in one organization can read the table schemas and stored data from other organizations by specifying arbitrary organization IDs in API requests. This allows attackers to extract sensitive business data, customer records, and configuration information from competing or unrelated tenants on the same ToolJet instance.
Technical details
The vulnerability is a missing authorization check (CWE-862) in three database read routes under /organizations/:organizationId/* in the ToolJet controller. The routes—GET /tables, GET /table/:tableName, and POST /join—accept an organizationId URL parameter but never validate that the requesting user belongs to that organization. The JwtAuthGuard only verifies a valid session exists; the FeatureAbilityGuard grants VIEW_TABLES, VIEW_TABLE, and JOIN_TABLES permissions unconditionally to all authenticated users regardless of role. Attackers can exploit this to enumerate table names, retrieve column definitions and foreign-key relationships, and execute join queries to read actual row data from victim organizations. The vulnerability requires network access and authentication to a ToolJet instance, but no special privileges—even end-user tier accounts can exploit it. Patch: version 3.16.208 and later.
Affected products
- ToolJet ToolJet before v3.16.208
Timeline
- 2026-08-31: disclosed: Published on NVD and GitHub Security Advisory (GHSA-xqqj-pfc2-vf48)
- 2026-08-07: patched: Fix released in version 3.16.208