Эксплуатация переполнения кучи в Llama.cpp

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


В этом посте я расскажу об уязвимости удалённого выполнения кода (RCE), которую я обнаружил llama-rpc, популярном проекте, использующем API LLaMA.cpp с функцией автозаполнения.

Обзор

llama-rpc — это простой RPC-сервер на основе WebSocket, разработанный для взаимодействия с LLaMA.cpp. Он позволяет отправлять запросы на генерацию текста и получать ответы через WebSocket API.

Во время изучения проекта я заметил, что он поддерживает загрузку пользовательских моделей и конфигураций через HTTP API. Это потенциально опасно, если сервер обрабатывает пользовательские пути без должной фильтрации или защиты.

Уязвимость

Во время анализа кода llama-rpc я нашёл следующий фрагмент в обработчике /v1/chat/completions:

prompt = data.get("prompt", "")

response = subprocess.run(

["llama", "--model", model_path, "--prompt", prompt],

capture_output=True,

)

Здесь prompt напрямую передаётся в subprocess.run без какой-либо очистки. Это означает, что если пользователь сможет управлять содержимым prompt, он может инжектить произвольные команды shell.

Эксплуатация

Предположим, что сервер доступен по сети и вы можете отправлять HTTP-запросы. Вы можете сформировать следующий запрос:

{

"prompt": ""; touch /tmp/pwned; echo ""

}

Это приведёт к выполнению команды touch /tmp/pwned на сервере — классический пример RCE.

Исправление

Очевидный способ защиты — никогда не использовать subprocess с небезопасными данными без очистки. Вместо этого лучше использовать subprocess.run с передачей аргументов как списка и без shell=True.

Также стоит избегать прямого использования пользовательских данных в системных вызовах. Лучше применять строгую валидацию ввода и использовать безопасные API.

https://retr0.blog/blog/llama-rpc-rce


Источник: retr0.blog

Комментарии: