Hook'lar

jwt hook'u: algoritması sabitlenmemiş JWT doğrulamasını tespit edin

Kod tabanını algoritması sabitlenmemiş JWT doğrulamasına karşı tarayın ya da tek bir çağrıyı doğrudan komut satırından puanlayın.

jwt hook'u, algoritması sabitlenmemiş JWT doğrulamasını, yani doğrulayıcının token'ın kendi alg başlığına güvendiği algoritma karışıklığı açığını ve tamamen kapatılmış doğrulamayı işaretler. Dile duyarlıdır, her dosyayı kullandığı JWT kütüphanesine göre okur. federation uzmanlığının arkasındaki deterministik motordur ve onu scan veya check modunda kendiniz çalıştırabilirsiniz.

Çalıştırma​

npx lagune read jwt # scans the whole project
npx lagune read jwt --dir src # scans a directory
npx lagune read jwt --file auth.ts # scans a single file

Unpinned JWT verification found altındaki her satır, algorithms izin listesi belirlemeyen (kütüphanenin buna ihtiyaç duyduğu yerde), güvensiz bir liste kabul eden (none ya da HMAC ile karıştırılmış asimetrik bir algoritma) veya imza kontrolünü tamamen devre dışı bırakan bir doğrulama çağrısıdır, dolayısıyla token'ın kendi alg değerine güvenir. Bu doğrulanmış bir açıklık olduğundan hook sıfırdan farklı bir kodla çıkar. Temiz bir çalıştırma no unpinned JWT verification found çıktısını verir.

Kararı nasıl okumalı​

KararAnlamı
unpinnedAlgoritma izin listesi olmayan (gerektiği yerde), güvensiz bir liste kullanan ya da doğrulaması kapatılmış bir doğrulama çağrısı.
safeSağlam bir algoritma izin listesini sabitleyen ya da kütüphanesi bunu örtük olarak sabitleyen bir doğrulama çağrısı.
invalidKod parçası, değerlendirilebilecek tanınır bir doğrulama çağrısı içermiyor.

CLI seçenekleri​

SeçenekDeğerAçıklama
--patternbir kod parçasıTek bir çağrıyı kontrol eder. Birkaçını kontrol etmek için tekrarlayın, her satıra bir karar düşer.
--langbir dil--pattern ile zorunludur: javascript, python, go, java, kotlin, php, ruby, rust, csharp dillerinden biri.
--dirbir dizinTaramayı bir dizinle sınırlar. Tekrarlanabilir ve --file ile birleştirilebilir.
--filebir dosyaTaramayı tek bir dosyayla sınırlar. Tekrarlanabilir ve --dir ile birleştirilebilir.

Seçenek verilmezse tüm proje taranır. --pattern, --lang gerektirir ve --dir ya da --file ile birleştirilemez.

Desteklenen diller​

Tarama bu kütüphaneleri dosya uzantısına göre tanıyarak okur. Bazıları algoritmayı örtük olarak sabitlediğinden (açık bir listenin olmaması orada sağlamdır), "izin listesi yok ⇒ unpinned" kuralı yalnızca kütüphanenin açık bir liste beklediği yerde uygulanır, böylece doğru yapılandırılmış bir çağrı asla işaretlenmez.

DilKütüphaneİzin listesinin yokluğunu unpinned olarak işaretler mi?Her zaman işaretler
JavaScript / TypeScriptjsonwebtoken, joseEvetnone, asimetrik algoritmanın HMAC ile karıştırılması
PythonPyJWT, python-joseEvet (PyJWT bunu zorunlu tutar, python-jose varsayılan olarak algorithms=None kullanır)none, verify_signature: False
Gogolang-jwtEvet (WithValidMethods yoksa)none, ParseUnverified
Rubyruby-jwtEvetnone, verify = false
Java / Kotlinjjwt, nimbusHayır (anahtardan türetilir)none, imzasız ya da unsecured bir ayrıştırıcı
PHPfirebase/php-jwtHayır (algoritmayı Key taşır)none
RustjsonwebtokenHayır (Validation bunu zorunlu tutar)none, insecure_disable_signature_validation
C#Microsoft.IdentityModelHayır (çok satırlı parametreler)none, RequireSignedTokens = false
ipucu

Hook yalnızca algoritmanın sabitlenmesine karar verir: claim, anahtar ve akış kontrolleri, değerlendirme gerektiren konulardır ve onları federation uzmanlığı kapsamaya devam eder.

Sıkça sorulan sorular

Algoritmayı token başlığından okuyan bir doğrulayıcı, saldırganın RS256'yı HS256 ile değiştirip açık anahtarla imzalamasına izin verir. Kodda sağlam bir algoritma izin listesini sabitlemek bunu önler. jwt hook'u ise hiç izin listesi belirlemeyen ya da güvensiz bir liste belirleyen bir doğrulama çağrısını işaretler.