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-разработчикам», — добавил Герсте. |
Проверить безопасность сайта