CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-QQF5-X7MJ-V43P

GHSA-QQF5-X7MJ-V43P: SQL Injection Vulnerabilities in Budibase Database Connectors

Alon Barad
Alon Barad
Software Engineer

Jun 18, 2026·8 min read·7 visits

Executive Summary (TL;DR)

Budibase database connectors contain SQL injection vulnerabilities in PostgreSQL, MS SQL, and MySQL integrations due to dynamic concatenation of unescaped schema and table identifiers, allowing authenticated administrators or malicious database catalogs to execute arbitrary SQL commands.

A technical analysis of SQL injection vulnerabilities affecting Budibase's database connectors for PostgreSQL, Microsoft SQL Server, and MySQL. Due to direct concatenation of schema and table identifiers into raw SQL queries, authenticated administrative users or malicious database schemas can execute arbitrary SQL commands.

Vulnerability Overview

The Budibase low-code platform exposes database integration connectors to facilitate rapid application development. These connectors allow developers to hook into external datasources, introspect schemas, and design custom database interactions. Specifically, the integrations for PostgreSQL, Microsoft SQL Server, and MySQL reside in the backend repository under packages/server/src/integrations/. This component functions as an intermediary layer, translating user configuration and schema layouts into database queries.

The primary vulnerability lies in how the Budibase backend handles identifier metadata, specifically schema names and table names. Database identifiers cannot be parameterized using standard prepared statement placeholders, which typically only accept value literals. Consequently, developers must manually escape these identifier strings before incorporating them into SQL commands. The lack of robust validation and custom escaping allows malicious values to bypass intended constraints and alter SQL logic.

An attacker must possess administrative privileges to edit datasource configurations to trigger the PostgreSQL and Microsoft SQL Server vulnerabilities directly. However, the MySQL vulnerability presents a unique threat vector where a malicious database catalog can trigger the exploit. During standard metadata introspection, Budibase queries the list of tables from the database and passes unescaped table names into subsequent metadata queries. This permits blind SQL injection via compromised or untrusted database servers.

The scope of execution transitions from the low-code application environment to the target database context. Depending on database configuration, successful exploitation can result in full database compromise, data exfiltration, or lateral movement. In highly privileged database environments, this can lead to remote code execution on the underlying database host.

Root Cause Analysis

The fundamental flaw across all three database connectors is improper identifier neutralization (CWE-89). When building dynamic SQL statements, Budibase relies on ES6 template string interpolation and array mapping. This design assumes that schema and table names are safe identifiers, overlooking the potential for embedding structural string delimiters.

In the PostgreSQL connector, the application parses user-defined schemas from the configuration settings by splitting on commas and mapping each value inside double quotes. The double quote is the standard ANSI SQL delimiter for identifiers, but it must be escaped by doubling the character if it appears within the identifier itself. Because Budibase lacks this escaping step, entering a schema name with a trailing double quote terminates the identifier wrapper. Since node-postgres processes raw string queries using the simple query protocol, the engine accepts and processes multiple SQL statements separated by semicolons within a single payload.

In the Microsoft SQL Server integration, the SQL generation routine retrieves column definitions using a dynamic SELECT query targeting INFORMATION_SCHEMA.COLUMNS. The schemaName and tableName values are directly interpolated into single-quoted string literals. If a user provides a schema name containing a single quote, the literal is terminated prematurely. The MS SQL Server parser then processes any appended SQL statements, which may include stored procedures or administrative functions.

In the MySQL connector, the DESCRIBE statement is wrapped with backticks to handle identifiers that might be reserved words or contain special characters. However, if the table name contains a backtick, it is not escaped, which allows the table name to break out of the backticks. Because the MySQL connector explicitly configures multipleStatements: true during connection initialization, the database driver supports executing multiple sequential queries separated by semicolons, enabling arbitrary query chaining.

Code Analysis

// VULNERABLE CODE: packages/server/src/integrations/postgres.ts
const search_path = this.config.schema
  .split(",")
  .map(item => `"${item.trim()}"`) // Vulnerable to double quote escape
await this.client.query(`SET search_path TO ${search_path.join(",")};`)
 
// PATCHED CODE: packages/server/src/integrations/postgres.ts
const search_path = this.config.schema
  .split(",")
  .map(item => `"${item.trim().replace(/"/g, '""')}"`) // Patched by doubling double-quotes
await this.client.query(`SET search_path TO ${search_path.join(",")};`)

The code snippet above demonstrates the vulnerability within the PostgreSQL connector. In the vulnerable implementation, the map function simply wraps each trimmed schema item in double quotes. When an attacker supplies a payload containing an unescaped double quote followed by administrative SQL commands, the double quote closes the identifier, and the semicolon acts as a statement separator. The patched implementation mitigates this by applying a global regular expression replacement (replace(/"/g, '""')) that doubles any double-quote character, satisfying the SQL escaping convention for identifiers.

// VULNERABLE CODE: packages/server/src/integrations/mysql.ts
// File: packages/server/src/integrations/mysql.ts (Line 172)
this.config = { ...config, multipleStatements: true, ... }
 
// File: packages/server/src/integrations/mysql.ts (Line 305)
{ sql: `DESCRIBE \`${tableName}\`;` } // Vulnerable to backtick escape
 
// PATCHED CODE: packages/server/src/integrations/mysql.ts
// File: packages/server/src/integrations/mysql.ts (Line 305)
const escapedTableName = tableName.replace(/`/g, '``'); // Patched by doubling backticks
{ sql: `DESCRIBE \`${escapedTableName}\`;` }

The MySQL integration vulnerability is particularly severe because the driver establishes a database connection with multipleStatements: true enabled. This setting allows the driver to send batch queries to the database server in a single network round-trip. The vulnerable DESCRIBE statement interpolates the tableName directly within backticks. In the patched code, Budibase intercepts the table name and applies a regex replacement (replace(//g, '``')`) to double any backticks inside the identifier, neutralizing the injection vector.

While these regex replacements resolve the direct attack vectors, they represent a string-manipulation approach to SQL safety. A more comprehensive defense-in-depth practice would entail utilizing parameterization libraries or native database escaping APIs, such as pg-format for PostgreSQL. However, the implemented fixes successfully prevent syntax-level escapes under typical operational configurations.

Exploitation Methodology

An attacker must meet specific requirements depending on the database engine. For PostgreSQL and MS SQL Server, the attacker must have administrative access to the Budibase management panel. This allows them to configure or modify existing connection options. For MySQL, the attacker can leverage a rogue database server to execute a blind injection against the Budibase application itself.

To exploit the PostgreSQL vector, the attacker edits the "Schema" configuration field. They input a string structured to terminate the double quotes and append a payload: public"; CREATE TABLE pwned AS SELECT usename, passwd FROM pg_shadow; --. When Budibase attempts to connect, it triggers SET search_path. The database driver executes this as two separate queries, creating the pwned table and populating it with user credentials.

For Microsoft SQL Server, the target must have xp_cmdshell enabled, or the database user must have sufficient privileges to enable it. The attacker injects the payload dbo'; EXEC xp_cmdshell('whoami'); -- into the Schema configuration field. During the subsequent metadata discovery loop, Budibase executes the command string, which triggers the stored procedure and runs arbitrary shell commands on the host machine.

The MySQL vector does not require direct control of Budibase configuration if Budibase can be enticed to connect to a malicious MySQL instance. The attacker sets up a MySQL database containing a table named foo; DROP TABLE users; --. When the Budibase server queries the table list during introspection, it stores this malformed table name. When the server later issues a DESCRIBEstatement using the unescaped table name, the nested query executes, resulting in the deletion of theusers` table.

Impact Assessment

The impact of these injection vulnerabilities is rated as High, with an overall CVSS score of 8.4. Because Budibase is a low-code platform designed to connect multiple business systems, a compromise of the database integrations can result in widespread lateral movement. An attacker can pivot from the low-code editor to critical backend data stores.

The confidentiality impact is high, as arbitrary SELECT commands can be injected to retrieve stored credentials, session tokens, and business-critical data. In PostgreSQL, accessing tables like pg_shadow or writing database data to external locations allows attackers to harvest database hashes. In MS SQL and MySQL, reading the system tables can expose the entire schema layout and other configuration settings.

The integrity and availability impacts are equally severe. Attackers can execute DDL and DML statements to alter, delete, or corrupt database tables. Commands such as DROP TABLE or TRUNCATE can cause complete data loss, while modification commands can insert rogue records or backdoors.

The scope metric is set to "Changed" because exploitation allows the attacker to step outside the security boundaries of the Budibase application itself. In MS SQL environments where xp_cmdshell is enabled, the database engine executes commands under the context of the SQL Server service account, potentially allowing full host OS takeover.

Remediation and Mitigation

The primary and recommended remediation is to upgrade Budibase to version 3.39.19 or higher. This release integrates proper escaping for double quotes, single quotes, and backticks across all affected database connectors. If immediate patching is not possible, organizations should restrict administrative privileges in the Budibase platform. Since most of these vectors require altering connection schemas, minimizing the number of users with administrative access limits the attack surface.

Applying the principle of least privilege to database connection credentials serves as an important secondary defense. The database user accounts assigned to Budibase should only possess the permissions strictly required for application function. For example, disabling superuser privileges on PostgreSQL and disabling xp_cmdshell globally on Microsoft SQL Server prevents the execution of arbitrary system-level commands.

Network security controls can also help detect and block potential exploit attempts. Web Application Firewalls should monitor HTTP request payloads directed to /api/datasources for the presence of dynamic SQL injection characters, such as trailing double-quotes or unescaped single-quotes followed by SQL keywords. Implementing these defensive layers ensures that even if a connector is targeted, the blast radius of the attack is significantly reduced.

Technical Appendix

CVSS Score
8.4/ 10
CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:H

Affected Systems

Budibase Low-Code Platform PostgreSQL ConnectorBudibase Low-Code Platform MS SQL ConnectorBudibase Low-Code Platform MySQL Connector
AttributeDetail
CWE IDCWE-89
Attack VectorNetwork (AV:N)
CVSS v3.18.4 (High)
Exploit StatusPoC (Proof of Concept)
ImpactData Exfiltration, Arbitrary DDL/DML, and OS command execution
Affected ComponentsPostgreSQL, MS SQL, and MySQL Database Connectors
CWE-89
Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

Vulnerability Timeline

Vulnerability published and patch 3.39.19 released
2026-06-18

References & Sources

  • [1]GitHub Security Advisory GHSA-QQF5-X7MJ-V43P
  • [2]Budibase Project Repository

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 days ago•CVE-2026-54068
5.9

CVE-2026-54068: Unauthenticated Server-Side Template Injection and SQLite Exfiltration in SiYuan PKM

An authentication bypass in the SiYuan personal knowledge management system before version 3.7.0 exposes a dynamic icon rendering endpoint. This endpoint processes client-supplied Go template directives. By submitting a crafted request, an unauthenticated remote attacker can leverage registered database template functions to execute arbitrary read-only SQL queries and exfiltrate workspace contents.

Amit Schendel
Amit Schendel
14 views•5 min read
•2 days ago•CVE-2026-54069
9.1

CVE-2026-54069: Authentication Bypass in SiYuan Note via Origin Header Spoofing

CVE-2026-54069 is a critical authentication bypass vulnerability in the SiYuan Note personal knowledge management system. The flaw is located in the HTTP server's middleware handling API authorization, which unconditionally trusts requests carrying a 'chrome-extension://' scheme in the Origin HTTP header, granting administrative access without validating API tokens.

Alon Barad
Alon Barad
11 views•5 min read
•2 days ago•CVE-2026-54089
9.1

CVE-2026-54089: Authentication Bypass by Spoofing in File Browser

CVE-2026-54089 is a critical authentication bypass vulnerability in File Browser affecting instances configured with proxy-based authentication. An unauthenticated remote attacker with direct network access can impersonate arbitrary users or register new accounts by spoofing configured HTTP headers.

Amit Schendel
Amit Schendel
8 views•7 min read
•2 days ago•GHSA-99J7-FHR2-XFJ4
10.0

GHSA-99J7-FHR2-XFJ4: Malicious Remote Code Execution Payload in 'exploration' Cargo Crate

The malicious Cargo package 'exploration' was uploaded to the crates.io registry. During compilation or package import, the crate executes code designed to establish an outbound TCP/HTTP connection, download an external second-stage binary, and execute the binary locally on the host machine. This creates an unauthenticated remote code execution vector impacting developer environments and continuous integration pipelines.

Amit Schendel
Amit Schendel
13 views•6 min read
•2 days ago•CVE-2026-54088
9.3

CVE-2026-54088: Pre-Authentication Remote Code Execution in File Browser Hook Authentication

CVE-2026-54088 is a critical command injection vulnerability in File Browser prior to version 2.63.6. When Hook Authentication is enabled, the application interpolates unsanitized credentials into a shell command, allowing unauthenticated remote code execution.

Alon Barad
Alon Barad
13 views•6 min read
•2 days ago•GHSA-QV4M-M73M-8HJ7
8.8

GHSA-qv4m-m73m-8hj7: Authenticated Arbitrary File Upload leading to Remote Code Execution in NotrinosERP

An authenticated remote code execution vulnerability exists in NotrinosERP (versions up to and including 1.0.0) within the Human Resource Management (HRM) module. Users with employee management permissions can upload arbitrary file types, including PHP scripts, which are written directly to a web-accessible directory. This allows for arbitrary code execution in the context of the web-server user.

Alon Barad
Alon Barad
8 views•6 min read