
Pesatnya perkembangan teknologi telah menciptakan permintaan yang tinggi akan pengembang yang terampil. Perangkat lunak sumber terbuka (OSS) telah menjadi alat yang sangat penting bagi tenaga kerja yang terus berkembang ini. Saat ini, terdapat ratusan ribu paket OSS yang sudah mapan di berbagai bahasa pemrograman. Lebih dari 90% pengembang memanfaatkan komponen-komponen sumber terbuka ini dalam aplikasi milik mereka, yang menunjukkan efisiensi dan nilai tambah yang ditawarkan oleh OSS. Lebih lanjut, pasar perangkat lunak sumber terbuka global diperkirakan akan mencapai $80,7 miliar pada tahun 2030, yang mencerminkan tingkat pertumbuhan tahunan sebesar 16,7%.
Software merupakan bagian tak terpisahkan dari operasi bisnis di seluruh dunia dan karenanya sering menjadi sasaran para pelaku ancaman. Pada tahun 2023, pengeluaran untuk Keamanan Aplikasi mencapai sekitar $5,76 miliar, dengan proyeksi akan mencapai $6,67 miliar pada tahun 2024. Dalam bidang Keamanan Aplikasi, keamanan rantai pasokan perangkat lunak semakin menonjol selama tiga tahun terakhir, menjadi kategori serangan dengan pertumbuhan tercepat, di mana insiden pelanggaran besar dan eksploitasi sering kali menjadi berita utama.
Organisasi sering berasumsi bahwa sebagian besar risiko berasal dari aplikasi web yang terbuka untuk umum. Namun, perspektif ini telah berubah dalam beberapa tahun terakhir. Dengan puluhan komponen kecil di setiap aplikasi, risiko kini dapat muncul dari mana saja di dalam basis kode. Kini, lebih penting dari sebelumnya bagi organisasi untuk memahami celah keamanan yang sudah ada maupun yang baru muncul dalam siklus hidup pengembangan perangkat lunak. Dalam postingan blog ini, para Graduate Fellows kami mengulas lebih dalam mengenai CVE-2023-23924, sebuah celah keamanan kritis yang ditemukan dalam pustaka dompdf yang banyak digunakan—sebuah alat PHP yang kuat yang memungkinkan pembuatan dokumen PDF secara dinamis dari HTML dan CSS.
Melalui analisis menyeluruh, kami akan mengkaji seluk-beluk teknis dari kerentanan ini, teknologi-teknologi terkait yang memainkan peran penting, serta simulasi proses eksploitasi. Kami juga akan menelaah bagaimana OPSWAT MetaDefender Core, khususnya Software Bill of Materials (SBOM) mesinnya, dapat dimanfaatkan untuk mendeteksi dan mengatasi kerentanan ini, sehingga memberdayakan pengembang perangkat lunak dan tim keamanan untuk selalu selangkah lebih maju dalam menghadapi potensi ancaman.
Latar Belakang Mengenai CVE-2023-23924
Sebuah kerentanan keamanan ditemukan pada dompdf versi 2.0.1 dan diumumkan kepada publik pada awal tahun 2023:
- Validasi URI pada dompdf 2.0.1 dapat dilewati saat melakukan parsing SVG dengan memberikan
<image>tag yang berisi huruf besar. Hal ini memungkinkan penyerang untuk memanggil URL sembarang dengan protokol sembarang, yang berpotensi menyebabkan deserialisasi objek sembarang pada versi PHP sebelum 8.0.0. Melalui pembungkus URL PHAR, kerentanan ini dapat menyebabkan penghapusan file sembarang dan bahkan eksekusi kode jarak jauh, tergantung pada kelas-kelas yang tersedia. - Analis NVD memberikan skor CVSS sebesar 9,8 (KRITIS ) untuk CVE-2023-23924.

Memahami Kerentanan Dompdf
Untuk memahami sepenuhnya kerentanan CVE-2023-23924 pada dompdf, penting bagi kita untuk memahami dua teknologi yang saling terkait erat: Scalable Vector Graphics (SVG) dan berkas PHAR.
SVG (Scalable Vector Graphics) adalah format gambar serbaguna yang telah sangat populer berkat kemampuannya menampilkan grafis berkualitas tinggi di web sekaligus tetap ringan dan dapat diskalakan. Berbeda dengan gambar raster, SVG didasarkan pada markup XML, sehingga memungkinkan kontrol yang presisi atas elemen-elemen seperti garis, bentuk, dan teks. Salah satu keunggulan utama SVG adalah kemampuannya untuk diskalakan secara mulus tanpa kehilangan kualitas gambar, sehingga sangat ideal untuk desain web responsif dan tampilan beresolusi tinggi.

PHAR (PHP Archive) mirip dengan konsep berkas JAR, namun khusus untuk PHP. PHAR memudahkan proses penerapan dengan menggabungkan seluruh kode PHP dan berkas sumber daya ke dalam satu berkas arsip.
Sebuah berkas PHAR terdiri dari 4 bagian:
- Stub: berisi kode untuk mem-bootstrap arsip tersebut.
- Manifest: berisi metadata arsip. Metadata tersebut disimpan dalam format serialisasi, yang dapat dimanfaatkan untuk memicu serangan deserialisasi PHP pada berkas PHAR yang berbahaya.
- Isi berkas: berisi isi arsip, termasuk kode PHP dan berkas sumber daya.
- Tanda Tangan (Opsional): berisi data untuk memverifikasi integritas berkas.
Karena metadata disimpan dalam format serial, kombinasi antara pembungkus PHAR dan metadata berkas PHAR berpotensi memicu serangan deserialisasi jika digunakan sebagai input dalam fungsi-fungsi PHP seperti file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(), atau filesize(). Kelemahan keamanan ini dapat memungkinkan penyerang menjalankan kode jarak jauh melalui berkas PHAR.

Bagaimana Dompdf Membuat Berkas PDF

Melalui analisis, para Peserta Program Pascasarjana “ OPSWAT ” mengidentifikasi bahwa terdapat tiga tahap dalam proses konversi menggunakan dompdf. Untuk mengonversi berkas HTML ke format PDF, pustaka dompdf terlebih dahulu mengurai berkas masukan menjadi pohon DOM dan menyimpan informasi posisi serta tata letak setiap objek. Selanjutnya, gaya CSS diurai dan diterapkan pada setiap objek. Terakhir, objek-objek tersebut diatur ulang agar sesuai dengan halaman dan dirender menjadi berkas PDF akhir.
Untuk meningkatkan keamanan, dompdf menerapkan proses validasi guna memastikan keamanan masukan URI sebelum melanjutkan ke langkah berikutnya. Proses validasi ini terlihat jelas saat memproses berkas SVG dalam nilai xlink:href atribut.

Jika berkas masukan SVG berisi <image> tag di bawah <svg> tag, diterapkan suatu ketentuan yang hanya mengizinkan protokol tertentu, seperti http://, https:// dan file://, untuk xlink:href bidang.

Yang resolve_url() Fungsi ini akan memvalidasi URI sebelum memprosesnya dengan drawImage() fungsi. Jika skema dalam URI tidak termasuk di antara protokol yang diizinkan, maka resolve_url() Fungsi tersebut akan mengembalikan sebuah pengecualian ke aplikasi.

Jika URI lolos validasi, maka URI tersebut akan diteruskan ke drawImage() fungsi, yang menggunakan file_get_contents() fungsi untuk menangani nilai URI di dalam xlink:href atribut. Kerentanan keamanan muncul pada titik ini: serangan deserialisasi PHAR dapat dipicu jika penyerang berhasil melewati proses validasi dan memasukkan pembungkus PHAR ke dalam URI.
Setelah dilakukan analisis, diketahui bahwa validasi hanya diterapkan pada tag yang memiliki nama persis "image".

Akibatnya, validasi ini dapat dengan mudah dilewati dengan menggunakan huruf besar pada satu atau lebih karakter dalam nama tag, seperti Image. Dengan demikian, berkas SVG yang dirancang khusus dan menggunakan "Image" alih-alih "image" dapat lolos dari validasi ini.
Pada langkah berikutnya, drawImage() fungsi tersebut dipanggil, dengan meneruskan URI dari berkas SVG ke file_get_contents() fungsi. Oleh karena itu, kombinasi antara bypass validasi dan serangan deserialisasi pada berkas PHAR memungkinkan penyerang untuk melakukan Eksekusi Kode Jarak Jauh. Kerentanan ini membuka celah bagi penyerang jahat untuk mengkompromikan server aplikasi melalui berkas SVG jika berkas tersebut diproses oleh versi dompdf yang rentan.
Simulasi Eksploitasi Dompdf
Untuk mensimulasikan eksploitasi ini sebagai skenario dunia nyata, para peserta program beasisw OPSWAT telah mengembangkan sebuah aplikasi web yang dilengkapi fitur konversi HTML ke PDF menggunakan pustaka dompdf versi 2.0.1. Aplikasi ini memungkinkan pengguna untuk mengunggah berkas dalam format seperti HTML, XML, atau SVG, lalu mengonversinya menjadi berkas PDF.

Seorang penyerang akan mengikuti langkah-langkah berikut untuk mengeksploitasi kerentanan ini pada sebuah aplikasi yang menggunakan versi dompdf yang rentan (versi 2.0.1):

Pertama-tama, seorang penyerang membuat objek berbahaya yang akan menghasilkan reverse shell saat destruktor dipanggil.

Kedua, penyerang membuat berkas PHAR yang berisi objek metadata berbahaya. Ketika berkas PHAR tersebut dijalankan oleh pembungkus PHAR di dalam file_get_content() fungsi tersebut, metadata akan dideserialisasi dan objek yang ditentukan akan diproses. Selama proses deserialisasi ini, hal tersebut memicu pemanggil penghancur (destructor) dan menjalankan reverse shell.

Pada akhirnya, penyerang menyisipkan tautan URI yang berisi pembungkus PHAR ke dalam nilai dari xlink:href atribut pada tag Image untuk melewati proses validasi, menjalankan kode berbahaya, dan mengunggah berkas berbahaya tersebut ke aplikasi.

Selama proses pemrosesan berkas SVG berbahaya yang diunggah, aplikasi tersebut membangun koneksi balik ke penyerang, sehingga memungkinkan penyerang untuk mengkompromikan server aplikasi.

Mengamankan Komponen Sumber Terbuka dengan OPSWAT MetaDefender Core
Untuk mendeteksi dan memitigasi kerentanan CVE-2023-23924 di dompdf, para peneliti pascasarjana kami memanfaatkan OPSWAT MetaDefender Core , sebuah produk keamanan siber berlapis-lapis yang menawarkan teknologi pencegahan dan deteksi malware canggih, termasuk SBOM.
OPSWAT SBOM mengamankan rantai pasokan perangkat lunak dengan menyediakan inventaris komponen yang komprehensif untuk kode sumber dan kontainer. Dengan menganalisis pustaka dompdf dan dependensinya, OPSWAT SBOM dapat dengan cepat mengidentifikasi adanya versi 2.0.1 yang rentan dan memberi peringatan kepada pengguna mengenai risiko potensial tersebut.
Selain itu, SBOM dari OPSWAT dapat mendeteksi teknologi terkait, seperti berkas SVG dan PHAR, yang sangat penting untuk memahami dan memitigasi kerentanan CVE-2023-23924. Pandangan menyeluruh terhadap komponen perangkat lunak aplikasi ini memungkinkan tim keamanan untuk mengambil keputusan yang tepat dan melakukan tindakan yang sesuai guna mengatasi risiko yang teridentifikasi.

Selain mendeteksi versi dompdf yang rentan, SBOM dari OPSWAT juga memberikan wawasan berharga mengenai komponen-komponen yang terpengaruh, versi masing-masing, serta pembaruan atau tambalan yang tersedia. Informasi ini memungkinkan tim keamanan untuk memprioritaskan upaya perbaikan mereka dan memastikan aplikasi diperbarui ke versi dompdf yang aman, sehingga secara efektif mengatasi kerentanan CVE-2023-23924.

Dengan memanfaatkan mesin SBOM yang terdapat di MetaDefender Core , organisasi dapat secara proaktif memantau rantai pasokan perangkat lunak mereka, mengidentifikasi potensi kerentanan pada komponen sumber terbuka, dan menerapkan strategi mitigasi secara tepat waktu, sehingga memastikan keamanan dan integritas aplikasi mereka secara keseluruhan.
Catatan Penutup
Penemuan CVE-2023-23924 dalam pustaka dompdf semakin menegaskan betapa pentingnya kewaspadaan dalam lanskap keamanan aplikasi yang terus berubah. Dengan memanfaatkan wawasan dan strategi yang diuraikan dalam postingan blog ini, tim keamanan dapat secara efektif mendeteksi, memitigasi, dan melindungi aplikasi mereka dari kerentanan semacam itu, sehingga memastikan keamanan dan integritas ekosistem perangkat lunak mereka secara keseluruhan.




