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-hr48-h3fc-qpqw Nov 24, 2021

Package

npm katran (npm)

Affected versions

< 4.4.18 >= 5.0.0, < 5.0.10 >= 6.0.0, < 6.1.9

Patched versions

4.4.18 5.0.10 6.1.9

Description

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

Severity

High

CVE ID

CVE-2021-37712

Weaknesses

No CWEs