CVE-2026-43629 в Debian: heap overflow в llama.cpp, уязвимые версии и защита

CVE: CVE-2026-43629
Продукт: Debian
Дата публикации: 07.08.2026
Критичность: CRITICAL
CVSS: 9.2 (4.0)
EPSS: 0,62%; процентиль 47,21%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В пакете llama.cpp для Debian обнаружена критическая уязвимость, позволяющая нарушителю с локальным доступом к каталогу сохранения состояния KV-кэша повредить память и выполнить произвольный код. Статья разбирает механику ошибки, статус исправлений в дистрибутиве и практические шаги для администраторов.

Основные характеристики​


Уязвимость позволяет атакующему, имеющему права на запись в каталог сохранения состояния модели, повредить кучу и потенциально выполнить произвольный код. Риск высокий, так как атака не требует прав root, но требует локального доступа к файловой системе.

  • Тип ошибки: Heap Buffer Overflow (CWE-787) и Integer Overflow (CWE-190).
  • CVSS 4.0: 9.2 (CRITICAL). Вектор: CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X.
  • Условия атаки: Требуется локальный доступ к каталогу slot_save_path и возможность подмены файлов состояния.
  • Эксплуатация: Публичные данные о массовой эксплуатации отсутствуют, но техническое описание атаки доступно.
  • EPSS: 0,62% (процентиль 47,21%).

Какие продукты и версии затронуты​


Уязвимость затрагивает пакет llama.cpp в дистрибутивах Debian. Согласно данным Debian Security Tracker, статус исправления для всех перечисленных релизов на данный момент является «undetermined» (не определено), а срочность не назначена.

  • Debian forky: Версия в репозитории 1:0.2.0+dfsg1-1. Статус: undetermined.
  • Debian sid: Версия в репозитории 1:0.2.0+dfsg1-1. Статус: undetermined.

Администраторам следует проверить, установлен ли пакет llama.cpp на их системах, так как именно он содержит уязвимый код.

Причина уязвимости​


Причина уязвимости кроется в функции state_read_data(), которая используется для восстановления состояния KV-кэша. При вычислении размера данных для записи в память функция не выполняет проверку на переполнение целочисленного значения.

Атакующий может создать вредоносный файл состояния, в котором поле cell_count содержит значение, вызывающее переполнение при умножении или превышающее выделенный размер буфера тензора. В результате функция записывает данные за пределы выделенной области памяти, что приводит к повреждению метаданных кучи, весов модели или указателей на функции.

Как работает атака​


Атака реализуется через подмену файлов состояния KV-кэша. Атакующий, имеющий права на запись в каталог slot_save_path, размещает там специально сформированный файл. При попытке приложения восстановить состояние из этого файла функция state_read_data() читает вредоносные метаданные.

Из-за отсутствия проверки на переполнение при вычислении размера записи, данные записываются за границы выделенного буфера. Это позволяет нарушителю повредить структуру памяти, что может привести к выполнению произвольного кода через перезапись указателей на функции или повреждению критических данных процесса.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости атакующему необходимо выполнить следующие условия:

  • Наличие установленного пакета llama.cpp в уязвимой версии (b4882–b9058).
  • Локальный доступ к файловой системе с правами на запись в каталог slot_save_path.
  • Возможность подмены или создания файлов состояния KV-кэша в этом каталоге.
  • Запуск приложения, которое попытается восстановить состояние из подмененного файла.

Возможный сценарий атаки​


Сценарий атаки начинается с того, что нарушитель получает локальный доступ к системе, где запущен сервис, использующий llama.cpp. Он определяет каталог slot_save_path и проверяет свои права на запись в него.

Затем атакующий формирует вредоносный файл состояния, в котором параметры cell_count рассчитаны так, чтобы вызвать переполнение при вычислении размера буфера. Файл помещается в каталог. Когда приложение пытается загрузить состояние, происходит запись за пределы буфера, что приводит к выполнению кода атакующего или сбою процесса.

Есть ли публичный эксплойт​


На данный момент в источниках нет подтверждений о массовой эксплуатации уязвимости в реальных атаках. Однако доступно техническое описание механизма атаки и репозиторий с патчами, что указывает на наличие PoC или детального анализа. Отсутствие сведений о KEV не означает, что эксплойт не существует, но подтвержденной эксплуатации в дикой природе зафиксировано не было.

Признаки эксплуатации​


Специфичных индикаторов компрометации (IOC) для этой уязвимости в открытых источниках не опубликовано. Администраторам следует полагаться на общие признаки аномального поведения:

  • Непредвиденные сбои или аварийные завершения процесса llama.cpp.
  • Изменение времени модификации файлов в каталоге slot_save_path.
  • Появление неизвестных процессов, запущенных от имени пользователя, работающего с приложением.
  • Аномальные записи в логах доступа к файловой системе в каталоге сохранения состояния.

Как обнаружить атаку​


Для обнаружения потенциальной атаки рекомендуется настроить мониторинг каталога slot_save_path на предмет создания или изменения файлов. Также полезно отслеживать логи приложений на предмет ошибок, связанных с восстановлением состояния KV-кэша.

Следует проверять права доступа к каталогу slot_save_path и убедиться, что только доверенные пользователи имеют права на запись. Использование инструментов мониторинга файловой системы (например, auditd) поможет зафиксировать подозрительные операции с файлами состояния.

Как проверить свою версию​


Для проверки версии установленного пакета llama.cpp в Debian используйте следующие команды. Замените <имя-пакета> на фактическое имя пакета, если оно отличается от llama.cpp.

Bash:
cat /etc/debian_version
cat /etc/os-release
apt-cache policy llama.cpp
dpkg-query -W -f='${Package} ${Version}\n' llama.cpp

Сравните полученную версию с данными из Debian Security Tracker, чтобы определить, является ли она уязвимой.

Исправление​


Основным способом устранения уязвимости является обновление пакета llama.cpp до исправленной версии. Однако, согласно Debian Security Tracker, на момент публикации статьи исправленная версия для релизов forky и sid еще не назначена (статус undetermined).

Администраторам рекомендуется:

  • Следить за обновлениями в Debian Security Tracker.
  • При появлении исправленной версии немедленно установить ее через apt update && apt upgrade llama.cpp.
  • До выхода официального патча рассмотреть временные меры защиты, описанные ниже.

Временные меры защиты​


Пока официальное исправление не выпущено, можно применить следующие временные меры:

  • Ограничить права на запись в каталог slot_save_path только для доверенных пользователей.
  • Отключить функцию восстановления состояния KV-кэша, если это возможно в конфигурации приложения.
  • Изолировать процесс llama.cpp в контейнере или песочнице с ограниченным доступом к файловой системе.
  • Регулярно проверять целостность файлов в каталоге slot_save_path.

Как проверить устранение уязвимости​


После установки обновления необходимо проверить, что уязвимость устранена. Убедитесь, что версия пакета соответствует исправленной, указанной в Debian Security Tracker.

Проведите функциональное тестирование приложения, чтобы убедиться, что восстановление состояния KV-кэша работает корректно. Проверьте логи на предмет ошибок, связанных с обработкой файлов состояния. Если возможно, проведите сканирование уязвимостей для подтверждения отсутствия CVE-2026-43629.

Вывод​


CVE-2026-43629 представляет серьезную угрозу для систем, использующих llama.cpp в Debian, особенно в средах, где несколько пользователей имеют доступ к каталогу сохранения состояния. Администраторам следует внимательно отнестись к управлению правами доступа и следить за выходом официального исправления. Временные меры защиты помогут снизить риск до момента обновления пакета.

Официальные источники​


  1. NVD — CVE-2026-43629
  2. Debian Security Tracker — CVE-2026-43629
  3. FIRST EPSS — CVE-2026-43629

История обновлений статьи​


  • 10.08.2026 — Опубликована первая версия материала.
  • 12.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
  • 23.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
  • 27.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
  • 31.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ