FixVibe
Covered by FixVibehigh

JWT Güvenliği: Teminatsız Tokenların Riskleri ve Eksik Talep Doğrulaması

JSON Web Belirteçleri (JWT'ler), taleplerin aktarılması için bir standart sağlar ancak güvenlik, sıkı doğrulamaya dayanır. İmzaların, son kullanma sürelerinin veya hedef kitlelerin doğrulanmaması, saldırganların kimlik doğrulamayı atlamasına veya belirteçleri yeniden oynatmasına olanak tanır.

CWE-347CWE-287CWE-613

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 exp talebi [S1]'de belirtilen saatten önce olduğundan emin olmak için zorunlu bir kontrol uygulayın.
  • Kitleyi Doğrulayın: aud talebinin yerel hizmeti tanımlayan bir değer içerdiğinden emin olun; hizmet aud talebinde 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) ve aud (izleyici) taleplerinin varlığını ve geçerliliğini onaylama.
  • Doğrulama Testi: Sunucunun, exp iddiasına göre süresi dolmuş veya aud iddiası [S1] tarafından tanımlandığı şekilde farklı bir hedef kitleye yönelik olan belirteçleri doğru şekilde reddedip reddetmediğini test etme.