Уязвимость в официальном MCP Python SDK позволяет красть OAuth-учётные данные
Сопровождающие официального MCP Python SDK выпустили предупреждение о безопасности: вредоносный MCP-сервер может обманом вынудить приложение, построенное на этом наборе инструментов, передать учётные данные OAuth, которыми оно пользуется для входа в настоящий сервис.
Model Context Protocol (MCP) — открытый стандарт для подключения ИИ-приложений к внешним инструментам и данным, а этот пакет является его официальным Python SDK для создания серверов и клиентов. Уязвимые версии отправляли секрет клиента, код авторизации и доказательный ключ PKCE на конечную точку выдачи токенов, которую контролировал атакующий.
Как крадутся данные
Когда MCP-клиенту нужно войти, он спрашивает у сервера, к которому подключается, где находится его сервер авторизации. В уязвимых версиях SDK не всегда проверял этот ответ. Вредоносный сервер мог указать на сервис авторизации по своему выбору — назвав собственный сервер либо выдав данные, называющие настоящий сервис пользователя, но направляющие учётные данные в другое место.
Клиент затем отправлял секрет, код авторизации и ключ PKCE злоумышленнику вместо реального сервиса. Ключ PKCE — одноразовое значение, призванное не дать повторно использовать украденный код авторизации, так что его передача сводит эту защиту на нет.
Получив учётные данные, атакующий может запросить действительный токен доступа у настоящего сервиса входа. Фирма Cycode, сообщившая об изъяне, продемонстрировала полный обмен в тесте: полученный токен несёт те же права, что были выданы приложению. Секрет клиента долгоживущий и работает, пока его не сменят.
Кого это касается
Уязвимость оценена как высокая (7.5) для двух провайдеров, работающих без участия человека, и в 6.5 для интерактивного, где вход должен начать пользователь. По словам Cycode, в интерактивном случае человек одобряет вход на подлинной странице, поэтому ничего подозрительного не заметно. CVE на 29 сентября не было присвоено.
Под угрозой приложение, использующее SDK как MCP-клиент по HTTP с одним из OAuth-провайдеров (OAuthClientProvider, ClientCredentialsOAuthProvider, PrivateKeyJWTOAuthProvider или устаревший RFC7523OAuthClientProvider) и способное подключаться к неподконтрольному серверу с настоящими учётными данными. MCP-серверы, локальные (stdio) клиенты и клиенты со своими токенами не затронуты.
Что делать
Нужно обновиться до 1.30.0 в ветке 1.x или до 2.2.0 в ветке 2.x. Для ClientCredentialsOAuthProvider и PrivateKeyJWTOAuthProvider одного обновления мало: по словам предупреждения, «обновление ничего не меняет, пока вы не передадите issuer=» с именем нужного сервиса. У устаревшего RFC7523OAuthClientProvider такой опции нет — с него следует уйти.
После обновления стоит один раз очистить сохранённые регистрации OAuth-клиентов, а если клиент мог подключаться к недоверенному серверу — сменить секрет и отозвать токены. Исправления вышли ещё 7 сентября в примечаниях к релизу как «изменения поведения», а предупреждение появилось 28 сентября. Ни Cycode, ни авторы предупреждения не сообщают об атаках с использованием этого изъяна.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.