Bug PHP Bisa Lewati Filter Domain, Bisa Kena DDOS Nih!
Cacat bypass filter dipicu hanya pada input pengguna yang sangat besar, yang membatasi kemampuan exploitabilitasnya
A bug di salah satu fungsi PHP memungkinkan untuk melewati tindakan keamanan yang dimaksudkan untuk melindungi aplikasi web dari input pengguna yang berbahaya, menurut temuan peneliti keamanan.
filter_var() adalah fungsi populer yang memungkinkan pengembang untuk membersihkan dan memvalidasi string untuk format data yang berbeda seperti alamat email, domain web, dan URLs.
Namun, menurut temuan peneliti keamanan Jordy Zomer, fungsi tersebut memiliki cacat sampul integer yang, ketika dipicu , menyebabkan program mengabaikan pemfilteran logic.
Integers bertanda dan tidak bertanda
filter_var() mengambil string input dan argumen numerik yang menentukan panjang string. Tanda tangan fungsi mendefinisikan argumen panjang sebagai `bilangan bulat bertanda`, yang membagi rentang variabel antara nilai negatif dan positif.
Namun, variabel panjang lain yang dideklarasikan di dalam badan fungsi didefinisikan sebagai bilangan bulat tidak bertanda, yang hanya menerima nilai positif. Ketidakcocokan antara deklarasi yang ditandatangani dan tidak ditandatangani dapat menyebabkan perilaku yang tidak menentu ketika fungsi tersebut diberikan dengan string yang sangat besar, dan menyebabkan aliran program melompati cabang instruksi yang menerapkan filter untuk nama host dan bendera domain (FILTER_VALIDATE_DOMAIN dan FILTER_FLAG_HOSTNAME).
“Karena fakta bahwa filter tidak lagi valid, kode apa pun yang bergantung padanya sebagai pemeriksaan keamanan dapat dilewati, mengakibatkan pengenalan bug ke dalam kode Anda,” kata Zomer kepada The Daily Swig.
“Dalam proses meneliti filter_var bersama dengan flag-flag ini, saya menemukan bahwa ini cukup sering digunakan dalam kombinasi dengan flag-flag ini.”
Bug ini juga dapat digunakan untuk melakukan serangan denial-of-service (DoS) terhadap server web PHP dengan data sedikit lebih besar dari 2GB .
“Saran terbaik saya adalah sangat penting bagi Anda untuk selalu menggunakan mekanisme pelolosan yang sesuai saat meletakkan sesuatu dalam konteks yang berbeda dari sebelumnya,” Zo mer said.
“Hal lain yang perlu ditekankan adalah bahwa memfilter input Anda tidak pernah menjadi cara yang efektif untuk mencegah kerentanan, karena situasi yang berbeda memerlukan strategi meloloskan diri yang berbeda.”
Dampak terbatas
Flaw bypass filter dipicu hanya pada input pengguna yang sangat besar, yang menyebabkan kerusakan parah pembatasan pada eksploitabilitasnya.
“Bug ini tidak mungkin berdampak luas, karena fakta dasarnya hanya mempengaruhi satu subfungsi tertentu dalam satu fungsi tertentu (yaitu, penyaringan nama domain), dan memerlukan ukuran variabel lebih dari 4GB akan dipasok untuk memicunya,” Stanislav Malyshev, pengembang di internal PHP, mengatakan kepada The Daily Swig.
“Setiap aplikasi PHP yang dikonfigurasi dengan benar harus memiliki batas memori dan kontrol input yang tidak mengizinkan data input 4GB untuk nama domain – karena alasan sederhana tidak ada data sah yang dapat memiliki nama domain 4GB.”
Tantangan dalam mempertahankan proyek sukarela
Menurut Malyshev, perbaikannya h sebagaimana telah diperiksa ke dalam sumber PHP pada tanggal 28 Maret, dan akan menjadi bagian dari rilis resmi PHP berikutnya yang dijadwalkan.
Zomer, yang tidak puas dengan kecepatan tim keamanan PHP, melanjutkan dan menerbitkan perbaikannya sendiri untuk bug di website-nya.
“Apa yang dilakukan patch saya adalah memodifikasi argumen panjang dari fungsi _php_filter_validate_domain menjadi size_t bukan int,” katanya. “Ini mengubahnya menjadi bilangan bulat yang tidak ditandatangani dari jenis yang sesuai dan menghindarinya dari membungkus ke angka negatif atau nol.”
Malyshev mengkonfirmasi bahwa Zomer melaporkan bug pada 2 Maret, tetapi butuh beberapa hari untuk mengklarifikasi detailnya, dan mereka diberikan sekitar dua minggu sebelum Zomer menerbitkan tulisan di situsnya.
“Saya pribadi menganggap memimpin dua minggu tidak cukup untuk proyek sukarela, di mana orang bisa sibuk, berlibur, memiliki kehidupan pribadi, dll dan tidak dibayar karena siap dipanggil untuk setiap masalah,” katanya.
“Faktanya, banyak perusahaan besar dengan ratusan orang dibayar untuk melakukan ini membutuhkan waktu lebih lama untuk merilis perbaikan.”
Malyshev juga mempertanyakan beberapa klaim yang dibuat dalam tulisan Zomer- up, termasuk proof-of-concept yang menunjukkan bug dapat digunakan untuk eksekusi kode arbitrer pada server PHP.
“Saya lebih suka penulis memiliki sedikit lebih banyak kesabaran dan tidak terburu-buru dengan pengungkapannya,” katanya.
Zomer berkata: “Penting untuk diperhatikan bahwa kedua belah pihak membuat kesalahan dalam keadilan. Mereka seharusnya merespons lebih cepat, dan saya seharusnya lebih sabar dan eksplisit tentang harapan saya sejak awal.
“Dalam retrospeksi, saya seharusnya menangani situasi secara berbeda. Namun, saat ini saya sedang mengembangkan kebijakan pengungkapan terkoordinasi untuk menghindari kesalahan seperti itu terjadi di pihak saya di masa mendatang.”
JANGAN LUPA BACA Alat peretasan web terbaru – Q2 2022
Referensi PortSwigger.com