Saldırgan Etkisi
Uygun olmayan JWT doğrulaması, saldırganların sahte iddialar oluşturarak veya süresi dolmuş [S1] belirteçlerini yeniden kullanarak kimlik doğrulama mekanizmalarını atlamasına olanak tanır. Bir sunucu, geçerli bir imza olmadan belirteçleri kabul ederse, saldırgan, ayrıcalıkları yükseltmek veya herhangi bir [S1] kullanıcısının kimliğine bürünmek için veri yükünü değiştirebilir. Ayrıca, süre sonu (exp) talebinin uygulanmaması, bir saldırganın güvenliği ihlal edilmiş bir jetonu süresiz olarak [S1] kullanmasına olanak tanır.
Temel Neden
JSON Web Token (JWT), dijital olarak imzalanmış veya bütünlük korumalı [S1] taleplerini temsil etmek için kullanılan JSON tabanlı bir yapıdır. Güvenlik hataları genellikle iki temel uygulama açığından kaynaklanır:
- Güvenli Olmayan JWT'lerin Kabulü: Bir hizmet, imza doğrulamasını sıkı bir şekilde zorunlu kılmıyorsa, imzanın olmadığı ve algoritmanın "yok" [S1] olarak ayarlandığı "Güvenli Olmayan JWT'leri" işleyebilir. Bu senaryoda sunucu, bütünlüklerini doğrulamadan veri yükündeki taleplere güvenir [S1].
- Eksik Talep Doğrulaması:
exp(son kullanma süresi) talebi, JWT'nin [S1]'yi işlemek için kabul edilmemesi gereken zamanı tanımlar.aud(izleyici) talebi, [S1] belirtecinin amaçlanan alıcılarını tanımlar. Bunlar işaretlenmezse sunucu, süresi dolmuş veya farklı bir [S1] uygulamasına yönelik belirteçleri kabul edebilir.
Beton Düzeltmeleri
- Şifreleme İmzalarını Zorunlu Tutun: Uygulamayı, önceden onaylanmış, güçlü bir imzalama algoritması (RS256 gibi) kullanmayan tüm JWT'leri reddedecek şekilde yapılandırın.
- Son Kullanma Tarihini Doğrulayın: Geçerli tarih ve saatin
exptalebi [S1]'de belirtilen saatten önce olduğundan emin olmak için zorunlu bir kontrol uygulayın. - Kitleyi Doğrulayın:
audtalebinin yerel hizmeti tanımlayan bir değer içerdiğinden emin olun; hizmetaudtalebinde tanımlanmazsa belirtecin [S1] reddedilmesi gerekir. - Yeniden Oynatmayı Önle: Sunucunun yeniden kullanılan [S1] belirteçlerini izlemesine ve reddetmesine olanak tanıyacak şekilde her bir belirtece benzersiz bir tanımlayıcı atamak için
jti(JWT Kimliği) talebini kullanın.
Tespit Stratejisi
JWT işlemedeki güvenlik açıkları, belirteç yapısı ve sunucu yanıt davranışı analiz edilerek belirlenebilir:
- Başlık Denetimi:
alg(algoritma) başlığının "yok" olarak ayarlanmadığından ve [S1] beklenen şifreleme standartlarını kullandığından emin olmak için kontrol ediliyor. - İddia Doğrulaması: JSON yükü [S1] içindeki
exp(son kullanma tarihi) veaud(izleyici) taleplerinin varlığını ve geçerliliğini onaylama. - Doğrulama Testi: Sunucunun,
expiddiasına göre süresi dolmuş veyaaudiddiası [S1] tarafından tanımlandığı şekilde farklı bir hedef kitleye yönelik olan belirteçleri doğru şekilde reddedip reddetmediğini test etme.
