Критическая уязвимость в AdonisJS открывает путь к удалённой записи файлов на сервер

vulnerability

В фреймворке AdonisJS обнаружена критическая уязвимость типа "path traversal" (обход пути) в механизме обработки файлов. Эта проблема позволяет удалённым злоумышленникам записывать произвольные файлы в любые доступные для веб-приложения директории на сервере, выходя за пределы предназначенной для загрузок папки.

Детали уязвимости

Уязвимость, получившая идентификатор CVE-2026-21440, затрагивает пакет "@adonisjs/bodyparser" версий до 10.1.1 включительно, а также все предрелизные версии 11.x до 11.0.0-next.6. Разработчики уже выпустили исправления в версиях 10.1.2 и 11.0.0-next.6. Рекомендуется немедленно обновить библиотеку во всех проектах.

Проблема кроется в функции "MultipartFile.move(location, options)", которая является частью промежуточного ПО BodyParser для обработки данных формы ("multipart/form-data"). Когда параметр "options" не передаётся или не содержит явно заданного очищенного имени файла, система по умолчанию использует исходное имя, предоставленное клиентом, без необходимой санитизации.

Уязвимый код формирует конечный путь с помощью "path.join(location, name)". При этом он некорректно обрабатывает последовательности обхода директорий, такие как "../../../", которые злоумышленник может внедрить в имя файла. Более того, если разработчик явно не задал параметр "overwrite" в опциях, он по умолчанию имеет значение "true". Это позволяет злоумышленнику перезаписывать существующие файлы в целевой директории.

Таким образом, формируется двухэтапная уязвимость. Сначала атакующий использует поддельное имя файла с последовательностями обхода директорий, чтобы выйти за пределы предназначенной для загрузок папки. Затем он получает возможность записывать или перезаписывать файлы в произвольных местах файловой системы.

Важно отметить, что в прошлом официальная документация AdonisJS содержала примеры кода, которые неявно подталкивали разработчиков к использованию этой уязвимой схемы реализации. Это увеличивает потенциальную область атаки в реальных приложениях.

Для успешной эксплуатации уязвимости атакующему необходим доступ к любой конечной точке загрузки файлов в целевом приложении. Следовательно, под угрозой оказывается любой проект, где используется функция "MultipartFile.move()" без должной проверки имени файла или явной передачи аргумента с опциями.

Возможность записи файлов за пределами предназначенной директории открывает несколько векторов для атаки. Наиболее серьёзным последствием может стать удалённое выполнение кода. Этого можно достичь, если злоумышленнику удастся перезаписать файлы исходного кода приложения, стартовые скрипты или конфигурационные файлы, которые впоследствии будут выполнены или загружены средой выполнения.

Однако реализация удалённого выполнения кода зависит от ряда факторов. К ним относятся права доступа к файловой системе, архитектура развёртывания приложения и поведение среды выполнения. В правильно сконфигурированных средах с сегментацией прав уязвимость может быть ограничена только возможностью записи файлов без эскалации до выполнения команд.

Согласно системе оценки CVSS v4.0, уязвимость получила критический базовый балл 9.3. Векторная строка CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N указывает на возможность атаки по сети, низкую сложность эксплуатации и отсутствие требований к аутентификации. При этом высокое влияние на конфиденциальность, целостность и доступность данных делает CVE-2026-21440 серьёзной угрозой для организаций, использующих уязвимые версии AdonisJS.

Кроме немедленного обновления пакета "@adonisjs/bodyparser", командам разработки рекомендуется провести аудит всех существующих обработчиков загрузки файлов. Необходимо убедиться, что имена файлов, полученные от клиента, проходят строгую валидацию. Также важно явно задавать параметр "overwrite: false" в опциях функции "move()", если перезапись файлов не является явным требованием бизнес-логики. Эти меры помогут устранить риски даже в обновлённых версиях и повысить общую безопасность приложения.

Ссылки

Комментарии: 0