🐹 Mustafa ile Öğreniyorum #24 — API Güvenliğinin Kırılma Noktası: JWT (JSON Web Token) Zafiyetleri Herkese Selamlar, Bugün sizlerle birlikte önce JWT Token nedir ve nasıl kullanılır, bunu işleyeceğiz. Ardından da bu token yapısının en kritik zafiyetlerini konuşacağız. Gelin bakalım neymiş bu JWT (JSON Web Token)? Modern web ve mobil uygulamaların güvenlik görevlisi sayılan, her API isteğinin arkasında sessizce çalışan bir kimlik doğrulama yapısıdır. Dijital dünyada geçici bir "dijital kimlik kartı" veya "pasaport" gibi çalışan JWT'ler, geliştiriciler tarafından doğru yapılandırılmadığında uygulamanın tüm anahtarlarını saldırgana altın tepside sunabilir. Peki bu dijital pasaportlar nasıl tahrif ediliyor ve sistemler nasıl kandırılıyor? En kritik JWT zafiyetlerini adım adım inceleyelim: alg: none İmzası ile Doğrulama Baypası (None Algorithm): JWT yapısı = Header (Başlık) → Payload (Veri) → Signature (İmza) şeklindedir. Header kısmındaki alg alanı, token'ın hangi imzalama algoritmasıyla oluşturulduğunu belirtir ("alg": "HS256" gibi). Eğer uygulama gelen token'ın alg değerine güveniyor ve none algoritmasını kabul edecek şekilde yanlış yapılandırılmışsa, saldırgan algoritmayı "alg": "none" olarak değiştirip imzayı kaldırmayı deneyebilir. Böyle bir doğrulama hatası varsa, Payload içinde değiştirdiği yetkiler (örneğin "admin": true) geçerli kabul edilebilir. Zayıf Secret Anahtarlar ve Offline Cracking: JWT imzaları simetrik algoritmalarla (HS256 vb.) atıldığında, imzayı oluşturmak ve doğrulamak için sunucuda gizli bir anahtar (secret key) tutulur. Eğer geliştirici bu anahtarı "ruhi123", "admin" veya basit bir kelime seçtiyse; saldırgan token'ı kendi bilgisayarına indirip kaba kuvvet (Brute-Force) yani şifre kırma araçlarıyla kolaylıkla bulabilir. Secret ele geçtiği an, saldırgan istediği kullanıcı adına geçerli sahte token'lar üretebilir. Algorithm Confusion (Algoritma Karıştırma Hilesi): Bu zafiyet, asimetrik (RS256 - Public/Private Key) ve simetrik (HS256 - Shared Secret) algoritmaların bir arada yanlış yönetilmesinden doğar. Sistem normalde RS256 kullanıyordur ve token'ı doğrulamak için bir Public Key (Açık Anahtar) yayınlar. Saldırgan Header'daki algoritmayı HS256 olarak değiştirir. Sunucu kendisine gelen token'ı HS256 ile doğrulamaya çalışırken elindeki Public Key'i "secret anahtar" sanarak imza kontrolü yapar. Public Key herkes tarafından bilindiği için, saldırgan sahte token'ı bu anahtarla imzalayıp sunucuyu kolayca kandırır. 📌 Siber Güvenlik Dersi: JWT'ler durumsuz (stateless) yapılardır; yani sunucu her istekte veritabanına bakmak yerine token'ın imzasına güvenir. Bu yüzden alg: none esnekliği kod seviyesinde tamamen engellenmeli, imza doğrulama algoritmaları kesin olarak sabitlenmeli (whitelisting yapılmalı) ve kullanılan secret anahtarlar yüksek karmaşıklıkta (High-Entropy) seçilmelidir. "Bir imzanın varlığı, üzerindeki mührün gerçekliğini ortaya koymaz." 💬 Mustafa soruyor: Siz de projelerinizde JWT kullanırken token doğrulama mekanizmasını kütüphanenin varsayılan ayarlarına mı bırakıyorsunuz, yoksa algoritma ve imza kontrollerini elle sıkılaştıranlardan mısınız? Yorumlarda buluşalım! 👇