Ketahui Lebih Lanjut tentang Buku Karya Benny Czarny, *Cybersecurity Upside Down*

Pelajari Lebih Lanjut
Kami menggunakan kecerdasan buatan untuk menerjemahkan situs ini, dan meskipun kami berupaya semaksimal mungkin untuk memastikan keakuratan, terjemahan tersebut mungkin tidak selalu 100% tepat. Kami mengucapkan terima kasih atas pengertian Anda.

Analisis Mendalam tentang CVE-2024-38063: Ancaman Kritis pada Stack TCP/IP Windows

Oleh OPSWAT
Bagikan Postingan Ini
Foto close-up Pham Ngoc Thien, peserta Program Beasisw OPSWAT

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.

Diagram yang menunjukkan dampak CVE-2024-38063 terhadap fungsi jaringan Windows

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.

Tangkapan layar arsitektur tumpukan TCP/IP Windows

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.

Diagram yang menggambarkan header ekstensi IPv6 dan struktur paket
Format datagram IPv6

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.

Diagram yang menjelaskan underflow dan overflow bilangan bulat dalam pemrosesan data

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.

Diagram yang menggambarkan alur kerja pemrosesan paket IPv6 di Windows

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.

Diagram yang menggambarkan risiko buffer overflow akibat paket IPv6 yang tidak valid

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.

Tangkapan layar kode yang menunjukkan tcpip.sys sebelum penerapan tambalan untuk CVE-2024-38063
Gambar 1. Sebelum ditambal
Tangkapan layar kode yang menunjukkan tcpip.sys setelah penerapan patch untuk CVE-2024-38063
Gambar 2. Setelah pemasangan tambalan

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.

Tangkapan layar kode yang menunjukkan fungsi `IppSendErrorList` yang mengatur ukuran paket menjadi nol

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.

Tangkapan layar kode yang menggambarkan manipulasi bidang Next Header IPv6 untuk tujuan eksploitasi

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. 

Diagram yang menggambarkan kendali penyerang atas pemrosesan paket IPv6

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. 

Tangkapan layar kode yang menunjukkan terjadinya underflow bilangan bulat dalam pemrosesan fragmen IPv6
Gambar 3: Underflow Bilangan Bulat dalam Pemrosesan Fragmen

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. 

Tangkapan layar kode yang menggambarkan terjadinya buffer overflow akibat ketidaksesuaian dalam alokasi memori

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.

Diagram yang menggambarkan eksploitasi proof of concept untuk CVE-2024-38063

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: 

Tangkapan layar antarmuka pengguna yang memperlihatkan layar biru kematian Windows setelah eksploitasi CVE-2024-38063

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. 

Ikuti terus kabar terbaru dari OPSWAT!

Daftar sekarang untuk mendapatkan kabar terbaru dari perusahaan, cerita, informasi acara, dan masih banyak lagi.