Hook

Hook jwt: deteksi verifikasi JWT tanpa algoritma yang dikunci

Pindai basis kode untuk menemukan verifikasi JWT tanpa algoritma yang dikunci, atau nilai satu panggilan, langsung dari command line.

Hook jwt menandai verifikasi JWT tanpa algoritma yang dikunci, celah algorithm confusion yang membuat verifier memercayai header alg milik token itu sendiri, serta verifikasi yang dimatikan sepenuhnya. Hook ini mengenali bahasa dan membaca setiap file sesuai pustaka JWT bahasanya. Hook ini juga engine deterministik di balik spesialisasi federation, yang bisa Anda jalankan sendiri dalam mode scan atau check.

Menjalankan​

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

Setiap baris di bawah Unpinned JWT verification found adalah panggilan verifikasi yang tidak menetapkan daftar izin algorithms (jika pustakanya memerlukannya), menerima daftar yang tidak aman (none, atau algoritma asimetris yang dicampur dengan HMAC), atau mematikan pengecekan tanda tangan sama sekali, sehingga panggilan itu memercayai alg milik token itu sendiri. Ini adalah paparan yang terkonfirmasi, jadi hook ini keluar dengan kode bukan nol. Proses yang bersih mencetak no unpinned JWT verification found.

Cara membaca putusan​

PutusanArti
unpinnedPanggilan verifikasi tanpa daftar izin algoritma (jika diperlukan), dengan daftar yang tidak aman, atau dengan verifikasi yang dimatikan.
safePanggilan verifikasi yang mengunci daftar izin algoritma yang aman, atau yang pustakanya menguncinya secara implisit.
invalidPotongan kode tidak berisi panggilan verifikasi yang bisa dikenali untuk dinilai.

Opsi CLI​

OpsiNilaiDeskripsi
--patternpotongan kodeMemeriksa satu panggilan. Ulangi untuk memeriksa beberapa, satu putusan per baris.
--langsebuah bahasaWajib bersama --pattern: javascript, python, go, java, kotlin, php, ruby, rust, atau csharp.
--dirdirektoriMembatasi pemindaian ke satu direktori. Bisa diulang dan digabung dengan --file.
--filefileMembatasi pemindaian ke satu file. Bisa diulang dan digabung dengan --dir.

Tanpa opsi apa pun, hook ini memindai seluruh proyek. --pattern memerlukan --lang dan tidak bisa digabung dengan --dir atau --file.

Pilih apa yang dipindai​

Hook ini melewati apa yang diabaikan Git. Untuk melewati lebih banyak, atau untuk memindai apa yang diabaikan Git, beri jwt pengaturannya sendiri:

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

Konfigurasi hook membahas semua pengaturannya.

Bahasa yang didukung​

Pemindaian membaca pustaka berikut, dikenali dari ekstensi file. Karena sebagian pustaka mengunci algoritma secara implisit (tidak adanya daftar eksplisit tetap aman), aturan "tanpa daftar izin ⇒ unpinned" hanya berlaku jika pustakanya mengharapkan daftar eksplisit, sehingga panggilan yang dikonfigurasi dengan benar tidak pernah ditandai.

BahasaPustakaMenandai tidak adanya daftar izin sebagai unpinned?Selalu menandai
JavaScript / TypeScriptjsonwebtoken, joseYanone, campuran algoritma asimetris dan HMAC
PythonPyJWT, python-joseYa (PyJWT mewajibkannya, python-jose secara bawaan memakai algorithms=None)none, verify_signature: False
Gogolang-jwtYa (tanpa WithValidMethods)none, ParseUnverified
Rubyruby-jwtYanone, verify = false
Java / Kotlinjjwt, nimbusTidak (diturunkan dari kunci)none, parser tanpa tanda tangan atau unsecured
PHPfirebase/php-jwtTidak (Key membawa alg-nya)none
RustjsonwebtokenTidak (Validation mewajibkan satu algoritma)none, insecure_disable_signature_validation
C#Microsoft.IdentityModelTidak (parameternya ditulis dalam beberapa baris)none, RequireSignedTokens = false
tip

Hook ini hanya memutuskan soal penguncian algoritma: pengecekan claim, kunci, dan alur adalah soal penilaian yang tetap dicakup oleh spesialisasi federation.

Pertanyaan yang sering diajukan

Verifier yang membaca algoritma dari header token memungkinkan penyerang menukar RS256 dengan HS256 lalu menandatangani token dengan kunci publik. Mengunci daftar izin algoritma yang aman di dalam kode mencegahnya, dan hook jwt menandai panggilan verifikasi yang tidak menetapkan daftar itu atau menetapkan daftar yang tidak aman.