Проект llama.cpp выпустил версию b11000, которая устраняет критическую уязвимость безопасности в RPC-сервере. Исправление решает проблему use-after-free, позволявшую неаутентифицированным удалённым клиентам выполнять удалённый код путём манипуляции с кэшированными вычислительными графами.

  • Предыдущая реализация кэшировала вычислительные графы для каждого устройства, чтобы избежать повторной отправки тензорных данных во время операций GRAPH_RECOMPUTE.
  • Эти кэшированные узлы содержали прямые указатели на буферы бэкенда; если буфер освобождался через FREE_BUFFER, последующее повторное выполнение обращалось к висячим указателям.
  • Атакующие могли изменять форму блоков памяти с помощью команд ALLOC_BUFFER и SET_TENSOR, чтобы утечь адреса libc и перехватить vtable интерфейса буфера.
  • Патч отбрасывает все кэшированные графы в free_buffer(), заставляя клиента вернуться к GRAPH_COMPUTE при следующем вызове.

Это обновление предотвращает эксплуатации удалённого выполнения кода, нацеленные на RPC-сервер llama.cpp, без необходимости каких-либо изменений протокола или API.