EresusSecurity
Advisory içeriklerine dön
ERESUS-ADV-2026-003CriticalCVSS: 9.8

yargi-mcp Üzerinde JWT İmza Doğrulaması Kapalı Olduğu İçin Kritik Kimlik Doğrulama Atlatma

Yayımlandı: 2026-04-04

Özet

Eresus Security araştırmacıları, Türk hukuk veritabanlarına erişim sağlayan açık kaynak Model Context Protocol (MCP) sunucusu yargi-mcp üzerinde kritik bir kimlik doğrulama atlatma zafiyeti tespit etti.

Zafiyet, OAuth callback endpointinin JWT token'ları verify_signature=False ayarıyla decode etmesinden kaynaklanır. Bu davranış, saldırganın herhangi bir imza anahtarıyla sahte token üretmesine, kullanıcı kimliği taklit etmesine, admin scope eklemesine ve korumalı hukuk verisi endpointlerine erişmesine izin verir.

CVE ID: Atama bekleniyor

Etkilenen Sistemler

  • Yazılım: yargi-mcp v0.2.0 (main branch)
  • Dosyalar:
    • mcp_auth_http_simple.py — satır 164
    • mcp_auth_http_adapter.py — satır 203
  • Koşul: ENABLE_AUTH=true ve clerk_backend_api paketi kurulu (CLERK_AVAILABLE=True)

Teknik Detaylar

Zafiyet OAuth /auth/callback endpointinde bulunur. clerk_token query parametresiyle alınan Clerk JWT token'ı, kriptografik imza doğrulaması açıkça kapatılarak decode edilmektedir:

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

Bu satır, JWT tabanlı authentication modelinin temel güvenlik varsayımını devre dışı bırakır. Decode edilen user_id, email ve scopes claim'leri daha sonra güvenilir kabul edilir.

Saldırı Zinciri

  1. Saldırgan rastgele bir signing key ile sub, user_id, email ve scopes claim'leri içeren sahte JWT üretir.
  2. Sahte token /auth/callback?clerk_token=<forged_jwt> endpointine gönderilir.
  3. Sunucu imzayı kontrol etmeden token'ı decode eder ve authorization code üretir.
  4. Saldırgan POST /token endpointinde code exchange yapar.
  5. Sahte JWT geçerli Bearer access_token gibi kullanılabilir.

Etki

CVSS 3.1 Base Score: 9.8 (Critical) Vector: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

  • Kimlik doğrulama atlatma: Saldırgan herhangi bir kimliği sahte token ile taklit edebilir.
  • Yetki yükseltme: admin dahil keyfi scope claim'leri eklenebilir.
  • Yetkisiz veri erişimi: Yargıtay, Danıştay, Anayasa Mahkemesi, KVKK ve BDDK araçları erişilebilir hale gelebilir.
  • Üyelik/ödeme bypass riski: Premium özellikler kullanıcı ID ve scope manipülasyonuyla atlatılabilir.

Çözüm ve Azaltım

  1. mcp_auth_http_simple.py:164 ve mcp_auth_http_adapter.py:203 içindeki verify_signature=False kullanımı kaldırılmalıdır.
  2. JWT imzaları Clerk JWKS endpointi üzerinden doğrulanmalıdır.
  3. issuer, audience ve expiry claim validation zorunlu hale getirilmelidir.
  4. redirect_uri allowlist uygulanmalıdır.
  5. Scope değerleri client tarafından gelen claim'lere göre değil, server-side policy ile doğrulanmalıdır.

Zaman Çizelgesi

| Tarih | Olay | |---|---| | 2026-04-02 | Zafiyet MCP security audit sırasında keşfedildi | | 2026-04-02 | GitHub Issues üzerinden private disclosure talebi iletildi | | 2026-04-02 | Üreticiden GitHub Private Vulnerability Reporting'i açması istendi | | 2026-04-04 | PoC içeren teknik advisory public olarak yayımlandı |

Kaynak Notları

  • GitHub Issue #21 — yargi-mcp
  • RFC 7519 — JSON Web Token (JWT)
  • CWE-345: Insufficient Verification of Data Authenticity
  • CWE-287: Improper Authentication
  • OWASP API Security Top 10 — API2:2023 Broken Authentication

Kredi

Bu zafiyet, proaktif MCP ekosistem güvenlik araştırması sırasında Eresus Security araştırma ekibi tarafından keşfedildi.