Darbe
Keyfi Dosya Oluşturma, Keyfi Dosya Üzerine Yazma, Keyfi Kod Yürütme
node-tarsembolik bir bağlantı tarafından konumu 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, arşiv girişindeki sembolik bağlantı ve dizin adlarının posix sistemlerinde yol ayırıcı olarak ters eğik çizgi kullandığı, dizinle aynı ada sahip hem bir dizin hem de bir sembolik bağlantı içeren tar dosyalarını çıkarırken yetersizdi. Önbellek denetimi mantık hem kullanılan \ve /ancak yol ayırıcılar gibi karakterler \POSIX sistemlerinde geçerli bir dosya adı karakterdir.
Önce bir dizin oluşturarak ve ardından bu dizini bir sembolik bağlantıyla değiştirerek, böylece dizinlerdeki düğüm-tar sembolik bağlantı denetimlerini atlamak mümkün oldu, bu da esasen güvenilmeyen bir tar dosyasının rastgele bir konuma sembolik bağlantı oluşturmasına ve ardından bu konuma rastgele dosyaların çıkarılmasına izin verdi, böylece rastgele dosya oluşturmaya ve üzerine yazmaya izin verir.
Ek olarak, büyük/küçük harfe duyarsız dosya sistemlerinde de benzer bir karışıklık ortaya çıkabilir. Bir tar arşivi bir dizin içeriyorsa FOOadlı simgesel bir bağla ardından foo, daha sonra küçük harf duyarsız dosya sistemleri üzerinde, sembolik bağın oluşturulması dosya sistemi dizini kaldırmak ancak olur değil olarak saymazlar iç dizin önbellekten önbellek isabeti olarak kabul edilir. FOODizin içindeki bir sonraki dosya girişi , dizinin zaten oluşturulmuş olduğu düşünülerek sembolik bağlantının hedefine yerleştirilir.
Bu sorunlar 4.4.16, 5.0.8 ve 6.1.7 sürümlerinde ele alındı.
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
4.4.16 || 5.0.8 || 6.1.7
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
Sorun aşağıdaki şekillerde ele alınmaktadır:
Tüm yollar, /bir yol ayırıcı olarak kullanılmak üzere normalleştirilir , Windows sistemlerinde \ile değiştirilir /ve \posix sistemlerinde yolda bozulmadan bırakılır . Bu, yolların tüketildiği programın her düzeyinde derinlemesine gerçekleştirilir.
Dizin önbelleği budaması, büyük/küçük harfe duyarlı olmadan gerçekleştirilir. Bu , büyük/ küçük harfe duyarlı dosya sistemlerinde gereksiz önbellek kayıplarına neden olabilir , ancak performans etkisi ihmal edilebilir düzeydedir.
Uyarı
Bunun entry, tar'ın API'sinin çeşitli bölümlerinde gösterilen nesnelerin artık /Windows sistemlerinde bile her zaman bir yol ayırıcı olarak kullanılacağı anlamına geldiğini unutmayın . /Windows sistemlerinde geçerli bir yol ayırıcı olduğu gibi bunun sorunlara neden olması beklenmez , ancak veya gibi başka bir API'den gelen bir yol dizesiyle karşılaştırıldığında sorunlara neden olabilir .entry.pathfs.realpath()path.resolve()
Kullanıcılar, path.resolve()yolları birbirleriyle karşılaştırmadan önce olduğu gibi, iyi test edilmiş bir yöntem kullanarak her zaman yolları normalleştirmeye teşvik edilir .
Referanslar
GHSA-9r2w-394v-53qc
https://www.npmjs.com/package/tar
https://nvd.nist.gov/vuln/detail/CVE-2021-37701
https://www.oracle.com/security-alerts/cpuoct2021.html
Darbe
Keyfi Dosya Oluşturma, Keyfi Dosya Üzerine Yazma, Keyfi Kod Yürütme
node-tarsembolik bir bağlantı tarafından konumu 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, arşiv girişindeki sembolik bağlantı ve dizin adlarının posix sistemlerinde yol ayırıcı olarak ters eğik çizgi kullandığı, dizinle aynı ada sahip hem bir dizin hem de bir sembolik bağlantı içeren tar dosyalarını çıkarırken yetersizdi. Önbellek denetimi mantık hem kullanılan \ve /ancak yol ayırıcılar gibi karakterler \POSIX sistemlerinde geçerli bir dosya adı karakterdir.
Önce bir dizin oluşturarak ve ardından bu dizini bir sembolik bağlantıyla değiştirerek, böylece dizinlerdeki düğüm-tar sembolik bağlantı denetimlerini atlamak mümkün oldu, bu da esasen güvenilmeyen bir tar dosyasının rastgele bir konuma sembolik bağlantı oluşturmasına ve ardından bu konuma rastgele dosyaların çıkarılmasına izin verdi, böylece rastgele dosya oluşturmaya ve üzerine yazmaya izin verir.
Ek olarak, büyük/küçük harfe duyarsız dosya sistemlerinde de benzer bir karışıklık ortaya çıkabilir. Bir tar arşivi bir dizin içeriyorsa FOOadlı simgesel bir bağla ardından foo, daha sonra küçük harf duyarsız dosya sistemleri üzerinde, sembolik bağın oluşturulması dosya sistemi dizini kaldırmak ancak olur değil olarak saymazlar iç dizin önbellekten önbellek isabeti olarak kabul edilir. FOODizin içindeki bir sonraki dosya girişi , dizinin zaten oluşturulmuş olduğu düşünülerek sembolik bağlantının hedefine yerleştirilir.
Bu sorunlar 4.4.16, 5.0.8 ve 6.1.7 sürümlerinde ele alındı.
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
4.4.16 || 5.0.8 || 6.1.7
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
Sorun aşağıdaki şekillerde ele alınmaktadır:
Tüm yollar, /bir yol ayırıcı olarak kullanılmak üzere normalleştirilir , Windows sistemlerinde \ile değiştirilir /ve \posix sistemlerinde yolda bozulmadan bırakılır . Bu, yolların tüketildiği programın her düzeyinde derinlemesine gerçekleştirilir.
Dizin önbelleği budaması, büyük/küçük harfe duyarlı olmadan gerçekleştirilir. Bu , büyük/ küçük harfe duyarlı dosya sistemlerinde gereksiz önbellek kayıplarına neden olabilir , ancak performans etkisi ihmal edilebilir düzeydedir.
Uyarı
Bunun entry, tar'ın API'sinin çeşitli bölümlerinde gösterilen nesnelerin artık /Windows sistemlerinde bile her zaman bir yol ayırıcı olarak kullanılacağı anlamına geldiğini unutmayın . /Windows sistemlerinde geçerli bir yol ayırıcı olduğu gibi bunun sorunlara neden olması beklenmez , ancak veya gibi başka bir API'den gelen bir yol dizesiyle karşılaştırıldığında sorunlara neden olabilir .entry.pathfs.realpath()path.resolve()
Kullanıcılar, path.resolve()yolları birbirleriyle karşılaştırmadan önce olduğu gibi, iyi test edilmiş bir yöntem kullanarak her zaman yolları normalleştirmeye teşvik edilir .
Referanslar
GHSA-9r2w-394v-53qc
https://www.npmjs.com/package/tar
https://nvd.nist.gov/vuln/detail/CVE-2021-37701
https://www.oracle.com/security-alerts/cpuoct2021.html