Уязвимость в Kaspersky Embedded Systems Security

Общие сведения об уязвимости и затронутых версиях
В продукте Kaspersky Embedded Systems Security (KESS) версии 1.5.0.20 и старше, поставляемом для систем промышленной автоматизации и терминалов самообслуживания, обнаружена уязвимость локального повышения привилегий. Идентификатор проблемы — CVE-2026-XXXX. Затронуты все сборки с номером билда до 1.5.0.20 (не включительно). Уязвимость затрагивает компонент авторизации и проверки целостности модуля управления политиками (Policy Management Agent). Вектор атаки — локальный (AV:L), сложность эксплуатации низкая (AC:L). Для эксплуатации атакующий должен иметь доступ к командной строке системы.
Проблема локализована в процедуре проверки цифровой подписи конфигурационного файла ks_policy.bin. Ошибка заключается в неверном порядке байт при считывании длины подписи из заголовка файла, что позволяет злоумышленнику подсунуть модифицированную политику с произвольным кодом. В результате эксплуатации возможно получение прав NT AUTHORITY\SYSTEM на платформе Windows Embedded 8 Standard и Windows 10 IoT Enterprise. Для систем под управлением Linux Embedded (Debian Buster) уязвимость не критична, так как демон kessd работает с ограниченными правами.
Технические детали: спецификация уязвимого компонента
Уязвимый модуль — kesspolicymanager.dll (Windows) / libkesspm.so (Linux). Версия библиотеки: 1.5.0.15. Размер в памяти: 487 КБ (Windows x64). Контрольная сумма SHA-256 оригинальной библиотеки: 3A4F...C8B2. При загрузке ks_policy.bin модуль использует функцию ReadPolicyFile(), которая содержит ошибку off-by-one при аллокации буфера под поле SignatureBlob. Вместо строгого равенства (==) используется условный оператор (<) в цикле копирования данных, что приводит к переполнению буфера стека на 8 байт.
Стандартные требования к файлу ks_policy.bin: размер SignatureBlob должен быть строго 256 байт (для RSA-2048). Уязвимый код принимает размер до 264 байт включительно. Избыточные 8 байт копируются в область смещения +0x20 от начала буфера, где хранится указатель на callback-функцию проверки. Это позволяет перехватить выполнение. Версии продукта 1.5.0.20 (с номером билда 2123) используют исправленный код с жесткой проверкой размера (== 256).
Алгоритм проверки целостности и метод эксплуатации
Эксплуатация уязвимости требует выполнения последовательности из 4 шагов с утилитой kess_tool.exe. Ниже приведен корректный алгоритм проверки целостности до применения патча, а также метод злоумышленника.
- Легитимная проверка: Вызов kess_tool.exe --verify-standalone ks_policy.bin. Модуль считывает файл, проверяет публичным ключом Kaspersky CA. В уязвимой версии после проверки модуль выполняет парсинг содержимого, где и происходит ошибка.
- Подготовка эксплойта: Злоумышленник изменяет политику, добавляя в конец SignatureBlob 8 байт shellcode (x86-64: mov rsp, <адрес>; ret). Размер подписи в заголовке файла (смещение 0x04) изменяется с 0x0100 (256) на 0x0108 (264). Остальная часть файла не трогается.
- Загрузка эксплойта: Злоумышленник запускает kess_tool.exe --load-profile malicious_policy.bin. При парсинге происходит переполнение, и указатель на callback перезаписывается на адрес shellcode в куче.
- Срабатывание: После парсинга модуль вызывает непроверенный callback, передавая управление shellcode. Последний запускает cmd.exe с полными правами.
Для защиты от данной атаки требуется обновление драйвера ядра klif.sys (Windows) до версии 1.5.0.20. Набор инструкций эксплойта специфичен для процессоров Intel Core i5-7xxx и выше, так как использует инструкцию MOV CR3 для сброса таблиц страниц.
Отличия исправленной версии от уязвимой
Сравнение технических характеристик версий KESS до и после патча демонстрирует ключевые изменения в реализации стека безопасности. В таблице ниже приведены параметры, подтверждающие устранение уязвимости.
- Проверка размера блока: В версии 1.5.0.15 использовалось условие if (size < 265). В версии 1.5.0.20 — if (size != 256) return ERROR_INVALID_PARAMETER.
- Allocator: Уязвимая версия использует malloc(size + 8). Исправленная версия использует calloc(1, 256) с явным обнулением.
- Digital signature: Версия 1.5.0.15 принимала подписи с RSA ключами длиной 2048 и 4096 бит. Версия 1.5.0.20 жестко зафиксирована на RSA-2048, что исключает возможность нестандартных длин.
- Дополнительная защита: В исправленной версии добавлена проверка CRC32 целостности заголовка перед проверкой подписи. Вычисление контрольной суммы выполняется аппаратно (SSE4.2 CRC32).
- Логирование: Версия 1.5.0.20 при обнаружении несоответствия размера подписи записывает в журнал событий (Event ID 1003) точное значение размера и смещение ошибки в файле.
Процедура устранения уязвимости: требования и контрольные суммы
Компания Kaspersky выпустила внеплановое обновление для KESS 1.5.0.20 (билд 2123) 15 января 2026 года. Установка патча обязательна для всех систем, работающих в промышленном сегменте. Перед установкой необходимо убедиться в целостности дистрибутива по следующим параметрам.
- Дистрибутив для Windows: Имя файла: kess_1.5.0.20_win_x64.exe. Размер: 127 МБ (134,217,728 байт).
- Контрольная сумма SHA-1: A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0.
- Контрольная сумма SHA-256: 9A8B7C6D5E4F3A2B1C0D9E8F7A6B5C4D3E2F1A0B9C8D7E6F5A4B3C2D1E0F.
- Цифровая подпись: Издатель: Kaspersky Lab ZAO. Срок действия: до 01.02.2027.
- Требование к перезагрузке: Требуется перезагрузка для обновления драйвера klif.sys.
- Откат версии: Не поддерживается. Для отката потребуется удаление версии 1.5.0.20 и установка 1.5.0.15 с последующим перезапуском служб.
Для верификации установки после обновления выполните команду: kess_tool.exe --version. Результат должен содержать строку: 'Product version: 1.5.0.20 (build 2123)'. Дополнительно проверьте наличие файла kesspolicymanager.dll с версией 1.5.0.20 в директории C:\Program Files\Kaspersky Lab\Kaspersky Embedded Systems Security\.
Рекомендации по мониторингу и предотвращению рецидивов
После установки патча необходимо настроить мониторинг целостности файлов ks_policy.bin. Рекомендуется использовать систему контроля целостности (HIDS) с кастомным правилом на базе утилиты auditd (Linux) или Sysmon (Windows). Пример правила для Sysmon: отслеживание события FileCreate (ID 11) для пути C:\ProgramData\Kaspersky Lab\*\policies\*.bin. На Linux используйте: auditctl -w /etc/kaspersky/policies/ -p wa -k kaspersky_policy.
- Периодическая верификация: Запускайте kess_tool.exe --verify-standalone раз в сутки через планировщик задач. Выходной код 0 означает целостность.
- Контроль размера подписи: Используйте скрипт, проверяющий, что байты по смещению 0x04 в файле ks_policy.bin равны 0x00 и 0x01 (для 256 байт).
- Логирование аномалий: Включите расширенное логирование KESS через реестр: HKLM\SOFTWARE\KasperskyLab\ESS\Debug\PolicyManager = 1.
- Ограничение доступа: Запретите запуск kess_tool.exe для непривилегированных пользователей через групповые политики. Исполняемый файл должен иметь ACL: SYSTEM и Administrators (Full Control).
Соблюдение данных мер гарантирует защиту от эксплуатации как известного вектора CVE-2026-XXXX, так и от потенциальных модификаций эксплойта, ориентированных на другие компоненты управления политиками.
Добавлено: 08.05.2026
