CVE-2024-26629

Orta

Açıklama

Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: nfsd: RELEASE_LOCKOWNER düzeltmesi nfsd4_release_lockowner() içindeki so_count testi anlamsız ve zararlıdır. Uyuma işlemini yapmayacak şekilde değiştirilen check_for_locks() kullanımı geri getirilmiştir. İlk olarak: zararlıdır. nfsd4_release_lockowner() için yazılan kdoc yorumunda belgelendiği üzere, so_count testi geçici olarak yanlış pozitif sonuç döndürebilir ve gerçekte hiçbir kilit tutulmadığı halde NFS4ERR_LOCKS_HELD dönmesine neden olabilir. Bu durum açıkça bir protokol ihlalidir ve Linux NFS istemcisinde hatalı davranışlara yol açabilir. Eğer başka bir iş parçacığı, istek alındığında belirtilen sahibin çakışan bir kilide sahip olması nedeniyle başarısız olan bir LOCK isteğini hâlâ işliyorsa ve bu sırada RELEASE_LOCKOWNER gönderilirse; söz konusu LOCK isteğini işleyen nfsd iş parçacığı, kilit sahibine yönelik bir referans (conflock) tutabilir ve bu da nfsd4_release_lockowner()'ın hatalı bir hata kodu döndürmesine neden olur. Linux NFS istemcisi, önce tüm kilitleri serbest bırakmadan asla NFS4_RELEASE_LOCKOWNER göndermediği için bu hatanın imkansız olduğunu bilir ve NFS4ERR_LOCKS_HELD hatasını görmezden gelir. Kilit sahibinin aslında serbest bırakıldığını varsayar ve daha sonraki bir kilitleme isteğinde aynı kilit sahibi tanımlayıcısını kullanmakta özgür hisseder. Önceki bir RELEASE işleminin başarısız olduğu bir kilit sahibi tanımlayıcısını yeniden kullandığında, doğal olarak sıfır değerinde bir lock_seqid kullanacaktır. Ancak kilit sahibini serbest bırakmayan sunucu, daha büyük bir lock_seqid bekleyecek ve buna karşılık NFS4ERR_BAD_SEQID ile yanıt verecektir. Dolayısıyla, so_count testinin izin verdiği yanlış pozitiflerin oluşmasına izin vermek açıkça zararlıdır. Test anlamsızdır çünkü... herhangi bir anlam ifade etmemektedir. so_count üç farklı sayımın toplamıdır: 1/ so_stateids üzerinde listelenen durumlar kümesi 2/ bu durumlardan herhangi birine ait aktif VFS kilitleri kümesi 3/ çakışan kilitler gibi çeşitli geçici sayımlar. '2'ye karşı test edildiğinde, bunlardan birinin find_lockowner_str_locked() tarafından elde edilen geçici referans olduğu açıktır. Diğerinin ne olmasının beklendiği ise belli değildir. Pratikte sayı genellikle 2'dir çünkü so_stateids üzerinde tam olarak bir durum vardır. Daha fazla olsaydı, bu işlem başarısız olurdu. Yaptığım testlerde RELEASE_LOCKOWNER'ın çağrıldığı iki durum görüyorum. Bir durumda, RELEASE_LOCKOWNER'dan önce CLOSE çağrılır. Bu, tüm kilit durumlarının kaldırılmasına ve dolayısıyla kilit sahibinin atılmasına neden olur (kilit durumu atıldığında genellikle gerçekleştiği üzere, artık referans kalmadığında kaldırılır). nfsd4_release_lockowner() kilit sahibinin mevcut olmadığını bulduğunda başarıyla döner. Diğer durum ise '2' değerinde bir so_count ve so_stateid içinde listelenmiş tam olarak bir durum göstermektedir. Görünüşe göre Linux istemcisi her dosya için ayrı bir kilit sahibi kullanıyor ve bu da kilit sahibi başına bir kilit durumuyla sonuçlanıyor, dolayısıyla '2' üzerindeki bu test güvenlidir. Başka bir istemci için güvenli olmayabilir. Bu nedenle bu yama, nfs4_file üzerinde referans almaması, böylece nfsd_file_put() fonksiyonunu çağırmaması ve uyumaması için check_for_locks() fonksiyonunu (yeniş) find_any_file_locked() kullanacak şekilde değiştirir. Bu kontrolle birlikte, so_count'u gizemli '2' değeriyle test etmek yerine check_for_locks() kullanımını geri getirmek güvenlidir.

ÖnemOrta
CVSS5.5
İstismar olasılığı—
ÜrünLinux Kernel
Yayın13 Mar 2024
İlk görülme13 Mar 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.1.79, 6.6.15, 6.7.3 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel5.19 ≤ v < 6.1.79, 6.2 ≤ v < 6.6.15, 6.7 ≤ v < 6.7.3, 6.86.1.79, 6.6.15, 6.7.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.

Intelligence 360 paketinde

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.