Darbe
Keyfi Dosya Oluşturma, Keyfi Dosya Üzerine Yazma, Keyfi Kod Yürütme
node-tar, konumu sembolik bir bağlantı ile değiştirilecek herhangi bir dosyanın ayıklanmamasını garanti etmeyi amaçlar. Bu, kısmen, çıkarılan dizinlerin sembolik bağlantılar olmamasını sağlayarak elde edilir. Ek olarak, belirli bir yolun bir dizin olup olmadığını belirlemek için gereksiz stat çağrılarını önlemek için, dizinler oluşturulurken yollar önbelleğe alınır.
Bu mantık, iki dizin içeren tar dosyalarını ve aynı değere normalize edilmiş unicode değerleri içeren adlara sahip bir sembolik bağlantıyı çıkarırken yetersizdi. Ek olarak, Windows sistemlerinde, uzun yol bölümleri, 8.3 "kısa yol" karşılıklarıyla aynı dosya sistemi varlıklarına çözümlenir. Bu nedenle, özel olarak hazırlanmış bir tar arşivi, aynı dosya sistemi varlığına çözümlenen yolun iki biçimine sahip dizinleri, ardından ilk biçimde bir ada sahip sembolik bir bağlantı ve son olarak ikinci biçimi kullanan bir dosya içerebilir. Bu, dizinlerdeki düğüm-tar sembolik bağlantı kontrollerini atlamaya yol açtı, esasen güvenilmeyen bir tar dosyasının rastgele bir konuma sembolik bağlanmasına ve ardından bu konuma rastgele dosyaların çıkarılmasına izin vererek, rastgele dosya oluşturmaya ve üzerine yazmaya izin verdi.
v3 dalı node-tarkullanımdan kaldırıldı ve bu sorunlar için düzeltme eki almadı. Hâlâ bir v3 sürümü kullanıyorsanız, daha yeni bir sürüme güncellemenizi öneririz node-tar. Bu mümkün değilse, aşağıda bir geçici çözüm mevcuttur.
Yamalar
6.1.9 || 5.0.10 || 4.4.18
Geçici çözümler
Kullanıcılar, sembolik bağların çıkarılmasını önleyen özel bir filtre yöntemi oluşturarak yükseltme yapmadan bu güvenlik açığını çözebilir.
const tar = gerektirir ( 'tar' )
katran . x ( {
dosya : 'archive.tgz' ,
filtre : ( dosya , giriş ) => {
if ( giriş . type === 'SymbolicLink' ) {
return false
} else {
return true
}
}
} )
Kullanıcıların katran girdisini kendileri temizlemeye çalışmak yerine en son yamalı sürümlere yükseltmeleri önerilir.
Düzeltmek
Dizin önbelleğindeki ve yol rezervasyon sistemlerindeki yolları karşılaştırırken sorun aşağıdaki şekillerde ele alınır:
String.normalize('NFKD')Yöntem, maksimum uyumlu ve çoklu kod nokta formunda ilk normalize tüm Unicode kullanılır.
Tüm eğik çizgiler /Windows sistemlerinde normalleştirilir (posix sistemlerinde, \geçerli bir dosya adı karakteridir ve bu nedenle olduğu gibi bırakılır).
Windows sistemlerinde sembolik bir bağlantı ile karşılaşıldığında, tüm dizin önbelleği temizlenir. Dizinleri diğer (simgesel olmayan) giriş türleri ile değiştirmek için 8.3 kısa adın kullanımıyla ilgili çakışmalar, arşivlerin düzgün şekilde çıkarılamamasına neden olabilir, ancak rastgele dosya yazmalarına neden olmaz.
Referanslar
GHSA-qq89-hq3f-393p
https://www.npmjs.com/package/tar
https://nvd.nist.gov/vuln/detail/CVE-2021-37712
https://www.oracle.com/security-alerts/cpuoct2021.html
Darbe
Keyfi Dosya Oluşturma, Keyfi Dosya Üzerine Yazma, Keyfi Kod Yürütme
node-tar, konumu sembolik bir bağlantı ile değiştirilecek herhangi bir dosyanın ayıklanmamasını garanti etmeyi amaçlar. Bu, kısmen, çıkarılan dizinlerin sembolik bağlantılar olmamasını sağlayarak elde edilir. Ek olarak, belirli bir yolun bir dizin olup olmadığını belirlemek için gereksiz stat çağrılarını önlemek için, dizinler oluşturulurken yollar önbelleğe alınır.
Bu mantık, iki dizin içeren tar dosyalarını ve aynı değere normalize edilmiş unicode değerleri içeren adlara sahip bir sembolik bağlantıyı çıkarırken yetersizdi. Ek olarak, Windows sistemlerinde, uzun yol bölümleri, 8.3 "kısa yol" karşılıklarıyla aynı dosya sistemi varlıklarına çözümlenir. Bu nedenle, özel olarak hazırlanmış bir tar arşivi, aynı dosya sistemi varlığına çözümlenen yolun iki biçimine sahip dizinleri, ardından ilk biçimde bir ada sahip sembolik bir bağlantı ve son olarak ikinci biçimi kullanan bir dosya içerebilir. Bu, dizinlerdeki düğüm-tar sembolik bağlantı kontrollerini atlamaya yol açtı, esasen güvenilmeyen bir tar dosyasının rastgele bir konuma sembolik bağlanmasına ve ardından bu konuma rastgele dosyaların çıkarılmasına izin vererek, rastgele dosya oluşturmaya ve üzerine yazmaya izin verdi.
v3 dalı node-tarkullanımdan kaldırıldı ve bu sorunlar için düzeltme eki almadı. Hâlâ bir v3 sürümü kullanıyorsanız, daha yeni bir sürüme güncellemenizi öneririz node-tar. Bu mümkün değilse, aşağıda bir geçici çözüm mevcuttur.
Yamalar
6.1.9 || 5.0.10 || 4.4.18
Geçici çözümler
Kullanıcılar, sembolik bağların çıkarılmasını önleyen özel bir filtre yöntemi oluşturarak yükseltme yapmadan bu güvenlik açığını çözebilir.
const tar = gerektirir ( 'tar' )
katran . x ( {
dosya : 'archive.tgz' ,
filtre : ( dosya , giriş ) => {
if ( giriş . type === 'SymbolicLink' ) {
return false
} else {
return true
}
}
} )
Kullanıcıların katran girdisini kendileri temizlemeye çalışmak yerine en son yamalı sürümlere yükseltmeleri önerilir.
Düzeltmek
Dizin önbelleğindeki ve yol rezervasyon sistemlerindeki yolları karşılaştırırken sorun aşağıdaki şekillerde ele alınır:
String.normalize('NFKD')Yöntem, maksimum uyumlu ve çoklu kod nokta formunda ilk normalize tüm Unicode kullanılır.
Tüm eğik çizgiler /Windows sistemlerinde normalleştirilir (posix sistemlerinde, \geçerli bir dosya adı karakteridir ve bu nedenle olduğu gibi bırakılır).
Windows sistemlerinde sembolik bir bağlantı ile karşılaşıldığında, tüm dizin önbelleği temizlenir. Dizinleri diğer (simgesel olmayan) giriş türleri ile değiştirmek için 8.3 kısa adın kullanımıyla ilgili çakışmalar, arşivlerin düzgün şekilde çıkarılamamasına neden olabilir, ancak rastgele dosya yazmalarına neden olmaz.
Referanslar
GHSA-qq89-hq3f-393p
https://www.npmjs.com/package/tar
https://nvd.nist.gov/vuln/detail/CVE-2021-37712
https://www.oracle.com/security-alerts/cpuoct2021.html