نگهداران SDK رسمی پایتون برای پروتکل Model Context Protocol (MCP) در یک هشدار امنیتی اعلام کردند که یک سرور MCP مخرب میتواند اپلیکیشنهای ساخته شده با این SDK را فریب دهد تا اعتبارنامههای OAuth مورد استفاده برای ورود به سرویسهای واقعی را لو دهند.
جزئیات فنی آسیبپذیری
در نسخههای آسیبپذیر، SDK مقادیر client secret، authorization code و PKCE proof key را به یک Token Endpoint که تحت کنترل مهاجم است ارسال میکرد. این نقص امنیتی به عامل تهدید (Threat Actor) اجازه میدهد تا با استفاده از این اطلاعات، یک Access Token معتبر از سرویس ورود واقعی درخواست کند.
پروتکل MCP یک استاندارد باز برای اتصال اپلیکیشنهای هوش مصنوعی (AI) به ابزارها و دادههای خارجی است و این بسته، SDK رسمی پایتون برای ساخت سرورها و کلاینتهای MCP محسوب میشود.
تحلیل ریسک و شدت
- شدت (Severity): برای ارائهدهندگانی که بدون حضور کاربر (Machine-to-Machine) عمل میکنند، امتیاز 7.5 (High) و برای ارائهدهندگانی که نیاز به تایید کاربر دارند (Interactive)، امتیاز 6.5 تعیین شده است.
- تاثیر: توکنهای بهدستآمده دارای هر دسترسی است که به اپلیکیشن اعطا شده بود. همچنین به دلیل طولانی بودن عمر client secret، این دسترسی تا زمان تغییر آن باقی میماند.
مکانیسم حمله
زمانی که یک کلاینت MCP نیاز به ورود دارد، از سروری که به آن متصل شده میپرسد که سرویس احراز هویت (Authorization Server) در کجا قرار دارد. در نسخههای آسیبپذیر، SDK همواره پاسخ سرور را بررسی نمیکرد. یک سرور مخرب میتوانست کلاینت را به یک سرویس ورود جعلی هدایت کند یا در حالی که جزئیات ورود سرویس واقعی را ارائه میداد، اعتبارنامهها را به جای دیگری ارسال کند.
در حالت تعاملی، کاربر همچنان باید ورود را تایید کند، اما از آنجایی که صفحه تایید همان صفحه واقعی است، هیچ نشانه مشکوکی برای کاربر وجود ندارد.
راهکارهای اصلاحی و بهروزرسانی
برای رفع این مشکل، کاربران باید به نسخههای 1.30.0 (برای سری 1.x) یا 2.2.0 (برای سری 2.x) ارتقا دهند. در نسخههای جدید، کلاینت پیش از دریافت هرگونه جزئیاتی، سرویس ورود مورد انتظار خود را تعیین کرده و هرگونه پاسخی که نام سرویس متفاوتی را ذکر کند، رد میکند.
نکته بسیار مهم: برای کاربران ClientCredentialsOAuthProvider و PrivateKeyJWTOAuthProvider، ارتقای نسخه به تنهایی کافی نیست. باید پارامتر issuer= را برای تعیین دقیق سرویس ورود تنظیم کنید؛ در غیر این صورت، SDK همچنان از آدرس ارسالی توسط سرور MCP پیروی میکند.
اقدامات تکمیلی برای مدیران امنیت
- ثبتهای OAuth کلاینت (Client Registrations) ذخیره شده را یکبار پاک کنید.
- اگر کلاینت احتمالاً به یک سرور غیرقابل اعتماد متصل شده است، client secret را تغییر داده (Rotate) و توکنهای آن را در سرویس ورود ابطال (Revoke) کنید.
- در نسخههای قدیمی، تنها راه پیشگیری، اتصال صرفاً به سرورهای MCP مورد اعتماد است.