3 minute read

JSON web tokens (JWTs), sistemler arasında kriptografik olarak imzalanmış JSON verilerini göndermek için standart bir biçimdir. Teorik olarak her türlü veriyi içerebilir ancak en yaygın kimlik doğrulama, oturum açma ve erişim kontrol mekanızmalarının bir parçası olarak kullanıcılar hakkında bilgi göndermek için kullanılmaktadır.

Klasik oturum tokenlarından farklı olarak bir sunucunun ihtiyaç duyduğu tüm veriler, JWT’nin içinde istemci tarafında depolanır. Bu JWT’leri kullanıcıların birden çok backend sunucusuyla sorunsuz bir şekilde etkileşime girmesi gereken yüksek oranda dağıtılmış web siteleri için popüler bir seçim haline getirmektedir.

JWT saldırıları, kötü niyetle hedefe ulaşmak için sunucuya değiştirilmiş JWT’ler gönderen bir güvenlik zafiyetidir. JWT güvenlik zafiyetleri genellikle uygulamanın kendi içindeki hatalı JWT işlemesi nedeniyle ortaya çıkmaktadır. JWT’lerle ilgili çeşitli özellikler tasarım gereği nispeten esnektir ve web sitesi geliştiricilerinin birçok uygulama detayına kendileri için karar vermelerine olanak tanır. Güvenlik zafiyetleri, genellikle JWT’nin imzasınnı doğru şekilde doğrulanmadığı durumlarda ortaya çıkmaktadır. İmza sağlam şekilde doğrulandığı durumlarda ise sunucunun gizli anahtarı doğru bir şekilde saklamasına bağlıdır. Bu anahtar bir şekilde sızarsa saldırgan brute-force saldırıları ile sistemi tehlikeye atabilmektedir.

Lab 1 Lab 2 Lab 3 Lab 4 Lab 5 Lab 6

Lab-1 JWT authentication bypass via unverified signature

Bu laboratuvar, session handling için JWT-based bir mekanizma kullanmaktadır. Uygulamada bulunan kusurlar nedeniyle sunucu aldığı JWT’nin imzasını doğrulamaz. Lab’ın tamamlanması için carlos kullanıcısının silinmesi gerekmektedir.

Request üzerindeki session verisini Burp Suite’in JWT eklentisi ile inceleyerek manipüle edebilmekteyiz. Wiener olarak görüntülenen kullanıcı ismi administrator olarak değiştirildiğinde /admin/delete?username=carlos işlemi gerçekleşmektedir.

image-center

image-center

image-center

Lab-2 JWT authentication bypass via flawed signature verification

Bu laboratuvar, sessiong handling için JWT-based bir mekanizma kullanmaktadır. Sunucu güvenli şekilde yapılandırılmadığından unsigned JWT verilerini kabul etmektedir. Lab’ın tamamlanması için carlos kullanıcısının silinmesi gerekmektedir.

image-center

image-center

image-center

image-center

Lab-3 JWT authentication bypass via weak signing key

Bu laboratuvar, session handling için bir JWT-based mekanizma kullanılmaktadır. Uygulama hem imzalamak hem de doğrulamak için çok zayıf bir secret key kullanmaktadır. Lab’ın tamamlanması için secret key’e brute-force uygulanmalı ve admin paneline ulaşılarak carlos kullanıcısı silinmelidir.

Uygulamadaki session bilgisi JWT ile gönderilmektedir.

image-center

Ancak zayıf bir şifreleme olduğundan brute-force ile secret key tespit edilebilmektedir.

hashcat -a 0 -m 16500 <jwt> <wordlist>

image-center

image-center

Secret key: secret1 olarak tespit edildikten sonra base64-encoded hali BurpSuite aracının JWT Editor Keys eklentisinde bulunan Simetrik key oluşturma kısmında “k” değerine yazılmaktadır.

image-center

GET /admin requesti üzerindeki wiener kullanıcı bilgisi administrator olarak değiştirip, imza olarak da daha önceden secret key ile hazırlanan imza seçilmektedir.

image-center

Değiştirilmiş JWT başarıyla sunucuya gönderilerek carlos kullanıcısı silinmektedir.

image-center

image-center

Lab-4 JWT authentication bypass via jwk header injection

Bu laboratuvar, handling session için JWT-based bir mekanizma kullanmaktadır. Sunucu, JWT headerdaki jwk parametresini desteklemektedir. Bu bazen doğrulama anahtarını doğrudan token’a gömmek için kullanılmaktadır. Ancak sağlanan anahtarın güvenilir bir kaynaktan gelip gelmediğini kontrol etmez. Lab’ın tamamlanması için JWT’nin manipüle edilerek /admin paneline ulaşılıp carlos kullanıcısının silinmesi gerekmektedir.

Burp aracının JWT eklentisinde random bir RSA key oluşturulmaktadır.

image-center

Daha sonrasında admin path’ine erişmek için Attack —> Embedded JWK yapıp kullanıcıyı da wiener’dan administrator olarak değiştirilmektedir.

image-center

Daha sonrasında carlos kullanıcısı silinmektedir.

image-center

image-center

Lab-5 JWT authentication bypass via jku header injection

Bu laboratuvar, handling session için JWT-based bir mekanızma kullanmaktadır. JWT headerdaki jku parametresini desteklemektedir. Ancak anahtar getirilmeden önce sağlanan URL’in güvenilir bir domain’e sahip olup olmadığını kontrol etmez. Lab’ın tamamlanması için carlos kullanıcısının silinmesi gerekmektedir.

Burp aracındaki JWT eklentisini kullanarak JWK formatında bir RSA key oluşturulmaktadır.

image-center

Daha sonrasında oluşturulan RSA’yı “Copy Public Key as JWK” olarak kopyalayıp exploit sunucusuna aşağıdaki gibi eklenmektedir.

image-center

Daha sonrasında kullanıcı administrator, kid değeri rsa’da belirlenen kid değeri ile ve jku değeri exploit sunucusunun URL’i olarak ayarlanmaktadır. Son olarak Sing butonuna tıklayarak oluşturduğumuz RSA seçilmektedir.

image-center

Carlos kullanıcısı silinmektedir.

image-center

image-center

Lab-6 JWT authentication bypass via kid header path traversal

Bu laboratuvar, handling session olarak JWT-based bir mekanızma kullanmaktadır. İmzayı doğrulamak için sunucu, ilgili anahtarı dosya sisteminden getirmek için JWT başlığındaki kid parametresini kullanır. Lab’ın tamamlanması için carlos kullanıcısının silinmesi gerekmektedir.

Bir simetrik key oluşturulmaktadır ve “k” değeri base64 encoded şekilde null olarak bırakılmaktadır.

image-center

Daha sonrasında JWT header bilgisindeki kid değeri path traversal ile /dev/null a yönlendirilmektedir. Kullanıcı ise administrator olarak belirlendikten sonra az önce tasarlanan simetrik key ile imzalanmaktadır.

image-center

Sonuç olarak carlos kullanıcısı silinmektedir.

image-center

image-center