Критическая уязвимость в библиотеке Protobuf позволяет выполнять код JavaScript
Опубликован экспериментальный код для использования критической уязвимости, позволяющей удаленно выполнять код, в protobuf.js — широко используемой JavaScript-реализации Protocol Buffers от Google.
Этот инструмент очень популярен в реестре Node Package Manager (npm): в среднем его скачивают почти 50 миллионов раз в неделю. Он используется для межсервисного взаимодействия, в приложениях реального времени, а также для эффективного хранения структурированных данных в базах данных и облачных средах.
В опубликованном в пятницу отчете компания Endor Labs, специализирующаяся на безопасности приложений, сообщает, что уязвимость удаленного выполнения кода (RCE) в protobuf.js вызвана небезопасной динамической генерацией кода.
Проблема с безопасностью не получила официального номера CVE и в настоящее время отслеживается под идентификатором GHSA-xq3m-2v4x-88gg, присвоенным GitHub.
Endor Labs объясняет, что библиотека создает функции JavaScript на основе схем protobuf, объединяя строки и выполняя их с помощью конструктора Function(), но не проверяет идентификаторы, полученные из схемы, например имена сообщений.
Это позволяет злоумышленнику предоставить вредоносную схему, которая внедряет произвольный код в сгенерированную функцию, которая затем выполняется, когда приложение обрабатывает сообщение с использованием этой схемы.
Это открывает путь к удаленному выполнению кода на серверах или в приложениях, которые загружают схемы, созданные злоумышленниками, предоставляя доступ к переменным среды, учетным данным, базам данных и внутренним системам и даже позволяя перемещаться по инфраструктуре.
Атака может затронуть и компьютеры разработчиков, если они локально загружают и декодируют ненадежные схемы.
Уязвимость затрагивает версии protobuf.js 8.0.0/7.5.4 и ниже. Endor Labs рекомендует обновить их до версий 8.0.1 и 7.5.5, в которых эта проблема устранена.
Патч очищает имена типов, удаляя небуквенно-цифровые символы, что не позволяет злоумышленнику закрыть синтетическую функцию. Однако, по словам Эндора, в долгосрочной перспективе было бы лучше вообще запретить передачу идентификаторов, доступных злоумышленнику, через Function.
Компания Endor Labs предупреждает, что «эксплуатация уязвимости не представляет сложности» и что это подтверждается минимальным доказательством концепции (PoC), включенным в рекомендацию по безопасности. Однако на сегодняшний день не было зафиксировано ни одного случая активной эксплуатации уязвимости.
Об уязвимости сообщил исследователь из Endor Labs и специалист по поиску уязвимостей в системе безопасности Кристиан Стайку 2 марта, а разработчики protobuf.js опубликовали исправление на GitHub 11 марта. Исправления для пакетов npm были доступны 4 апреля для ветки 8.x и 15 апреля для ветки 7.x.
Помимо обновления до исправленных версий, Endor Labs также рекомендует системным администраторам проверять транзитивные зависимости, относиться к загрузке схем как к ненадежному источнику данных и отдавать предпочтение предварительно скомпилированным/статическим схемам в производственной среде.
Редактор: AndreyEx