4 poin oleh GN⁺ 2024-04-16 | 4 komentar | Bagikan ke WhatsApp

Kerentanan pembuatan tanda tangan kunci privat ECDSA kurva NIST P521 pada alat PuTTY

  • Semua versi PuTTY dari 0.68 hingga 0.80 memiliki kerentanan serius pada kode yang membuat tanda tangan dari kunci privat ECDSA yang menggunakan kurva NIST P521
    • Terjadi saat PuTTY atau Pageant membuat tanda tangan dari kunci ketika melakukan autentikasi ke server SSH
    • Kerentanan ini telah diberi CVE-2024-31497
    • Ditemukan oleh Fabian Bäumer dan Marcus Brinkmann dari Ruhr University Bochum

Dampak kerentanan

  • Dampak dari kerentanan ini adalah tereksposnya kunci privat
    • Jika penyerang memiliki puluhan pesan yang telah ditandatangani dan kunci publik, itu sudah cukup untuk memulihkan kunci privat
    • Dengan demikian, penyerang dapat memalsukan tanda tangan seolah-olah sebagai pengguna dan masuk ke semua server yang menggunakan kunci tersebut
  • Untuk mendapatkan tanda tangan tersebut, penyerang hanya perlu untuk sementara mengompromikan server yang diautentikasi menggunakan kunci itu, atau memiliki akses sementara ke salinan Pageant yang memegang kunci tersebut
    • Namun, tanda tangan ini tidak terekspos kepada penyadap pasif pada koneksi SSH
  • Jika Anda memiliki jenis kunci ini, disarankan untuk segera mencabutnya
    • Anda harus menghapus kunci publik lama dari semua file authorized_keys OpenSSH dan file serupa pada server SSH lain agar tanda tangan dari kunci yang telah dikompromikan tidak lagi bernilai
    • Setelah itu, buat pasangan kunci baru untuk menggantikannya

Jenis kunci yang terdampak

  • Satu-satunya jenis kunci yang terdampak adalah ECDSA 521-bit
    • Pada PuTTYgen di Windows, ecdsa-sha2-nistp521 akan muncul di awal kotak 'Key fingerprint', atau dijelaskan sebagai 'NIST p521' saat dimuat ke Pageant di Windows, atau merupakan kunci dengan ID yang diawali ecdsa-sha2-nistp521 dalam protokol SSH atau file kunci
    • ECDSA dengan ukuran lain dan algoritma kunci lain tidak terdampak
    • Secara khusus, Ed25519 tidak terdampak

Detail kesalahan

  • Semua skema tanda tangan DSA harus menghasilkan nilai acak selama proses penandatanganan
    • Ini dikenal sebagai nonce (istilah kriptografi yang berarti nilai yang hanya digunakan sekali) atau dengan huruf k
  • Sudah diketahui luas bahwa jika penyerang dapat menebak nilai k yang digunakan, atau menemukan dua tanda tangan yang dibuat dengan k yang sama, maka kunci privat dapat segera dipulihkan
    • Oleh karena itu, membuat tanda tangan DSA pada sistem yang tidak memiliki sumber keacakan berkualitas tinggi adalah berisiko
  • Karena PuTTY dikembangkan di Windows, awalnya tidak ada generator bilangan acak kriptografis sama sekali
    • Karena itu, PuTTY telah menghasilkan k dengan metode deterministik tanpa menggunakan bilangan acak sama sekali
    • Teknik intinya adalah menghitung hash aman yang memasukkan baik pesan yang akan ditandatangani maupun kunci privat sebagai input hash
  • Teknik ini kini telah menjadi arus utama, dan RFC 6979 mendokumentasikan metode yang spesifik dan terkenal untuk melakukannya
    • Namun, karena PuTTY telah melakukan hal yang sama sejak 2001 dan RFC tersebut baru dipublikasikan pada 2013, implementasinya tidak mengikuti spesifikasi itu

Penyebab terjadinya kerentanan

  • Teknik PuTTY bekerja dengan membuat hash SHA-512 lalu mereduksinya secara modulo terhadap q, yaitu orde grup yang digunakan dalam sistem DSA
  • Dalam semua kasus selain P521, bias yang timbul dari mereduksi angka 512-bit dengan q dapat diabaikan
  • Namun, pada P521, q berukuran 521-bit (yakni lebih dari 512-bit), sehingga mereduksi angka 512-bit dengan q tidak memberikan efek apa pun
    • Akibatnya, diperoleh nilai k dengan 9 bit teratas yang selalu 0
  • Bias ini memungkinkan serangan pemulihan kunci

Isi perbaikan kerentanan

  • Untuk mengatasi kerentanan ini, PuTTY sepenuhnya meninggalkan sistem pembuatan k sebelumnya untuk semua jenis kunci DSA dan ECDSA, lalu beralih ke teknik RFC 6979
    • Kunci EdDSA seperti Ed25519 sudah menggunakan sistem lain dan tidak berubah
  • Namun, hal ini tidak mengubah fakta bahwa informasi tentang kunci privat P521 yang lama sudah terlanjur bocor setiap kali tanda tangan dibuat menggunakan generator k sebelumnya

Pendapat GN⁺

  • Ini adalah kerentanan yang ditemukan relatif baru, tetapi tampaknya berasal dari masalah pada metode yang telah digunakan sejak 2001. Kasus ini dapat dilihat sebagai contoh risiko dari pendekatan implementasi kustom yang sejak awal tidak mengikuti standar.
  • Kerentanan kali ini hanya memengaruhi tipe kunci tertentu, tetapi jika kunci tersebut pernah digunakan, dampaknya bisa sangat serius, sehingga penting untuk segera mencabut kunci yang terdampak.
  • Pada proyek open source, bagian yang berkaitan dengan kriptografi tampaknya perlu mengikuti standar dan juga memerlukan verifikasi eksternal. Terutama pada bagian pembuatan bilangan acak, akan lebih aman jika bergantung pada sistem operasi atau pustaka yang telah tervalidasi.
  • PuTTY adalah emulator terminal open source yang banyak digunakan dan mendukung protokol SSH, Telnet, dan Rlogin, serta nyaman digunakan berkat fitur penyimpanan informasi koneksi. Ke depan, tampaknya perlu secara aktif merespons patch kerentanan.
  • Untuk terminal pengganti PuTTY di macOS atau Linux, dapat dipertimbangkan aplikasi terminal bawaan atau iTerm2. Di Windows, Windows Terminal, PowerShell, dan Cmder juga dapat dipertimbangkan sebagai alternatif.

4 komentar

 
tominam2 2024-04-16

Ah..

 
kuroneko 2024-04-16

Sepertinya saya belum pernah memakai jenis kunci tersebut, tapi untuk sementara saya sudah melakukan pembaruan.

 
dlehals2 2024-04-16

Setelah lihat ini, saya langsung update ke 0.81 hehe

 
GN⁺ 2024-04-16
Opini Hacker News

Berikut ringkasan komentar-komentar di Hacker News:

  • Ditemukan kerentanan pada metode pembuatan kunci ECDSA P-521 yang digunakan PuTTY. Saat memakai modulus 521-bit, nilai k juga seharusnya berupa bilangan acak 521-bit, tetapi PuTTY hanya memakai acak 512-bit sehingga 9 bit teratas terisi 0. Ini dapat berujung pada kebocoran kunci privat melalui aljabar linear.
  • Sikap pengungkapan kerentanan dari pengembang PuTTY, Simon Tatham, yang jujur dan jelas mendapat banyak apresiasi. Ia menyampaikan fakta apa adanya tanpa alasan-alasan atau upaya mengecilkan masalah.
  • Penjelasan latar belakang tentang bagaimana kerentanan ini ditemukan dirasa kurang.
  • Windows versi terbaru sudah menyertakan OpenSSH secara bawaan, jadi PuTTY tidak lagi wajib dipakai. Namun, masih banyak orang yang terus memakainya karena kebiasaan atau inertia.
  • Kemungkinan tidak banyak orang yang memilih tipe kunci tersebut alih-alih memakai nilai bawaan.
  • Jika sedang menggunakan host key P521, mungkin perlu mengganti kunci setelah klien diperbarui.
  • Layak mempertimbangkan migrasi ke EdDSA, yang tidak memerlukan RNG atau operasi modular.
  • Baru belakangan menyadari bahwa nama PuTTY berasal dari putty, bahan dempul untuk menahan kaca jendela.
  • Tidak paham mengapa PuTTY mengambil hasil hash SHA-512 lalu melakukan operasi modulo q. Terlihat lebih masuk akal untuk memotong sesuai jumlah bit yang dibutuhkan, atau meng-hash pesan dan kunci privat secara terpisah lalu menggabungkannya.
  • Penasaran bagaimana prinsipnya hingga penggunaan angka dengan 9 bit teratas 0, alih-alih bilangan acak 521-bit, bisa membocorkan kunci privat setelah 60 kali penandatanganan.