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/cmdlineund 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.
