Alat pembangun · JWT penyahkod
Alg:none Serangan dan Kekeliruan Utama: Mengapa Pengesah Mesti Semat Algoritma
· Mengapa ia penting
jwt keselamatan kriptografi
Jika pengesah membenarkan token memilih algoritmanya sendiri, penyerang boleh memilih tiada atau menukar RSA dengan HMAC. Siaran ini menerangkan kedua-dua serangan dan peraturan yang menghalangnya.
Token yang mengesahkan dirinya sendiri — cara medan pengepala menjadi permukaan serangan
Label algoritma terletak di dalam input token dikawal penyerang. Jika pengesah menganggap label itu sebagai kebenaran untuk memilih mana-mana mod pengesahan yang tersedia, token mula mempengaruhi peraturan yang digunakan untuk menilai dirinya sendiri. ToolAcre mendedahkan label dengan tepat supaya pengulas dapat melihatnya, tetapi tidak sekali-kali bertindak ke atasnya secara kriptografi.
Arah selamat adalah sebaliknya: konfigurasi perkhidmatan yang dipercayai mentakrifkan keluarga algoritma yang boleh diterima dan kunci yang berkaitan, kemudian pengepala masuk mesti sepadan dengan dasar tersebut. Panel nyahkod tidak boleh membekalkan dasar itu dan tidak boleh disalah anggap sebagai perlindungan semata-mata kerana ia menyerlahkan nilai yang mencurigakan.
Repositori menandakan alg:tiada tetapi tidak menetapkan sejarah spesifikasi di sebalik JWT yang tidak selamat
Pelaksanaan menganggap `alg: none` sebagai perisytiharan yang tidak ditandatangani dan memberi amaran bahawa menerimanya akan menerima kandungan sewenang-wenangnya. Ia juga melaporkan segmen ketiga kosong secara berasingan. Bukti repositori menyokong penolakan input sedemikian dalam aliran kerja yang disahkan; ia tidak mendokumenkan mengapa JWT tidak selamat pada asalnya dimasukkan dalam spesifikasi.
Oleh itu, kata-kata sejarah itu diperbetulkan dan bukannya dicipta. Perkara yang penting dari segi operasi adalah jelas: perkhidmatan yang mengharapkan bukti kelayakan yang ditandatangani tidak boleh membenarkan pengepala token untuk melumpuhkan pemeriksaan tandatangan. ToolAcre sendiri tidak melakukan pengesahan, jadi keupayaannya untuk memaparkan `none` adalah pengesanan untuk pemeriksaan sahaja.
Serangan alg:none — menanggalkan tandatangan dan meminta pengesah menerima tandatangan kosong
Serangan yang tidak ditandatangani menukar pengepala untuk meminta `none`, menukar tuntutan jika dikehendaki dan tidak membekalkan bait tandatangan. Setiap segmen masih boleh sah dari segi sintaksis, dan dua yang pertama menyahkod menjadi JSON yang digilap. Pengesah permisif akan menukar pilihan penyerang kepada pintasan pengesahan.
Pengesah yang ketat tidak mempunyai cawangan yang meningkatkan input ini kepada status yang dipercayai apabila token yang ditandatangani diperlukan. Amaran ToolAcre membantu mengenal pasti bentuk semasa nyahpepijat, tetapi membaca perkataan `none` tidak menghalang bahagian belakang daripada membuat keputusan yang salah. Penguatkuasaan adalah milik tempat kelayakan digunakan.
Kekeliruan kunci — mempersembahkan kunci awam sebagai rahsia HMAC supaya token RS256 disahkan sebagai HS256
Kekeliruan utama timbul apabila pengesah membenarkan keluarga algoritma dengan peranan utama yang tidak serasi dan gagal untuk mengikat setiap pilihan kepada jenis kunci yang betul. Kunci pengesahan RSA awam bukan rahsia HMAC. Menganggap baitnya sebagai satu selepas penyerang menukar label algoritma meruntuhkan pemisahan public/private yang dimaksudkan.
Mencegah kelas ralat itu memerlukan lebih daripada menyemak segmen berbentuk tandatangan. Perkhidmatan mesti menggandingkan algoritma yang diharapkan, jenis kunci, pengeluar dan profil token melalui konfigurasi yang dipercayai. Penyahkod yang menunjukkan RS256 atau HS256 tidak dapat mengetahui sama ada bahagian belakang mengekalkan pengikatan tersebut.
Pembetulan — sematkan algoritma yang diterima dalam pengesah dan jangan sekali-kali mendapatkannya daripada token
Sematkan algoritma yang diterima dalam konfigurasi pengesah dan pastikan senarai itu sempit seperti yang dibenarkan oleh kontrak pengeluar. Tolak `none` untuk aliran bukti kelayakan yang ditandatangani dan tolak ketidakpadanan daripada mencuba algoritma lain. Jangan dapatkan senarai benar daripada pengepala yang tidak disahkan atau daripada tuntutan muatan.
Carian kunci mengikut prinsip yang sama. A `kid` boleh memilih antara calon yang sudah dipercayai, tetapi tidak boleh mencipta sumber amanah baharu. URL pengepala atau kunci terbenam tidak boleh diikuti semata-mata kerana token memintanya. Pengesah memutuskan sumbernya secara bebas.
Contoh yang berkesan — membaca pengepala dalam penyahkod ToolAcre JWT untuk melihat alg:none, dan mengapa mengesannya tidak sama dengan dilindungi
Buat pengepala token tidak berbahaya yang mengisytiharkan `none` dan biarkan segmen ketiga kosong. ToolAcre menyahkod JSON, melaporkan algoritma yang diisytiharkan, memberi amaran bahawa ia tidak ditandatangani dan mencatatkan tandatangan yang tidak hadir. Ini betul-betul tingkah laku yang diharapkan daripada alat pemeriksaan.
Latihan itu tidak membuktikan bahawa API menolak token. Sahkan itu secara berasingan dengan ujian negatif terkawal terhadap pengesah dan konfigurasi sebenar. Jika API menerimanya, pembetulan itu tergolong dalam sempadan pengesahan itu; menambahkan amaran yang lebih kuat pada penyahkod tidak akan melindungi permintaan.
Perkara yang tidak dilindungi ini — banyak pembetulan khusus perpustakaan; rujuk RFC 8725 dan log perubahan pustaka anda
API Perpustakaan, lalai dan pembetulan sejarah berbeza mengikut produk dan versi. Modul ini tidak menetapkan nama pilihan yang menyematkan algoritma dalam timbunan anda, dan artikel ini dengan sengaja tidak mencipta satu pun. Baca dokumentasi semasa pustaka dan log perubahan, kemudian lakukan kes penolakan dalam suite ujian anda sendiri.
Uji juga jenis kunci yang salah, nilai `kid` yang tidak diketahui, tandatangan hilang dan profil token yang tidak dijangka. Matlamatnya adalah untuk menunjukkan bahawa konfigurasi memenangi cadangan token. Penyahkod yang berjaya tidak termasuk dalam pernyataan penerimaan ini kerana kejayaan sintaks serasi dengan setiap contoh yang berniat jahat.
Bawa pulang: pengesah yang memutuskan, bukan token — penyahkod membantu anda melihat pengepala, tetapi sahaja pengesahan yang disematkan melindungi anda
Pengesah memutuskan; token tidak. ToolAcre boleh mendedahkan pengepala yang menyatakan `none`, algoritma yang tidak dikenali atau pengecam kunci yang mengejutkan. Keterlihatan itu membantu percubaan, tetapi sahaja menyematkan dasar algoritma dan kunci dipercayai terikat dengan betul menghalang penerimaan.
Jangan sekali-kali mengesyorkan mendayakan `none`, memilih kunci pengesahan daripada pengepala yang tidak dipercayai atau menganggap panjang tandatangan yang dipaparkan sebagai pengesahan. Nyahkod untuk pemeriksaan, kemudian buktikan kelakuan penolakan dan penerimaan di sempadan kriptografi sebenar dengan ujian terkawal.