В официальном MCP Python SDK нашли OAuth уязвимость, позволяющую вредоносному MCP серверу перехватить
client_secret, authorization code и даже PKCE code_verifier.⚙️ Как ломается OAuth
При подключении MCP клиент должен определить authorization server и проверить его
issuer.В SDK существовал fallback сценарий. Вредоносный MCP сервер возвращает
404 на запрос современного discovery. Клиент переключается на старый механизм и получает OAuth metadata непосредственно от MCP сервера. Проверка issuer в этом сценарии пропускалась.Атакующий указывает настоящий Identity Provider в качестве
authorization endpoint, а собственный сервер в качестве token endpoint.Пользователь попадает на настоящий экран входа и проходит обычную авторизацию. Identity Provider возвращает валидный authorization code.
После этого SDK отправляет на подменённый
token endpoint сразу три компонента:🔑
client_secret🎫 authorization code
🔐 PKCE
code_verifierАтакующий получает полный набор данных, необходимый для завершения OAuth flow.
💣 PKCE уже не спасает
Полученные code,
code_verifier и client_secret отправляются настоящему authorization server. В ответ атакующий получает легитимный access token с правами жертвы.Cycode продемонстрировали эту цепочку end to end против реального authorization server с включённым PKCE.
Для AI агентов появляется ещё один сценарий. Prompt injection потенциально способен направить агента к вредоносному MCP серверу, хотя пользователь сам его не выбирал.
🔗 Исследование: Cycode
Stay secure and read SecureTechTalks 📚
#кибербезопасность #AISecurity #MCP #OAuth #AIAgents #AccountTakeover #PKCE #LLMSecurity #AppSec #SecureTechTalks
