Hooks

Hook jwt: find JWT-verifikation uden fastlåst algoritme

Gennemsøg en kodebase for JWT-verifikation uden fastlåst algoritme, eller vurdér et enkelt kald, fra kommandolinjen.

Hooken jwt markerer JWT-verifikation uden fastlåst algoritme, hullet med algoritmeforvirring, hvor en verifikator stoler på tokenets egen header alg, og verifikation, der er slået helt fra. Den er sprogbevidst og læser hver fil efter dens eget JWT-bibliotek, og den er den deterministiske motor bag specialiseringen federation, som du selv kan køre i tilstanden scan eller check.

Kørsel​

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

Hver linje under Unpinned JWT verification found er et verifikationskald, der ikke sætter nogen tilladelsesliste i algorithms (hvor biblioteket kræver en), accepterer en usikker (none eller en asymmetrisk algoritme blandet med HMAC) eller helt slår signaturtjekket fra, så det stoler på tokenets egen alg. Det er en bekræftet eksponering, så hooken afslutter med en kode forskellig fra nul. En ren kørsel udskriver no unpinned JWT verification found.

Sådan læser du afgørelsen​

AfgørelseBetydning
unpinnedEt verifikationskald uden tilladelsesliste over algoritmer (hvor der kræves en), med en usikker eller med verifikationen slået fra.
safeEt verifikationskald, der fastlåser en sund tilladelsesliste over algoritmer, eller hvis bibliotek fastlåser den implicit.
invalidKodeuddraget indeholder intet genkendeligt verifikationskald at vurdere.

CLI-indstillinger​

IndstillingVærdiBeskrivelse
--patternet kodeuddragTjek ét kald. Gentag for at tjekke flere, én afgørelse pr. linje.
--langet sprogPåkrævet med --pattern: et af javascript, python, go, java, kotlin, php, ruby, rust, csharp.
--diren mappeAfgræns en scanning til en mappe. Kan gentages og kombineres med --file.
--fileen filAfgræns en scanning til en enkelt fil. Kan gentages og kombineres med --dir.

Uden indstillinger scanner den hele projektet. --pattern kræver --lang og kan ikke kombineres med --dir eller --file.

Vælg, hvad den scanner​

Den udelader det, Git ignorerer. For at udelade mere, eller for at scanne det, Git ignorerer, så giv jwt sine egne indstillinger:

npx lagune write add --ignore test/fixtures --checker jwt
{
"checkers": {
"jwt": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}

Konfigurér hooks beskriver alle indstillinger.

Understøttede sprog​

Scanningen læser disse biblioteker, bestemt ud fra filendelsen. Fordi nogle fastlåser algoritmen implicit (en manglende udtrykkelig liste er sund), gælder reglen "ingen tilladelsesliste ⇒ unpinned" kun dér, hvor biblioteket forventer en udtrykkelig liste, så et korrekt konfigureret kald bliver aldrig markeret.

SprogBibliotekMarkerer manglende tilladelsesliste som unpinned?Markerer altid
JavaScript / TypeScriptjsonwebtoken, joseJanone, blanding af asymmetrisk og HMAC
PythonPyJWT, python-joseJa (PyJWT kræver den, python-jose bruger som standard algorithms=None)none, verify_signature: False
Gogolang-jwtJa (uden WithValidMethods)none, ParseUnverified
Rubyruby-jwtJanone, verify = false
Java / Kotlinjjwt, nimbusNej (udledt af nøglen)none, en usigneret eller unsecured parser
PHPfirebase/php-jwtNej (Key bærer algoritmen)none
RustjsonwebtokenNej (Validation kræver en)none, insecure_disable_signature_validation
C#Microsoft.IdentityModelNej (parametre over flere linjer)none, RequireSignedTokens = false
tip

Hooken afgør kun fastlåsningen af algoritmen: tjek af claims, nøgler og flow er vurderinger, som specialiseringen federation stadig dækker.

Ofte stillede spørgsmål

En verifikator, der læser algoritmen fra tokenets header, lader en angriber bytte RS256 ud med HS256 og signere med den offentlige nøgle. At fastlåse en sund tilladelsesliste over algoritmer i koden forhindrer det, og hooken jwt markerer et verifikationskald, der ikke sætter nogen eller sætter en usikker.