CVE-2026-46227
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: sctp: SCTP_SENDALL içindeki sctp_sendmsg_to_asoc() sonrası liste imleci yeniden doğrulanıyor sctp_sendmsg() içerisindeki SCTP_SENDALL yolu, döngü gövdesi çalışmadan önce bir sonraki girdiyi @tmp değişkeninde önbelleğe alan list_for_each_entry_safe() ile ep->asocs üzerinde yineleme yapar. Gövde, sctp_wait_for_sndbuf() içinde soket kilidini bırakabilen sctp_sendmsg_to_asoc() fonksiyonunu çağırır. Kilit bırakıldığında, başka bir iş parçacığı @tmp içinde önbelleğe alınan ilişkilendirmeyi SCTP_SOCKOPT_PEELOFF yapabilir ve bunu sctp_sock_migrate() aracılığıyla yeni bir uç noktaya taşıyabilir (newep->asocs kısmına list_del_init() + list_add_tail()), ardından isteğe bağlı olarak yeni soketi kapatarak ilişkilendirmeyi kfree_rcu() üzerinden serbest bırakabilir. Önbelleğe alınan @tmp, kilit bırakılmışken softirq sırasında işlenen ağ kaynaklı bir ABORT işlemiyle de serbest bırakılabilir. sctp_wait_for_sndbuf(), yeniden kilitleme sırasında "sk != asoc->base.sk" ve "asoc->base.dead" kontrolleri aracılığıyla @asoc'yi (güncel girdi) yeniden doğrular ancak hiçbir şey @tmp'yi yeniden doğrulamaz. Başarılı bir dönüşten sonra, yineleyici bayatlamış olan @tmp'ye ilerler; bu durum ya bir serbest bırakıldıktan sonra kullanım (peeled soket kapatılmışsa) ya da yeni uç noktanın liste başına doğru bir liste yürütme işlemine (&newep->asocs ifadesinin struct sctp_association * olarak tür karmaşası yaşaması) yol açar. Her iki duruma da CapEff=0 üzerinden erişilebilir; tür karmaşası yolu, outqueue.sched->init_sid işaretçisi aracılığıyla kontrollü dolaylı çağrı sağlar. Hata, sctp_sendmsg_to_asoc() döndükten sonra @tmp değerinin @asoc üzerinden yeniden türetilmesiyle düzeltilmiştir. Bu noktada @asoc'nin hala ep->asocs üzerinde olduğu bilinmektedir: Bir ilişkilendirmeyi ep->asocs listesinden list_del yapan tek çağrıcılar sctp_association_free() (asoc->base.dead değerini ayarlar) ve sctp_assoc_migrate() (asoc->base.sk değerini değiştirir) fonksiyonlarıdır ve sctp_wait_for_sndbuf() herhangi bir başarılı dönüşten önce kilit altında her ikisini de kontrol eder; başarısız bir kontrol err < 0 olarak yayılır ve döngü yeniden türetme gerçekleşmeden önce sonlanır. sctp_sendmsg_check_sflags() içerisindeki SCTP_ABORT yolu 0 döndürür ve sctp_sendmsg_to_asoc() hiç çağrılmadan döngü 'continue' aşamasına geçer, böylece list_for_each_entry_safe() tarafından önbelleğe alınan @tmp, ba59fb027307 ("sctp: walk the list of asoc safely") yamasının eklendiği kilit tutulurken gerçekleşen serbest bırakma işlemini hala kapsar.
Nasıl düzeltilir
- linux linux_kernel5.10.258, 5.15.209, 6.1.175, 6.6.140, 6.12.90, 6.18.32, 7.0.9 ya da sonraki bir sürüm
- access.redhat.com/errata/RHSA-2026:27731
- access.redhat.com/errata/RHSA-2026:36956
- access.redhat.com/errata/RHSA-2026:26515
- access.redhat.com/errata/RHSA-2026:27735
- access.redhat.com/errata/RHSA-2026:34094
- access.redhat.com/errata/RHSA-2026:36018
- access.redhat.com/errata/RHSA-2026:59143
- access.redhat.com/errata/RHSA-2026:36349
- access.redhat.com/errata/RHSA-2026:59146
- access.redhat.com/errata/RHSA-2026:26535
- access.redhat.com/errata/RHSA-2026:33899
- access.redhat.com/errata/RHSA-2026:26563
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 4.17 ≤ v < 5.10.258, 5.11 ≤ v < 5.15.209, 5.16 ≤ v < 6.1.175, 6.2 ≤ v < 6.6.140, 6.7 ≤ v < 6.12.90, 6.13 ≤ v < 6.18.32, 6.19 ≤ v < 7.0.9, 7.1 | 5.10.258, 5.15.209, 6.1.175, 6.6.140, 6.12.90, 6.18.32, 7.0.9 |
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.
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.