Etkilenen sürümler ve kapsam
| Sürüm hattı | Etkilenen | Düzeltilen |
|---|---|---|
| 1.x | 1.9.1 – 1.29.1 | 1.30.0 |
| 2.x | 2.0.0 – 2.1.1 | 2.2.0 |
Açık yalnızca HTTP üzerinden bağlanan MCP istemcilerini etkiliyor. SDK ile yazılmış MCP sunucuları, stdio istemcileri ve token'ı önceden uygulamaya eklenmiş yapılar etkilenmiyor. Bültene göre etkilenen OAuth sağlayıcıları şunlar:
- OAuthClientProvider
- ClientCredentialsOAuthProvider
- PrivateKeyJWTOAuthProvider
- RFC7523OAuthClientProvider (1.x hattında, kullanımdan kaldırılmış)
Önem derecesi, sağlayıcının çalışma biçimine göre değişiyor: kullanıcı onayı gerektirmeyen sağlayıcılar için CVSS 7,5, kullanıcı onayı gerektiren etkileşimli sağlayıcılar için 6,5.
Açık nasıl çalışıyor?
Bir MCP istemcisi oturum açmak istediğinde, bağlandığı MCP sunucusuna yetkilendirme sunucusunun (authorization server) nerede olduğunu sorar. Etkilenen sürümlerde SDK bu yanıtı her zaman doğrulamıyordu. GitHub bülteni kök nedeni iki noktada topluyor: yetkilendirme sunucusu meta verisindeki issuer değeri her keşif yolunda doğrulanmıyordu ve istemci kimlik bilgileri, amaçlanan yetkilendirme sunucusuna bağlanmamıştı.
Cycode'un anlatımına göre kötü amaçlı sunucu, keşif sırasında bir 404 yanıtı döndürerek issuer doğrulamasının atlanmasını sağlayabiliyor; çünkü doğrulama yalnızca keşif verisi geldiğinde çalışıyordu. Sonrasında sunucu, istemciyi saldırganın seçtiği bir token uç noktasına yönlendirebiliyor.
Kullanıcının gördüğü oturum açma sayfası ise gerçek sağlayıcının sayfası olduğu için ortada şüpheli bir işaret olmuyor. Kullanıcı gerçek sayfada onay veriyor, ancak arka planda istemci, kimlik bilgilerini saldırganın uç noktasına gönderiyor. Cycode bu durumu "tamamen normal görünen bir oturum açma sayfası (çünkü gerçek sayfa bu)" diye özetliyor.
Sızdırılabilen bilgiler
- İstemci sırrı (client secret): uzun ömürlü; değiştirilene kadar geçerli kalıyor.
- Yetkilendirme kodu (authorization code)
- PKCE doğrulayıcısı (code_verifier): PKCE'nin tekrar saldırılarına karşı sağladığı korumayı boşa çıkarıyor.
Bu üç bilgiyle saldırgan, gerçek yetkilendirme sunucusundan geçerli bir erişim token'ı isteyebiliyor; elde edilen token, uygulamaya verilmiş tüm izinleri taşıyor. Cycode ayrıca çalınan kimlik bilgileri için hedef kitle (audience) kısıtı bulunmadığını, bunun yalnızca modern keşif yolunda uygulandığını belirtiyor.
Kapı kilidi anahtar deliğinden bir ayrıntı. Fotoğraf: José Miguel S, Wikimedia Commons, CC0. Olayın kendisine ait bir kare değildir.
Gerçekçi saldırı senaryoları
Cycode, kötü amaçlı bir sunucuya bağlanma olasılığının şu yollarla ortaya çıkabileceğini belirtiyor:
- Yazım hatasına dayalı (typosquatting) sahte MCP dizin kayıtları
- Yapay zekâ ajanlarının prompt injection ile kötü amaçlı bir sunucuya bağlanmaya yönlendirilmesi
- DNS ele geçirme ile trafiğin saldırgan altyapısına çevrilmesi
Ne yapmalı?
- Python SDK'yı 1.x hattında 1.30.0, 2.x hattında 2.2.0 veya üstüne yükseltin.
- ClientCredentialsOAuthProvider ve PrivateKeyJWTOAuthProvider kullanıyorsanız meşru yetkilendirme sunucusunu belirten issuer= parametresini açıkça verin. Bu parametre olmadan bu iki sağlayıcı sunucunun yönlendirdiği uç noktaları izlemeye devam ediyor.
- Daha önce saklanmış OAuth istemci kayıtlarını bir kez temizleyin, böylece kayıtlar yeniden yapılır.
- Güvenilmeyen bir MCP sunucusuna bağlandıysanız yetkilendirme sunucusunda istemci sırlarını yenileyin ve mevcut token'ları iptal edin.
- MCP sunucularını yalnızca doğrulanmış kaynaklardan ekleyin ve bağlanılan sunucu listesini denetleyin.
MCP ekosistemi, yapay zekâ ajanlarının harici araçlara ve verilere bağlanma biçimini hızla standartlaştırıyor. Bu olay, ajanın hangi sunucuya bağlandığına ve o sunucunun hangi kimlik doğrulama uç noktasını göstereceğine dair doğrulamaların istemci tarafında da titizlikle yapılması gerektiğini gösteriyor.
Kapak fotoğrafı: Bir YubiKey USB güvenlik anahtarı. Fotoğraf: Tony Webster, Wikimedia Commons, CC BY 2.0. Olayın kendisine ait bir kare değildir.
Kaynaklar
- GitHub güvenlik bülteni: https://github.com/modelcontextprotocol/python-sdk/security/advisories/GHSA-qx49-fqc8-xw99
- Cycode: https://cycode.com/blog/mcp-python-sdk-oauth-account-takeover/
- The Hacker News: https://thehackernews.com/2026/09/official-mcp-python-sdk-flaw-can-let.html
TR Siber Ekibi