Как уязвимость LangGrinch использует инъекцию сериализации для кражи секретов?

Исследователь Ярден Порат из организации Cyata 4 декабря 2025 года сообщил о критической уязвимости в популярном Python-пакете langchain-core, который предоставляет базовые интерфейсы для приложений на основе больших языковых моделей (LLM). Уязвимость, получившая кодовое название LangGrinch и идентификатор CVE-2025-68664, была оценена как критическая с показателем 9.3 из 10.0 по шкале CVSS. Проблема кроется в механизме сериализации данных и позволяет злоумышленникам выполнять произвольный код или извлекать конфиденциальную информацию.
Как уязвимость LangGrinch использует инъекцию сериализации для кражи секретов?
Изображение носит иллюстративный характер

Техническая причина сбоя заключается в некорректной работе функций dumps() и dumpd(), которые не выполняют надлежащее экранирование пользовательских словарей, содержащих ключ «lc». В архитектуре LangChain этот ключ используется внутренними процессами для маркировки сериализованных объектов. Если контролируемые пользователем данные содержат этот ключ, система ошибочно воспринимает их как легитимный объект LangChain в процессе десериализации, а не как обычные данные, что открывает путь для инъекции сериализации.

Механизм атаки подразумевает, что злоумышленник заставляет цикл оркестрации сериализовать и затем десериализовать контент с ключом «lc». Это действие приводит к созданию небезопасного произвольного объекта, активируя пути выполнения кода, выгодные атакующему. Основным вектором атаки является промпт-инъекция, через которую злоумышленники получают контроль над такими полями, как metadata, additional_kwargs и response_metadata. Эти поля обрабатываются во время потоковых операций, позволяя вредоносному коду проникнуть в систему.

Последствия эксплуатации CVE-2025-68664 могут быть катастрофическими для безопасности приложения. Уязвимость позволяет извлекать секреты из переменных окружения, особенно если активирована настройка secrets_from_env=True. Кроме того, становится возможным небезопасное создание классов в рамках доверенных пространств имен, таких как langchain_core, langchain и langchain_community.

Помимо кражи данных, LangGrinch создает риски выполнения произвольного кода, что может быть достигнуто с использованием шаблонов Jinja2. Также злоумышленники могут манипулировать поведением LLM, влияя на ответы модели. Как отметил исследователь Ярден Порат, этот инцидент демонстрирует пересечение проблем искусственного интеллекта и классической безопасности: «Выходные данные LLM являются ненадежными входными данными».

Разработчики LangChain выпустили исправление, внедряющее строгие ограничения по умолчанию. В функции load() и loads() был добавлен новый параметр allowed_objects (белый список), определяющий допустимые классы. Использование шаблонов Jinja2 теперь заблокировано по умолчанию, а опция secrets_from_env переведена в состояние «False», что отключает автоматическую загрузку секретов из окружения.

Для устранения уязвимости в Python-пакете langchain-core пользователям версий от 0.0 до 1.2.5 необходимо обновиться до версии 1.2.5. Для тех, кто использует версии ниже 0.3.81, исправление включено в выпуск 0.3.81. Обновление является обязательным для предотвращения рисков удаленного выполнения кода и утечки данных.

Аналогичная уязвимость инъекции сериализации была обнаружена и в JavaScript-версии библиотеки — LangChain.js. Ей присвоен идентификатор CVE-2025-68665 и оценка CVSS 8.6. Проблема также связана с неправильным экранированием ключей «lc», что требует немедленного обновления затронутых пакетов в экосистеме JavaScript.

Исправления для JavaScript-экосистемы распределены по нескольким пакетам. Основная библиотека LangChain.js (версии от 0.0 до 1.1.8) исправлена в версии 1.1.8. Пакет @langchain/core версии ниже 0.3.80 обновлен в версии 0.3.80. Для пакета langchain версии от 1.0.0 до 1.2.3 патч выпущен в версии 1.2.3, а для версий ниже 0.3.37 — в 0.3.37.


Новое на сайте

19521Банковский троян VENON на Rust атакует Бразилию с помощью девяти техник обхода защиты 19520Бонобо агрессивны не меньше шимпанзе, но всё решают самки 19519Почему 600-килограммовый зонд NASA падает на Землю из-за солнечной активности? 19518«Липовый календарь»: как расписание превращает работников в расходный материал 19517Вредоносные Rust-пакеты и ИИ-бот крадут секреты разработчиков через CI/CD-пайплайны 19516Как хакеры за 72 часа превратили npm-пакет в ключ от целого облака AWS 19515Как WebDAV-диск и поддельная капча помогают обойти антивирус? 19514Могут ли простые числа скрываться внутри чёрных дыр? 19513Метеорит пробил крышу дома в Германии — откуда взялся огненный шар над Европой? 19512Уязвимости LeakyLooker в Google Looker Studio открывали доступ к чужим базам данных 19511Почему тысячи серверов оказываются открытой дверью для хакеров, хотя могли бы ею не быть? 19510Как исследователи за четыре минуты заставили ИИ-браузер Perplexity Comet попасться на... 19509Может ли женщина без влагалища и шейки матки зачать ребёнка естественным путём? 19508Зачем учёные из Вены создали QR-код, который невозможно увидеть без электронного... 19507Девять уязвимостей CrackArmor позволяют получить root-доступ через модуль безопасности...
Ссылка