SurrealDB: Authentifizierter Pfad-Traversal im Analyzer-Mapper-Filter

Ein angemeldeter Datenbank-Benutzer mit EDITOR- oder OWNER-Rolle kann über den mapper-Filter eines Analyzers beliebige Server-Dateien lesen und daraus die Root-Zugangsdaten der Instanz gewinnen.

Advisory-ID: TP-2026-027
Produkt: SurrealDB (Multi-Modell-Datenbank)
Schwachstellentyp: Authentifizierter Pfad-Traversal / beliebiges Dateilesen (CWE-22)
CVE: nicht beantragt
CVSS 3.1: 7.7 (Hoch) · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
Betroffene Versionen: < 3.1.5
Behoben in: 3.1.5
Hersteller-Advisory: GHSA-cc8f-fcx3-gpjr
Gemeldet: 11. Juni 2026

Zusammenfassung

SurrealDB ist eine Multi-Modell-Datenbank. Die Anweisung DEFINE ANALYZER ... FILTERS mapper('<pfad>') öffnet den angegebenen Dateipfad bereits zur Definitionszeit. Die einzige Prüfung ist die Datenbank-Berechtigung zum Bearbeiten von Analyzern, eine Capability-Prüfung für den Dateizugriff fehlt. Da die Pfad-Allowlist im Standard leer ist und in diesem Fall jeden Pfad zulässt, kann ein nicht-root Benutzer mit EDITOR- oder OWNER-Rolle beliebige für den Serverprozess lesbare Dateien auslesen. turingpoint hat den Ablauf verifiziert und verantwortungsvoll gemeldet; der Hersteller hat ihn in 3.1.5 behoben.

Ursache

Mapper::new öffnet den vom Angreifer übergebenen Pfad mit tokio::fs::File::open, erreichbar über mappers().load (surrealdb/core/src/expr/statements/define/analyzer.rs:111 nach surrealdb/core/src/idx/ft/analyzer/mapper.rs:27). Die einzige Autorisierung ist ctx.is_allowed(opt, Action::Edit, ResourceKind::Analyzer, Base::Db) (analyzer.rs:89), die jede EDITOR- oder OWNER-Rolle hält, während für das Dateiöffnen keine Capability-Prüfung läuft. Die Pfad-Eingrenzung check_is_path_allowed gibt bei leerer Allowlist den Pfad ungeprüft zurück (surrealdb/core/src/iam/file.rs:14), und file_allowlist ist im Standard ein leeres Vec (surrealdb/core/src/cnf/mod.rs:325). Der Zeilenparser bricht anschließend ab und bettet die rohe Dateizeile wörtlich in das AnalyzerError-Ergebnis ein (mapper.rs:43), sodass Dateiinhalte an den Aufrufer zurückfließen. Damit ist der einzige fail-open-Pfad in iam/ getroffen, während alle Netz-, Funktions- und Skripting-Capabilities fail-closed sind.

Proof of Concept

Angemeldet als Datenbank-Benutzer mit EDITOR-Rolle (kein root):

DEFINE ANALYZER leak FILTERS mapper('/proc/self/cmdline');

-> die Fehlerantwort enthält die rohe Dateizeile, z. B. "--user root --pass root"
   (Instanz-Root-Zugangsdaten); ebenso lesbar: /etc/passwd

Der Dateiinhalt wird verifiziert in das Fehlerergebnis eingebettet zurückgegeben, weil die Pfadprüfung bei leerer Allowlist offen ausgeht und keine Capability-Prüfung den Zugriff bremst.

Auswirkung

  • Lesen beliebiger für den Serverprozess lesbarer Dateien (z. B. /etc/passwd, /proc/self/cmdline).
  • Gewinnung der Instanz-Root-Zugangsdaten aus /proc/self/cmdline und damit vollständige Übernahme der Datenbank.
  • Bruch der von SurrealDB dokumentierten Datenbank-Isolation.

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.