{"id":"CVE-2026-73408","aliases":["GHSA-2xgg-r2wc-c5r2"],"url":"https://o3.security/vulnerability/CVE-2026-73408","summary":"Budibase: MySQL DESCRIBE Backtick Injection via multipleStatements in Database Connector","details":"### Summary\n**This is a related but independently fixable vulnerability to GHSA-qqf5-x7mj-v43p\n(PostgreSQL SQL injection), reported in the same original disclosure and\nsplit per GitHub CNA guidance (rule 4.2.11) since it affects a separate\nintegration, has a distinct attack precondition, and requires a separate\npatch.**\n\nThe MySQL integration enables `multipleStatements: true` on the connection,\npermitting semicolon-separated multi-statement execution. During table\nintrospection, table names retrieved from `INFORMATION_SCHEMA.TABLES` are\ninterpolated into a `DESCRIBE` query wrapped in backticks, but embedded\nbackticks in the table name are never escaped — allowing a malicious table\nname to break out and inject a second, attacker-controlled statement.\n\n### Details\n\n**Vulnerable Code:**\nFile: `packages/server/src/integrations/mysql.ts`, lines 172, 305\n\n```typescript\nthis.config = { ...config, multipleStatements: true, ... }  // line 172\n...\n{ sql: `DESCRIBE \\`${tableName}\\`;` }  // line 305 — backtick NOT escaped\n```\n\nBecause `multipleStatements` is enabled, any statement appended after the\nbacktick break-out executes as a second query in the same round trip.\n\n### Step-by-Step Reproduction\n1. An attacker with the ability to create tables in the target MySQL\n   database (e.g. a lower-privileged database user, or a malicious actor in\n   a multi-tenant database) creates a table named:\n   ``foo`; DROP TABLE users; --``\n2. In Budibase, an administrator triggers schema introspection for that\n   database (e.g. opening the datasource or refreshing its table list).\n3. Budibase reads the malicious table name from `INFORMATION_SCHEMA.TABLES`\n   and interpolates it into the `DESCRIBE` query.\n4. The unescaped backtick terminates the identifier early, and the\n   semicolon-separated payload (enabled by `multipleStatements: true`)\n   executes as a second statement.\n\n### Impact\nArbitrary SQL execution triggered during routine schema discovery. Unlike\nthe PostgreSQL and MS SQL Server findings, this does not require the\nattacker to control the Budibase datasource configuration directly — only\nthe ability to create a maliciously named table in the underlying database\nbeforehand, with an administrator's normal use of the introspection feature\nserving as the trigger.","published":"2026-08-13T22:04:53.979Z","modified":"2026-10-21T02:59:15.425054639Z","cvss":{"score":7.6,"severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:C/C:H/I:H/A:H"},"epss":{"score":0.0033,"percentile":0.26202,"asOf":"2026-09-17"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"npm","name":"@budibase/server","fixedVersion":null}],"fix":{"url":"https://github.com/Budibase/budibase/commit/d232bd92144c768884ff8c48cb2e28673d9ffde0","label":"Budibase/budibase@d232bd9"},"references":[{"type":"WEB","url":"https://github.com/Budibase/budibase/releases/tag/3.39.18"},{"type":"ADVISORY","url":"https://github.com/Budibase/budibase/security/advisories/GHSA-2xgg-r2wc-c5r2"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/73xxx/CVE-2026-73408.json"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-73408"},{"type":"FIX","url":"https://github.com/Budibase/budibase/commit/d232bd92144c768884ff8c48cb2e28673d9ffde0"},{"type":"FIX","url":"https://github.com/Budibase/budibase/pull/18989"},{"type":"WEB","url":"https://github.com/Budibase/budibase/commit/2c61f389c9986c91ddd8ae161c2b5e8ec21c60ac"},{"type":"PACKAGE","url":"https://github.com/Budibase/budibase"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-10-21T02:59:15.425054639Z"}}