Java versi 15 hingga 18 mengandung cacat dalam validasi tanda tangan ECDSA-nya yang membuatnya sepele bagi penjahat untuk menandatangani file dan data lain secara digital seolah-olah mereka adalah organisasi yang sah.
Oleh karena itu, penjahat dunia maya dapat menyebarkan unduhan berbahaya yang ditandatangani secara kriptografis dan informasi palsu seolah-olah itu nyata, dan aplikasi serta layanan Java yang terpengaruh tidak akan mengetahui perbedaannya.
Cakupan kerusakan yang dapat terjadi sangat luas: komunikasi terenkripsi, token otentikasi, pembaruan kode, dan banyak lagi, yang dibangun di atas kode cacat Oracle dapat ditumbangkan, dan sejauh menyangkut program yang ditulis dengan Java, data terlihat sah dan dapat dipercaya.
Kesalahan itu ditambal bulan ini oleh Oracle di antara lebih dari 500 kerentanan yang ditangani oleh raksasa basis data kuartal ini – jadi, seperti biasa, perbarui lebih awal dan perbarui sesering mungkin.
ECDSA adalah singkatan dari Elliptic Curve Digital Signature Algorithm. Ini menggunakan kriptografi kurva eliptik, yang implementasinya telah mengalami berbagai masalah selama bertahun-tahun.
Meskipun Oracle hanya memberikan kelemahan keamanan terbaru ini (CVE-2022-21449) peringkat keparahan 7,5 dari 10, konsultan keamanan ForgeRock yang mengatakan telah mengetahuinya, dan mengungkapkannya secara pribadi, pada bulan November menilai kerentanan sepuluh.
Yang sangat menarik tentang masalah ini adalah sangat mudah untuk dieksploitasi, dan kesalahan pemrograman yang jelas. Bug tersebut diperkenalkan ketika bagian dari kode verifikasi tanda tangan Java 15 ditulis ulang dari C++ asli ke dalam Java itu sendiri termasuk kode verifikasi ECDSA.
Untuk menyederhanakan apa yang terjadi, tanda tangan ECDSA terdiri dari sepasang angka, disebut sebagai (r, s). Untuk memverifikasi tanda tangan, kode melakukan beberapa matematika yang melibatkan hash (sidik jari, jika Anda mau) dari data, kunci publik dari organisasi atau orang mana pun yang menandatangani data secara digital, r, dan s; satu sisi persamaan menggunakan r, sisi lain r dan s.
Kedua sisi perhitungan ini harus sama agar pemeriksaan tanda tangan lolos. Itu berarti data ditandatangani secara digital oleh kunci pribadi penandatangan, yang menunjukkan bahwa data berasal dari atau disetujui oleh penandatangan. Jika pemeriksaan tanda tangan gagal, itu kemungkinan berarti siapa pun yang menandatangani data bukanlah seperti yang mereka katakan (karena mereka tidak memiliki akses ke rahasia, kunci pribadi yang sesuai dengan kunci publik yang diberikan) dan data tidak boleh tepercaya.
Secara teori, agar tanda tangan valid, (r, s) tidak boleh (0, 0) karena beberapa matematika melibatkan perkalian angka-angka ini dengan nilai lain. Bug muncul karena kode C++ asli memeriksa bahwa r dan s bukan nol, dan tidak akan menerima tanda tangan jika memang demikian. Kode Java baru tidak memeriksa, itu hanya melanjutkan dan dihitung dengan nilai-nilai.
Hasilnya adalah bahwa dalam versi kode yang terpengaruh, siapa pun yang menunjukkan tanda tangan kosong akan diterima. Jalur verifikasi normal masih berfungsi dengan baik, itulah sebabnya hal ini tidak diperhatikan dua tahun lalu. Itu baru saja menerima (0,0), dan berhasil memvalidasinya.
Dan ini adalah di atas kelemahan eksekusi kode jarak jauh gazillon, tanpa otentikasi yang diperlukan untuk mengeksploitasi, di produk Oracle lainnya. ®
Cacat ini telah dijelaskan oleh Neil Madden dari ForgeRock sebagai kerentanan kertas psikis, setelah perangkat plot dari episode Doctor Who 2007. Hering kutu buku Anda yang rendah hati menganggapnya lebih seperti kartu imp dari novel 1987 A A Attanasio In Other Worlds:
Anda akan menerima artefak ketiga dan terakhir, pelat magnet penghubung imp. Kelihatannya identik dengan kartu charge, hanya saja warnanya putih bersih. Masukkan ke dalam sistem komputer bank mana pun dan Anda akan dikreditkan dengan sejumlah besar modal nyata.
Sumber : The Register