В Ollama, платформе для запуска больших языковых моделей на собственном оборудовании, нашли уязвимость обхода каталогов. Она позволяет удалённому злоумышленнику без учётной записи записать произвольный файл за пределами хранилища моделей. После перезапуска сервера этот файл загружается и исполняется с правами root, то есть атакующий получает полный контроль над процессом. Проблема описана под идентификатором CVE-2026-103663, исправление вышло в версии 0.35.0. Уязвимы сборки начиная с 0.34.2.
Уязвимость CVE-2026-103663
Загрузка моделей в Ollama идёт через программный интерфейс, а конкретно через метод /api/pull. Каждая модель собирается из слоёв, и каждый слой описан дайджестом, короткой строкой, по которой сервер вычисляет, куда положить данные. Внутренняя функция, превращающая дайджест в путь на диске, проверяет эту строку недостаточно строго. Если подставить в неё последовательность переходов вверх по дереву каталогов, сервер запишет файл туда, куда указывает получившийся путь. Хранилище моделей при этом остаётся в стороне, а запись уходит в произвольное место файловой системы. Аутентификация для такого запроса не нужна, поэтому достаточно одного сетевого обращения.
Обход каталогов относится к старым и хорошо изученным классам ошибок. Приложение получает от пользователя строку, подставляет её в путь к файлу и не проверяет, остался ли итоговый путь внутри разрешённой папки. Переходы вверх по дереву поднимают обработчик на уровень выше, и запись оказывается за границей хранилища. В случае Ollama роль такой строки играет дайджест слоя, который сервер трактует как внутренний идентификатор, а не как пользовательский ввод. Отсюда и обе слабости сразу: и недостаточная проверка значения, и доверие к нему как к чему-то заведомо корректному.
Развитие атаки зависит от прав процесса. В большинстве официальных образов Ollama для Docker серверный процесс может писать в каталог /usr/lib/ollama, где лежат его собственные компоненты. Туда и попадает файл злоумышленника. Следующий запуск сервера загружает этот файл и выполняет его от имени root. Одна ошибка проверки пути даёт выполнение произвольного кода с наивысшими правами. Заметить подмену непросто: имя файла может выглядеть правдоподобно, а в журналах останется лишь обычный запрос на загрузку модели.
Контейнер обычно считают дополнительным барьером, и в этом сценарии он не спасает. Файл записывается внутрь контейнера, где права root значат много: процесс может менять собственные компоненты, читать смонтированные тома и обращаться к сети, к которой подключён. Изоляция сужает ущерб, но не отменяет его, если контейнер запущен с расширенными правами или с проброшенными каталогами хоста. Момент исполнения зависит от графика перезапусков. Контейнеры поднимают заново при обновлении образа, при сбое и при переезде на другой узел, поэтому ожидание может оказаться коротким. Оркестраторы нередко перезапускают упавший контейнер автоматически, и тогда сам факт перезапуска ничего не говорит о попытке атаки.
Ollama часто разворачивают внутри компаний для экспериментов, внутренних чат-ботов и обработки документов. Интерфейс по умолчанию не требует аутентификации, так что отправить запрос может любой, кто видит порт сервиса в сети. Если порт проброшен наружу или доступен из смежного сегмента, для атаки не нужны ни учётные данные, ни действия пользователя. В записи CVE нет данных об эксплуатации в реальных атаках. Хуже другое: записанный файл остаётся на диске и после обновления, если контейнер не пересобрать. Обновление меняет код сервера, но не удаляет чужой бинарник, который уже лежит рядом с ним.
CERT.PL, координировавший выпуск исправления, приводит две оценки по шкале CVSS 4.0: 6.9 из 10 и 9.4 из 10. Первая описывает сценарий с ограниченным влиянием, когда последствия сводятся к записи файла. Вторая учитывает полный захват сервера и связанных с ним систем через выполнение кода. Классификаторы относят проблему к относительному обходу каталогов (CWE-23) и к некорректному контролю динамически управляемых ресурсов кода (CWE-913). Запись опубликована 8 октября 2026 года и в тот же день обновлена.
Обновление до 0.35.0 закрывает уязвимость. Тем, кто не может перейти на новую версию сразу, разумно убрать API из общего доступа. Оставить сервис на локальном интерфейсе или в доверенной сети. Помогает запуск контейнера от непривилегированного пользователя и отзыв права записи в каталог с исполняемыми файлами. Проверьте содержимое /usr/lib/ollama на незнакомые файлы, а журналы - на обращения к методу /api/pull из нетипичных адресов. Сверить контрольные суммы файлов с эталонным образом получится быстрее, чем разбирать каждый файл вручную. Если запись уже могла произойти, надёжнее пересобрать контейнер из чистого образа, чем удалять один файл. Полного списка признаков компрометации в записи CVE нет, поэтому опираться придётся на собственные наблюдения за файловой системой и сетью.
Инструменты для работы с языковыми моделями развиваются быстрее, чем их защита. Ollama задумана для локального запуска, но на практике её всё чаще выставляют в сеть. Там отсутствие аутентификации и слабая проверка входных данных складываются в общий сценарий. Одного неверно оформленного дайджеста достаточно, чтобы потерять контроль над сервером после его перезапуска. Обновление до 0.35.0 и закрытый снаружи API убирают большую часть риска. Такие сервисы пока небезопасны по умолчанию, и развёртывание внутри доверенного периметра остаётся обязательным условием.
Ссылки