OpenSSL telah merilis pembaruan keamanan untuk mengatasi kerentanan mempengaruhi OpenSSL 3.0.4. Seorang penyerang dapat mengeksploitasi kerentanan ini untukmengambil kendali dari sistem yang terpengaruh.
Beberapa headlines menggambarkan bug itu sebagai kemungkinan “cacat yang lebih buruk dari Heartbleed flaw”. Heartbleed, adalah bug kebocoran data profil tinggi yang mengintai tanpa diketahui di OpenSSL selama beberapa tahun sebelum akhirnya dipublikasikan publisitas pada tahun 2014
Faktanya, Heartbleed mungkin dapat dianggap sebagai contoh awal dari aproses BWAIN (Bug With An Impressive Name)
Heartbleed adalah bug yang mengekspos banyak situs public-facing web ke lalu lintas berbahaya dan mengatakan “Hei”! Beri tahu saya jika Anda masih di sana dengan mengirimkan kembali pesan ini: ROGER. Omong-omong, kirim kembali teks dalam buffer memori yang panjangnya 64.000 byte.”
Server yang belum ditambal akan patuh membalas dengan sesuatu seperti: ROGER [ditambah 64000 minus 5 byte dari apa pun yang kebetulan mengikuti di memori, mungkin termasuk permintaan web orang lain atau bahkan kata sandi dan kunci pribadi].
Menariknya, kedua bug yang diperbaiki dalam rilis ini dsebut sebagai “one-liners”, artinya mengubah atau menambahkan hanya satu baris kode akan menambal setiap lubang.
Faktanya, seperti yang akan kita lihat, salah satu tambalan melibatkan perubahan satu instruksi assembler, yang pada akhirnya menghasilkan hanya dua bit yang ditukar dalam kode yang dikompilasi.
Bug-bug tersebut adalah sebagai berikut:
- CVE-2022-2274: Memori overflow di eksponensial modular RSA.
- CVE-2022-2097: Kebocoran data di enkripsi AES-OCB.
Kode eksponensial modular sekarang mengubah hitungan bit menjadi hitungan bilangan bulat, dengan membagi jumlah bit dengan jumlah byte dalam bilangan bulat dikalikan dengan 8 (jumlah bit dalam satu byte).
Kode enkripsi AES-OCB sekarang menggunakan tes JBE (lompat jika di bawah atau sama dengan) di akhir loopnya alih-alih JB (lompat jika di bawah), yang merupakan jenis perubahan yang sama seperti mengubah loop C untuk mengatakan ( i = 1; i <= n; i++) {…} bukan untuk (i = 1; i < n; i++) {…}.
Dalam kode yang dikompilasi, ini hanya mengubah satu bit dari satu byte, yaitu dengan mengganti nilai opcode biner 0111 0010 (lompat jika di bawah) menjadi 0111 0100 (lompat jika di bawah atau sama).
Untungnya, kami tidak mengetahui mode enkripsi khusus AES-OCB yang banyak digunakan (setara modernnya adalah AES-GCM, jika Anda terbiasa dengan banyak varian enkripsi AES).
Khususnya, seperti yang ditunjukkan oleh tim OpenSSL, “OpenSSL tidak mendukung rangkaian sandi berbasis OCB untuk TLS dan DTLS,” sehingga keamanan jaringan koneksi SSL/TLS tidak terpengaruh oleh bug ini.
Apa solusinya?
OpenSSL versi 3.0 dipengaruhi oleh kedua bug ini, dan mendapat pembaruan dari 3.0.4 ke 3.0.5. Sedangkan OpenSSL versi 1.1.1 dipengaruhi oleh bug kebocoran teks biasa AES-OCB, dan mendapat pembaruan dari 1.1.1p ke 1.1.1q. Dari dua bug tersebut, bug eksponensial modular adalah yang lebih parah.
Jika Anda menggunakan OpenSSL 3 dan Anda tidak dapat memutakhirkan source code Anda, tetapi Anda dapat mengkompilasi ulang sumber yang sudah Anda gunakan, maka solusi lainnya adalah membangun kembali OpenSSL Anda saat ini menggunakan pengaturan konfigurasi no-asm.
Untuk menekan code alone AES-OCB, Anda dapat mengkompilasi ulang dengan pengaturan konfigurasi no-ocb, yang seharusnya menjadi intervensi yang tidak berbahaya jika Anda tidak sengaja menggunakan mode OCB di perangkat lunak Anda sendiri.
Sumber: Naked Security