CVE-2023-24536
Açıklama
Çok parçalı (multipart) form ayrıştırma işlemi, çok sayıda parça içeren form girdilerini işlerken yüksek miktarda CPU ve bellek tüketebilir. Bu durum birkaç nedenden kaynaklanmaktadır: 1. mime/multipart.Reader.ReadForm, ayrıştırılan bir multipart formun tüketebileceği toplam belleği sınırlar. ReadForm, tüketilen bellek miktarını eksik hesaplayabilir ve bu da amaçlanandan daha büyük girdilerin kabul edilmesine yol açabilir. 2. Toplam belleğin sınırlandırılması, çok sayıda parçaya sahip formlardaki çok sayıdaki küçük tahsisatın çöp toplayıcı (garbage collector) üzerindeki artan baskısını hesaba katmaz. 3. ReadForm, çok sayıda kısa ömürlü tampon (buffer) tahsis edebilir ve bu da çöp toplayıcı üzerindeki baskıyı daha da artırır. Bu faktörlerin birleşimi, bir saldırganın multipart formları ayrıştıran bir programın yüksek miktarda CPU ve bellek tüketmesine neden olmasına izin verebilir ve potansiyel olarak hizmet reddi (denial of service) ile sonuçlanabilir. Bu durum, mime/multipart.Reader.ReadForm kullanan programların yanı sıra net/http paketindeki Request metodları olan FormFile, FormValue, ParseMultipartForm ve PostFormValue ile gerçekleştirilen form ayrıştırmalarını etkiler. Düzeltme ile birlikte ReadForm artık ayrıştırılan formların bellek tüketimini daha iyi tahmin etmekte ve çok daha az kısa ömürlü tahsisat gerçekleştirmektedir. Ek olarak, düzeltilmiş mime/multipart.Reader, ayrıştırılan formların boyutuna şu sınırları getirir: 1. ReadForm ile ayrıştırılan formlar 1000'den fazla parça içeremez. Bu sınır GODEBUG=multipartmaxparts= ortam değişkeni ile ayarlanabilir. 2. NextPart ve NextRawPart ile ayrıştırılan form parçaları 10.000'den fazla başlık alanı içeremez. Ayrıca, ReadForm ile ayrıştırılan formlar tüm parçalar genelinde 10.000'den fazla başlık alanı içeremez. Bu sınır GODEBUG=multipartmaxheaders= ortam değişkeni ile ayarlanabilir.
Nasıl düzeltilir
- golang go1.19.8, 1.20.3 ya da sonraki bir sürüm
- stdlib1.19.8, 1.20.3 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| golang go | v < 1.19.8, 1.20.0 ≤ v < 1.20.3 | 1.19.8, 1.20.3 |
| stdlibGo | v < 1.19.8, 1.20.0-0 ≤ v < 1.20.3 | 1.19.8, 1.20.3 |
Sürümünüzü kontrol edin
Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.
Attack Surface Management
Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.