Бесплатно Экспресс-аудит сайта:

21.07.2022

RCE-уязвимость обнаружена на платформе Blitz.js

JavaScript-платформа Blitz.js выпустила исправление для критической уязвимости загрязнения прототипа, чтобы предотвратить удаленное выполнение кода (RCE) на серверах Node.js. Загрязнение прототипа — это особый вид уязвимости JavaScript, который позволяет хакеру манипулировать структурой языка и использовать его несколькими способами.

По словам исследователя безопасности Sonar Пола Герсте , это также позволяет злоумышленнику использовать код в приложении Blitz.js для разработки обратной оболочки и запуска произвольных команд на сервере. Герсте обнаружил цепочку эксплойтов, которые можно использовать с помощью RCE-уязвимости.

Злоумышленники нацеливаются на Node.js, отправляя JSON-запрос на сервер, который запускает функцию маршрутизации Blitz.js для загрузки JavaScript-файла с загрязненным прототипом. Это позволяет киберпреступнику использовать вредоносный JavaScript-объект для выполнения произвольного кода.

Злоумышленник должен запустить файл на сервере, но Blitz.js не поддерживает функцию загрузки. Однако, у платформы есть сценарий CLI, который использует функцию JavaScript spawn() для запуска нового процесса.

Злоумышленник может использовать эту функцию для запуска процесса CLI и выполнения произвольной команды на сервере. Уязвимость может быть активирована без какой-либо аутентификации, а это означает, что любой пользователь, имеющий доступ к приложению Blitz.js, сможет выполнять RCE-атаки.

«Этот метод атаки использует шаблон кода, который сам по себе не является уязвимостью. Загрязнение прототипа может отрицательно влиять на целевое приложение, и потребуется много работы для избавления от всего кода, на который может повлиять загрязнение прототипа», — объяснил Герсте.

В своем сообщении в блоге исследователь упомянул некоторые общие рекомендации по защите приложений JavaScript от загрязнения прототипов, включая замораживание «object.prototype» или использование флага «--disable-proto=delete» в Node.js. «Я думаю, что загрязнение прототипов до сих пор неизвестно многим JavaScript-разработчикам», — добавил Герсте.