CVE-2023-24538
Açıklama
Şablonlar, ters tırnakları (`) Javascript dize ayırıcıları olarak uygun şekilde değerlendirmemekte ve bunları beklendiği gibi kaçırmamaktadır. Ters tırnaklar, ES6'dan beri JS şablon literaalleri için kullanılmaktadır. Eğer bir şablon, bir Javascript şablon litterali içinde bir Go şablon eylemi içeriyorsa, eylemin içeriği litterali sonlandırmak için kullanılabilir ve Go şablonuna rastgele Javascript kodu enjekte edilebilir. ES6 şablon litteralleri oldukça karmaşık olduğundan ve kendileri de dize interpolasyonu yapabildiğinden, bu davranışa izin vermenin belirgin olarak güvenli bir yolu olmadığı için bunların içinde Go şablon eylemlerinin kullanılmasına (örneğin "var a = {{.}}") basitçe izin verilmemesine karar verilmiştir. Bu durum, github.com/google/safehtml ile aynı yaklaşımı benimsemektedir. Düzeltme ile birlikte Template.Parse, bu tür şablonlarla karşılaştığında değeri 12 olan bir ErrorCode ile bir Error döndürür. Bu ErrorCode şu anda dışa aktarılmamıştır ancak Go 1.21 sürümünde dışa aktarılacaktır. Önceki davranışa güvenen kullanıcılar, ters tırnakların artık kaçırılacağı uyarısıyla, bunu GODEBUG bayrağı jstmpllitinterp=1 kullanarak yeniden etkinleştirebilirler. Bunun dikkatle kullanılması gerekir.
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.