Skip to content

Sembolik bağlantılar kullanılarak dizin önbelleği zehirlenmesi nedeniyle yetersiz sembolik bağlantı koruması yoluyla Keyfi Dosya Oluşturma/Üzerine Yazma

High
Codes-Exe published GHSA-hchr-cq4h-j622 Nov 24, 2021

Package

npm katran (npm)

Affected versions

< 4.4.16 >= 5.0.0, < 5.0.8 >= 6.0.0, < 6.1.7

Patched versions

4.4.16 5.0.8 6.1.7

Description

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

Severity

High

CVE ID

CVE-2021-37701

Weaknesses

No CWEs