Под удар попали сервисы на базе Google Cloud и мобильная платформа Firebase.

Обычный файл с описанием данных может внезапно превратиться в способ захватить сервер. Специалисты Endor Labs нашли в популярной библиотеке protobuf.js уязвимость, которая позволяет выполнить чужой код почти без усилий, если приложение подхватит подменённый файл схемы.
Protobuf.js – одна из самых распространённых библиотек для работы с форматом Protocol Buffers в JavaScript. Такой формат используют миллионы сервисов, включая решения на базе облачной платформы Google Cloud и платформы Firebase. Пакет скачивают около 52 млн раз в неделю, причём часто он попадает в проекты как скрытая зависимость.
Сама атака выглядит проще, чем может показаться. Достаточно, чтобы злоумышленник подсунул приложению вредоносный файл схемы protobuf. Такие файлы нередко загружают из внешних источников – партнёрских сервисов, общих хранилищ или сторонних серверов. После загрузки достаточно одного обычного сообщения: библиотека обработает данные и выполнит встроенный вредоносный код без авторизации и без действий со стороны пользователя.
Проблема связана с тем, как protobuf.js обрабатывает схемы. Библиотека не просто читает описание данных, а генерирует на его основе JavaScript-код и сразу запускает его через механизм, аналогичный eval. При этом имена типов из схемы вставляются в код как есть, без проверки. Если злоумышленник подставит в имя конструкции JavaScript, библиотека выполнит их как полноценный код.
Уязвимость получила идентификатор GHSA-xq3m-2v4x-88gg и оценку 9,4 балла по шкале CVSS. Под удар попали версии protobuf.js до 8.0.0 и 7.5.4 включительно. Исправления уже вышли в версиях 8.0.1 и 7.5.5. Публичных атак пока не зафиксировали, но эксплуатировать уязвимость технически несложно.
Риск шире, чем кажется. Многие сервисы автоматически загружают схемы «на лету» – например, через механизмы самоописания в gRPC или из внутренних реестров. В таких сценариях достаточно одного скомпрометированного источника, чтобы выполнить код на сервере, получить доступ к токенам, данным пользователей и внутренним сервисам.
Разработчикам советуют срочно обновить библиотеку и проверить зависимости, особенно если проект использует gRPC, Firebase или клиентские библиотеки облачных сервисов. Отдельное внимание стоит уделить местам, где приложение загружает схемы извне. Такие файлы уже нельзя считать безобидными описаниями – по факту они становятся исполняемым кодом.