Berikutan CVE-2023-36035, satu kelemahan penyeludupan permintaan HTTP yang teruk dalam .NET yang memperoleh penilaian keterukan hampir maksimum 9.9, komuniti pembangun sedang terlibat dalam perbincangan hangat mengenai prinsip keselamatan asas. Kelemahan tersebut, yang menjejaskan pelbagai versi ASP.NET Core dan pelayan Kestrel, telah mendedahkan persoalan yang lebih mendalam tentang bagaimana kita mengendalikan protokol web dan sama ada bersikap terlalu akomodatif terhadap permintaan yang tidak terbentuk mencipta risiko keselamatan sistemik.
![]() |
|---|
| Mesej sandaran yang dipaparkan dalam pelayar web, menonjolkan kepentingan pengendalian permintaan yang betul dalam pembangunan web |
Kelemahan Yang Menggegarkan Ekosistem .NET
Penemuan terkini CVE-2023-36035 mendedahkan bahawa rangka kerja .NET milik Microsoft mengandungi kecacatan kritikal dalam cara ia memproses permintaan HTTP/1.1. Kelemahan ini membenarkan penyerang melakukan serangan penyeludupan permintaan, berpotensi membolehkan akses tanpa kebenaran kepada data sensitif dan pelanggaran keselamatan dahsyat yang lain. Isu ini berpunca daripada penghuraian header HTTP yang tidak betul dalam System.Net.Http.dll, khususnya dalam cara rangka kerja mengendalikan header Content-Length dan Transfer-Encoding.
Apa yang menjadikan kelemahan ini amat membimbangkan ialah impaknya yang meluas merentasi pelbagai versi .NET, daripada versi lama yang tidak disokong sehingga ke keluaran terkini .NET 9. Komuniti dengan pantas menyedari bahawa ini bukan sekadar pepijat lain untuk ditampal—ia mewakili kecacatan asas dalam cara pelayan web mentafsir permintaan HTTP yang kabur.
Versi .NET yang Terjejas:
- ASP.NET Core: >= 6.0.0 <= 6.0.36
- ASP.NET Core: >= 8.0.0 <= 8.0.20
- ASP.NET Core: >= 9.0.0 <= 9.0.9
- ASP.NET Core: <= 10.0.0-rc.1
- Microsoft.AspNetCore.Server.Kestrel.Core: <= 2.3.0
Undang-undang Postel: Prinsip Kekukuhan atau Mimpi Ngeri Keselamatan?
Perbincangan dengan pantas beralih kepada Undang-undang Postel, juga dikenali sebagai Prinsip Kekukuhan, yang menyatakan: Bersifat konservatif dalam apa yang anda hantar, bersifat liberal dalam apa yang anda terima. Prinsip ini telah memandu reka bentuk protokol internet selama beberapa dekad, tetapi ramai dalam komuniti kini mempersoalkan sama ada ia telah luput kegunaannya dalam konteks keselamatan moden.
Saya sering berdebat dengan orang tentang bagaimana undang-undang Postel adalah tersalah anggap. Bersikap liberal dalam apa yang anda terima datang dengan kos yang sangat besar kepada seluruh ekosistem dan terdapat cara yang jauh lebih baik untuk mereka bentuk fleksibiliti ke dalam protokol.
Sentimen ini bergema dalam seluruh perbincangan komuniti, dengan beberapa pemberi komen menegaskan bahawa penghuraian yang longgar mencipta rantaian kebergantungan di mana klien mula bergantung pada tingkah laku tidak standard. Sebaik sahaja tingkah laku ini menjadi jangkaan, ia menjadi hampir mustahil untuk membetulkan isu keselamatan tanpa menjejaskan keserasian. Perang penghuraian HTML antara pelayar berfungsi sebagai cerita amaran—apabila satu pelayar menjadi longgar dalam penghuraiannya, semua yang lain mesti mengikutinya untuk kekal kompetitif, mewujudkan perlumbaan ke bawah dari segi keselamatan.
Masalah Proksi dan Cabaran Persekitaran
Tema utama lain dalam perbincangan komuniti berkisar tentang cabaran persekitaran ujian dan pelaksanaan. Beberapa pemberi komen menyatakan bahawa persekitaran pengeluaran selalunya berbeza dengan ketara daripada persekitaran pembangunan dan pementasan, terutamanya dalam cara proksi dan penyeimbang beban dikonfigurasikan. Ini mewujudkan situasi di mana kelemahan mungkin tidak muncul semasa ujian tetapi menjadi boleh dieksploitasi dalam pengeluaran.
Masalah ini diperburukkan dalam persekitaran perusahaan di mana kekangan kos menghalang penyelenggaraan persekitaran pementasan dan pengeluaran yang sama. Seperti yang dinyatakan oleh seorang pemberi komen, platform perbankan besar yang berharga puluhan malah ratusan juta ringgit untuk dijalankan tidak boleh diduakan untuk tujuan ujian. Selain itu, keperluan kawal selia dalam sektor seperti penjagaan kesihatan dan kewangan selalunya melarang penggunaan data pengeluaran dalam persekitaran pembangunan, menjadikan ujian yang tepat lebih mencabar.
Strategi Mitigasi Praktikal dan Realiti Pelaksanaan
Walaupun penyelesaian segera melibatkan penggunaan tampalan keselamatan, perbincangan komuniti mendedahkan kebimbangan yang lebih mendalam tentang mekanisme kemas kini. Tidak seperti aplikasi Windows tradisional yang menerima kemas kini automatik melalui Windows Update, aplikasi .NET yang dilaksanakan dalam bekas atau sebagai boleh laku berdiri sendiri memerlukan pembinaan semula dan pelaksanaan semula secara manual untuk menerima pembaikan keselamatan.
Pemarkahan kelemahan ini pada 9.9/10 mencetuskan perdebatan tentang sama ada ini mencerminkan risiko sebenar untuk kebanyakan pelaksanaan. Ramai berhujah bahawa aplikasi di belakang proksi moden seperti nginx, Cloudflare, atau AWS ALB berkemungkinan sudah dilindungi, memandangkan proksi ini akan menolak permintaan tidak terbentuk yang mengeksploitasi kelemahan tersebut. Walau bagaimanapun, aplikasi yang terdedah secara langsung kepada internet atau di belakang konfigurasi proksi lama kekal berisiko tinggi.
Strategi Mitigasi:
- Gunakan tampung keselamatan untuk CVE-2023-36035
- Lumpuhkan HTTP/1.1 jika boleh
- Gunakan proksi moden (nginx, Cloudflare, AWS ALB)
- Laksanakan pengesahan permintaan yang ketat
- Pertimbangkan untuk melumpuhkan HTTP/2 dalam konfigurasi yang terdedah
- Pastikan penghuraian yang konsisten antara pelayan bahagian hadapan dan bahagian belakang
Pertukaran Budaya dalam Pembangunan Web
Di luar spesifik teknikal, kelemahan ini telah mendorong renungan tentang budaya pembangunan. Pemberi komen menyatakan perbezaan antara amalan pembangunan .NET perusahaan, di mana pengesahan input yang ketat lebih biasa, dan amalan pembangunan web yang lebih luas di mana penghuraian longgar telah menjadi norma. Pergerakan kepada .NET Core dan pengguna rangka kerja yang semakin berkembang bermakna andaian budaya dari komuniti pembangunan yang berbeza kini berlanggar.
Perbincangan itu juga menyentuh jurang kemahiran dalam industri, dengan seorang pemberi komen secara terus terang menyatakan bahawa Kebanyakannya perkara ini berpunca daripada isu kemahiran. Ini mencerminkan kebimbangan bahawa pengetahuan protokol asas mungkin semakin merosot apabila pembangun lebih bergantung pada rangka kerja dan abstraksi daripada memahami protokol asas yang mereka gunakan.
Jenis-jenis Penyeludupan Permintaan HTTP yang Biasa:
- CL.TE: Bahagian hadapan menggunakan Content-Length, bahagian belakang menggunakan Transfer-Encoding
- TE.CL: Bahagian hadapan menggunakan Transfer-Encoding, bahagian belakang menggunakan Content-Length
- TE.TE: Kedua-duanya menyokong Transfer-Encoding, tetapi satu boleh dipengaruhi untuk tidak memprosesnya
Melihat Ke Hadapan: Reka Bentuk Protokol dan Keselamatan
Insiden CVE-2023-36035 berfungsi sebagai panggilan bangun untuk seluruh industri perisian. Walaupun menampal serta-merta adalah penting, perbualan yang lebih luas mencadangkan kita perlu mempertimbangkan semula prinsip asas reka bentuk dan pelaksanaan protokol. Komuniti nampaknya mencapai konsensus bahawa penghuraian ketat dan penolakan permintaan tidak terbentuk, walaupun berpotensi memecahkan beberapa sistem warisan, menyediakan keselamatan jangka panjang yang lebih baik daripada meneruskan dengan pelaksanaan yang longgar.
Apabila industri beralih ke protokol yang lebih baharu seperti HTTP/2 dan HTTP/3, terdapat peluang untuk belajar dari kesilapan ini dan membina asas yang lebih selamat. Walau bagaimanapun, ketekalan HTTP/1.1 dalam banyak persekitaran bermakna kelemahan ini akan kekal relevan untuk tahun-tahun akan datang, memerlukan kewaspadaan berterusan daripada pasukan pembangun dan operasi.
Tindak balas komuniti .NET terhadap kelemahan ini menunjukkan kedua-dua kematangan ekosistem perisian moden dalam menangani insiden keselamatan dan cabaran berterusan dalam mengimbangi keserasian dengan keselamatan. Seperti yang dinyatakan secara ringkas oleh seorang pemberi komen, kelemahan ini mewakili kos bersikap liberal dalam apa yang anda terima—satu kos yang industri mungkin tidak lagi sanggup bayar.
Rujukan: Memahami kelemahan .NET terburuk yang pernah ada: penyeludupan permintaan dan CVE-2023-36035

