
Pada 13 Agustus 2024, MSTC (Microsoft Security Response Center) mengumumkan CVE-2024-38063, sebuah kerentanan kritis pada tumpukan TCP/IP Windows yang dapat dieksploitasi untuk mengancam fungsi-fungsi jaringan penting di dalam sistem operasi. Dalam artikel ini, para peserta Program Beasiswa Pascasarjana “ OPSWAT ” menyajikan analisis mendalam mengenai detail teknis dan dampak potensial dari kerentanan ini, serta strategi mitigasi yang direkomendasikan untuk mengatasi kerentanan tersebut.
OPSWAT Peserta Program Beasiswa: Pham Ngoc Thien - Universitas Teknologi Informasi Ho Chi Minh
Gambaran Umum
CVE-2024-38063 adalah kerentanan kritis pada tumpukan TCP/IP Windows dengan skor CVSS 9,8, yang memengaruhi pemrosesan paket IPv6. Penyerang jarak jauh dapat memanfaatkan kerentanan ini dengan memanfaatkan kondisi underflow bilangan bulat saat menangani header ekstensi IPv6 untuk menjalankan kode berbahaya atau menyebabkan serangan DoS (Denial of Service).
Karena IPv6 diaktifkan secara default pada sebagian besar sistem modern, celah keamanan tanpa interaksi pengguna ini menimbulkan risiko yang cukup besar. Akibatnya, semua versi Windows 10, Windows 11, dan Windows Server 2008, 2012, 2016, 2019, serta 2022 yang belum diperbarui dan memiliki IPv6 yang diaktifkan rentan terhadap CVE ini.

Konsep Utama
Tumpukan TCP/IP Windows
Tumpukan TCP/IP Windows merupakan komponen dasar sistem operasi yang bertanggung jawab atas komunikasi jaringan melalui rangkaian Protokol Kontrol Transmisi/Protokol Internet (TCP/IP). Tumpukan ini menangani semua interaksi jaringan, memfasilitasi komunikasi antarperangkat di jaringan lokal maupun global.

IPv6 dan Header Ekstensi
IPv6 dikembangkan untuk mengatasi keterbatasan IPv4. Protokol ini memperkenalkan berbagai peningkatan, seperti modularitas dan fleksibilitas melalui header ekstensi. Header-header tersebut, yang terletak di antara header IPv6 dan muatan data, mendukung data opsional serta fitur-fitur canggih.
Header ekstensi IPv6 yang utama antara lain:
- Opsi Lompatan demi Lompatan (Header Berikutnya = 0)
- Header Perutean (Header Berikutnya = 43)
- Header Fragmen (Header Berikutnya = 44)
- Header Opsi Tujuan (Header Berikutnya = 60)
- Header Otentikasi (AH) (Header Berikutnya = 51)
- Encapsulating Security Payload (ESP) (Header Berikutnya = 50)
Setiap header ekstensi mengarah ke header berikutnya melalui bidang Next Header, sehingga membentuk rantai berurutan. Modularitas ini menambah kompleksitas pada proses penanganan paket dan membuka potensi celah keamanan yang dapat dieksploitasi.

Underflow Bilangan Bulat
Underflow bilangan bulat terjadi ketika suatu perhitungan menghasilkan nilai yang lebih kecil daripada nilai minimum yang dapat direpresentasikan untuk suatu tipe data. Misalnya, mengurangkan nilai yang lebih besar dari nilai yang lebih kecil pada bilangan bulat tak bertanda dapat menyebabkan hasilnya menjadi nilai positif yang sangat besar.
Overflow bilangan bulat terjadi ketika nilai melampaui batas maksimum tipe data dan "meluap" kembali ke nilai minimum yang dapat direpresentasikan (misalnya, 0 dalam rentang 0–10). Kedua skenario tersebut terjadi akibat penanganan kondisi batas yang tidak tepat dalam operasi aritmatika, yang berakibat pada kerentanan serius dalam sistem perangkat lunak.

Analisis Kerentanan
Alur Kerja Pemrosesan IPv6
Setelah menerima paket IPv6, Windows terlebih dahulu mengurai header IPv6. Selanjutnya, fungsi `IppReceiveHeaderBatch` memeriksa nilai bidang `Next Header` untuk memilih penangan yang sesuai bagi header-header berikutnya. Untuk setiap header ekstensi dalam rantai tersebut, `IppReceiveHeaderBatch` memanggil rutin yang sesuai untuk memproses header tersebut.

Meskipun mekanisme ini dirancang secara fleksibel dan modular, hal tersebut justru menimbulkan vektor serangan potensial. Dalam IPv6, paket yang terfragmentasi biasanya disusun kembali di tujuan, di mana terdapat kerentanan dalam proses penyusunan kembali fragmen dan penanganan header.
Seorang penyerang dapat menyebabkan kesalahan pengelolaan memori dan memicu buffer overflow dengan mengirimkan sejumlah besar paket yang rusak dengan header ekstensi yang dimanipulasi. Hal ini memungkinkan data berlebih menimpa wilayah memori yang tidak dimaksudkan, yang berpotensi memungkinkan eksekusi kode sembarang. Kerentanan ini diidentifikasi sebagai CVE-2024-38063.

Kelemahan Kritis pada Stack TCP/IP Windows
Patch dari Microsoft untuk mengatasi kerentanan CVE-2024-38063 telah diteliti secara mendalam oleh peneliti keamanan Marcus Hutchins. Blog teknisnya menyajikan wawasan terperinci mengenai akar penyebab kerentanan ini. Berdasarkan temuan-temuannya, rekan kami tersebut telah meneliti masalah ini lebih lanjut untuk memperoleh pemahaman yang menyeluruh mengenai eksploit tersebut.
Analisis Patch
Patch tersebut mencakup pembaruan pada berkas tcpip.sys, termasuk modifikasi di dalam fungsi Ipv6pProcessOptions. Perubahan satu baris menggantikan panggilan ke IppSendErrorList() dengan panggilan ke IppSendError(), yang menunjukkan bahwa IppSendErrorList() mungkin telah berkontribusi terhadap CVE tersebut.


Ukuran paket nol
Pemeriksaan lebih mendalam terhadap fungsi IppSendErrorList() menunjukkan bahwa fungsi tersebut memproses daftar tertaut (linked list) paket dengan memanggil fungsi IppSendError() untuk masing-masing paket. Fungsi IppSendError() menetapkan status STATUS_DATA_NOT_ACCEPTED pada paket yang bermasalah. Kemudian, fungsi tersebut membuat pesan kesalahan ICMP yang berisi informasi mengenai paket yang bermasalah tersebut dan mengirimkannya kembali. Namun, ketika IppSendErrorList() dipanggil dengan parameter always_send_icmp = true pada beberapa paket, fungsi tersebut menetapkan nilai bidang packet_size menjadi nol untuk setiap paket.

Fungsi `Ipv6pProcessOptions` dirancang untuk memproses header ekstensi yang berisi bidang nilai opsi, termasuk header `Hop-by-Hop Options` dan `Destination Options`. Dengan mengatur `Option Type` ke nilai apa pun yang lebih besar dari 0x80, seorang penyerang dapat memicu kesalahan tertentu dalam pemrosesan header opsi, sehingga memaksa nilai `always_send_icmp` ditetapkan ke `true` dan akibatnya ukuran paket ditetapkan menjadi nol.

Meskipun paket berukuran nol biasanya dibuang, seorang penyerang dapat memanipulasi bidang Next Header pada paket IPv6 asli. Manipulasi ini memungkinkan penyerang untuk mengendalikan cara paket tersebut ditafsirkan pada tahap-tahap pemrosesan selanjutnya, sehingga menghindari penolakan langsung dan membuka peluang untuk eksploitasi.

Underflow Bilangan Bulat dalam Pemrosesan Fragmen
Dengan mengatur bidang Next Header menjadi 44, yang menandakan Fragment Header, sebuah paket akan diproses oleh rutinitas fragmentasi atau penyatuan kembali IPv6. Ketika paket tersebut mencapai parser fragmen, yaitu fungsi `Ipv6pReceiveFragment()`, hal itu menunjukkan bahwa:
- Ukuran paketnya nol.
- Header fragmen tersebut menunjukkan bahwa masih ada data tambahan yang harus diproses.
Dalam fungsi `Ipv6pReceiveFragment()`, ukuran alokasi untuk `fragment_size` dihitung dengan mengurangkan 0x30 (panjang header paket) dari ukuran paket tanpa validasi apa pun. Jika ukuran paket adalah nol, pengurangan ini akan menyebabkan underflow, menghasilkan nilai 16-bit yang sangat besar (sekitar 0xFFD0 atau 65488), yang menyebabkan parser memproses memori berlebih di luar batas valid paket dan mengakibatkan kerusakan memori.

Dari Underflow hingga Overflow dan Ketidaksesuaian dalam Alokasi
Fungsi Ipv6pReassemblyTimeout() bertugas membersihkan fragmen IPv6 yang belum lengkap setelah waktu yang ditentukan dengan menggunakan aritmatika 16-bit untuk menentukan ukuran buffer dan operasi penyalinan. Akibat terjadinya underflow pada langkah sebelumnya, di mana nilai packet_length atau fragment_size menjadi 0xFFD0, terjadi overflow selama proses alokasi.
Hasil perhitungan tersebut menyebabkan register diatur ulang ke nol, sehingga hanya 48 byte memori yang dialokasikan. Namun, karena jumlah data yang disalin (65.488 byte dari reassembly->payload) tidak sesuai dengan memori yang dialokasikan, terjadi buffer overflow yang dapat dikendalikan di kernel pool.

Ketidaksesuaian ini membuka celah bagi penyerang untuk menjalankan kode berbahaya melalui paket yang dirancang khusus untuk mengeksploitasi kerentanan dalam pemrosesan IPv6.
CVE-2024-38963 Bukti Konsep
Dalam upaya untuk mereproduksi kerentanan CVE-2024-38963, rekan-rekan kami membuat serangkaian paket yang tidak valid yang dirancang untuk mengeksploitasi celah tersebut. Proses yang mereka lakukan adalah:
1. Membuat Paket IPv6 yang Tidak Valid
Sisipkan header ekstensi Opsi Tujuan IPv6 (tipe 60) setelah header IPv6 dasar, lalu sisipkan opsi yang tidak valid (misalnya, tipe opsi 0x81).
Manipulasi ini memaksa kernel Windows (tcpip.sys) untuk menetapkan always_send_icmp = true, sehingga memicu pembangkitan kesalahan ICMPv6 melalui rutin IppSendErrorList().
2. Memaksa Pemrosesan Daftar Buffer Jaringan (NBL)
Membanjiri target dengan rentetan cepat paket-paket yang rusak ini meningkatkan kemungkinan kernel untuk mengelompokkan beberapa paket ke dalam satu Net-Buffer List (NBL). Ketika dua atau lebih paket dikelompokkan, loop IppSendErrorList() yang rentan akan diaktifkan, sehingga secara keliru mereset metadata DataLength dan Offset pada fragmen-fragmen berikutnya (ukuran paket kini menjadi nol).
3. Menyisipkan Paket IPv6 yang Terpotong-potong
Setelah pengiriman paket yang rusak, paket IPv6 yang terfragmentasi yang menyertakan header ekstensi Fragment dikirimkan. Fragmen-fragmen ini diproses menggunakan nilai DataLength yang sudah rusak.
4. Memanfaatkan Batas Waktu Perakitan Ulang
Kernel menyimpan fragmen selama 60 detik (dikelola oleh Ipv6pReassemblyTimeout) untuk memungkinkan penyatuan kembali paket. Selama periode timeout ini, nilai DataLength yang rusak memicu terjadinya underflow bilangan bulat di fungsi Ipv6pReceiveFragment, yang mengakibatkan ukuran fragmen dihitung secara tidak benar (terlalu besar).
5. Memicu Kelebihan Kapasitas Buffer Heap
Kernel mengalokasikan buffer heap berdasarkan nilai-nilai yang mengalami underflow. Ada dua perhitungan berbeda yang terjadi selama proses perakitan ulang: yang pertama menentukan ukuran alokasi memori (yang, akibat overflow 16-bit, menjadi terlalu kecil), dan yang kedua menghitung panjang salinan menggunakan nilai besar yang mengalami underflow.
Ketidaksesuaian ini menyebabkan penulisan di luar batas, yang memicu kelebihan kapasitas buffer berbasis heap yang dapat dimanfaatkan untuk memicu serangan Denial-of-Service (DoS) atau Eksekusi Kode Jarak Jauh.

Kode sumber yang digunakan untuk mereproduksi CVE ini dalam serangan Denial-of-Service:
Apabila kerentanan ini dimanfaatkan oleh penyerang, sistem korban dapat langsung mengalami crash, yang mengakibatkan munculnya layar biru kematian:

Remediasi
Jika Anda tidak memperbarui sistem operasi secara teratur, perangkat Anda akan rentan terhadap ancaman keamanan, termasuk yang terkait dengan CVE (Common Vulnerabilities and Exposures). Untuk meminimalkan risiko tersebut, MetaDefender Endpoint™ memberikan perlindungan yang andal dengan mendeteksi versi sistem operasi Anda dan memeriksa adanya kerentanan, termasuk CVE yang telah diketahui, seperti CVE-2024-38063.
MetaDefender Endpoint Dirancang untuk melindungi perangkat di dalam jaringan TI/OT kritis dari ancaman yang berasal dari perangkat periferal dan media yang dapat dilepas. Solusi ini memastikan sistem operasi (OS) dan aplikasi yang terinstal selalu diperbarui, menandai versi yang sudah usang atau rentan, serta mencantumkan aplikasi yang diketahui memiliki kerentanan dan CVE, beserta solusi perbaikan yang direkomendasikan. Solusi ini juga membantu melindungi perangkat dari risiko media yang dapat dilepas dengan memblokir akses ke drive " USB " hingga drive tersebut dipindai dan dinyatakan bersih menggunakan beberapa mesin anti-malware, sambil menerapkan Teknologi Deep CDR™ pada lebih dari 180 jenis file.
Hubungi salah satu pakar kami hari ini untuk mengetahui bagaimana MetaDefender Endpoint dapat meningkatkan sistem keamanan Anda dengan intelijen terdepan di industri.

