MCP-серверы при перезапуске подтягивают новые зависимости

Исследователи проверили, как AI-ассистенты запускают MCP-серверы, и нашли риск в цепочке поставок: сервер выглядит закреплённым на конкретную версию, но при каждом перезапуске подтягивает свежие зависимости из публичных реестров. Затронуты прежде всего рабочие станции администраторов, где такой сервер получает доступ к системам управления. Ассистент запускает сервер сам, поэтому состав пакетов меняется без команды установки.

MCP - протокол, по которому AI-ассистент обращается к внешним инструментам и данным. Сервер на его основе принимает запросы ассистента и работает с внешними системами от имени пользователя. Список зависимостей он получает из публичного реестра - хранилища готовых библиотек, откуда их скачивают при установке. Установку сервер проходит автоматически, в момент первого обращения к инструменту, и обновления при старте проверяет тоже сам.

В лаборатории один такой сервер запускали средством uvx из конкретного коммита. Автор закрепил семь прямых зависимостей и опубликовал lock-файл с хешами - файл, который фиксирует точные версии пакетов. Средство запуска этот файл игнорировало и при каждом старте разрешало заново около 60 транзитивных пакетов, то есть зависимостей зависимостей.

Из 69 пакетов 23 сменили версии, в том числе cryptography, библиотека для работы с JWT и MCP SDK. За пять недель сервер пересобрался 19 раз и дал 15 разных окружений при неизменной конфигурации.

Риск не ограничен Python. Часть прокси для hosted MCP-серверов, то есть размещённых у провайдера, запускают через npx с тегом latest, а отдельные инструкции предлагают отключить проверку TLS для всего процесса. По данным компании Corelight, это не уязвимость протокола, а выбор в конфигурации или в инструкции по установке.

Из 35 проверенных серверов 23 рекомендовали установку, которая разрешает зависимости из публичного реестра. Загруженный пакет попадает в процесс сервера и получает его доступ, включая права на внешние системы. Проблема в том, как авторы описывают установку, а не в самом протоколе.

На рабочей станции администратора серверы за неделю сделали более 1600 подключений к 11 системам управления, среди них firewall, SIEM и управление сенсорами. Сеть показывает, какие хосты обращаются к GitHub и PyPI, а EDR - какой процесс это делает. На стенде сетевая телеметрия дала несколько кандидатов, но по правам доступа первой стала рабочая станция администратора. Установленные версии подтвердили расхождение: за 30 дней на один сервер пришлось от 17 до 21 пересборки.

Мера защиты - заморозить окружение: закрепить коммит, поставить пакеты из lock-файла с проверкой хешей в отдельное окружение, запускать сервер напрямую и отключить проверку обновлений при старте. Пять серверов, замороженных так, запускались 457 раз за две недели, и список пакетов не изменился. Заморозка не снимает вопрос актуальности: 40 пакетов в одном сервере были старше, чем предлагало средство запуска. Обновления придётся пересобирать и проверять по расписанию, а как часто такие пересборки идут за пределами лабораторного стенда, пока не установлено.

Практический вывод для компаний: AI-ассистент с MCP-сервером фактически становится привилегированным пользователем сети. Проверять стоит не только версию самого сервера, но и то, какой процесс его запускает, откуда он тянет пакеты и какие учётные данные получает. Если сервер запускается через uvx или npx, закрепление версии в конфиге не гарантирует, что зависимости не изменятся при следующем старте.

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