![]() |
![]() |
![]() |
|||||
![]() |
Эксплуатация переполнения кучи в Llama.cpp |
||||||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ Атаки на ИИ Внедрение ИИИИ теория Компьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Промпты. Генеративные запросы Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2025-04-04 13:10 В этом посте я расскажу об уязвимости удалённого выполнения кода (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 Комментарии: |
||||||