С помощью запроса JSON и JavaScript можно удаленно выполнить код на устройстве жертвы
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-разработчикам», — добавил Герсте.
5778 К? Пф! У нас градус знаний зашкаливает!