Проект 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.