- Yama var
- Son 7 gün
CVE-2026-98870
Linux ksmbd: Bağlantı sonlandığında eski kanalların tüm oturumlardan kaldırılmaması nedeniyle bellek sonrası kullanım (use-after-free) açığı
- Yayımlandı
- Güncellendi
- 24 Eki 2026
- Açık yaşı
- 5 gün
- Kaydı açan
- Linux
ÖzetTürkçe
Linux çekirdeğindeki ksmbd bileşeninde, ksmbd_sessions_deregister fonksiyonu bir bağlantının kanallarını diğer oturumların kanal listelerinden yalnızca conn->binding bayrağı hâlâ ayarlıyken kaldırmaktadır. conn->binding geçici bir bayraktır; bağlama SESSION_SETUP işlemi tamamlandığında veya aynı bağlantı üzerinde sonraki bağlama dışı bir SESSION_SETUP işleminde (bağlanmış bir kanal üzerinde yeniden kimlik doğrulama ya da SessionId==0 ile yeni kurulum) temizlenir. Bu nedenle, bir bağlantı kanalını başka bir oturumun ksmbd_chann_list listesine bağladıktan sonra conn->binding bayrağını temizlerse, bağlantı koptuğunda o kanal sahip oturumun listesinde kalır. Kanalın chann->conn işaretçisi artık serbest bırakılmış bir ksmbd_conn yapısına işaret eder. Sahip bağlantı daha sonra sonlandığında, ikinci döngü bu bayat kanala erişir ve serbest bırakılmış ksmbd_conn yapısına yazma yapan bellek sonrası kullanım (use-after-free) oluşur; aynı bayat kanal /proc üzerinden show_proc_session tarafından da dolaşılır. Kanal listesi hiçbir zaman boşalmadığı için oturum da bellekte sızdırılmış olur. Düzeltme, bağlantının sonlandırılmasında conn->binding koşulunu kaldırarak her bağlantının kanallarını her oturumdan her zaman kaldırmasını sağlar. CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H vektörüne göre CVSS puanı 8.8 (YÜKSEK) olarak belirtilmiştir. Etkilenen sürümler: >= 5.15.222, < 5.16; düzeltme sürüm 5.16 içindedir.
Kaynaktaki açıklama (İngilizce)
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: remove stale channels from all sessions on teardown
ksmbd_sessions_deregister() removes a connection's channels from other
sessions' channel lists only while conn->binding is still set:
if (conn->binding) {
hash_for_each_safe(sessions_table, ...)
ksmbd_chann_del(conn, sess);
}
conn->binding is a transient flag: it is cleared once a binding
SESSION_SETUP completes, and also by a subsequent non-binding
SESSION_SETUP on the same connection (a reauthentication on a bound
channel, or a new SessionId==0 setup). A connection that has bound a
channel into another session's ksmbd_chann_list and then clears
conn->binding leaves that channel behind when it disconnects: the
channel, whose chann->conn points at the now freed struct ksmbd_conn,
stays on the owner session's list.
When the owning connection later tears down, the second loop
dereferences the stale channel:
xa_for_each(&sess->ksmbd_chann_list, chann_id, chann)
if (chann->conn != conn)
ksmbd_conn_set_exiting(chann->conn); /* freed */
which is a use-after-free write into the freed ksmbd_conn (the same
stale channel is also walked by show_proc_session() through /proc). The
session is leaked as well, because its channel list never empties.
Remove the conn->binding gate so a connection always removes its
channels from every session on teardown.
Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.
Etkilenen sürümler1 yazılım
| Yazılım | Etkilenen | Düzeltildiği sürüm |
|---|---|---|
| Linux | ≥ 5.15.222, < 5.16 | 5.16 |
Kaynaklar7 kaynak
- CVE.org kaydı
- NVD kaydı
- git.kernel.org/…ble/c/f8200bb4994e65a2e5c5b314789eeae39078619d Diğer
- git.kernel.org/…ble/c/9cd6d714d3ca0cff296542dc989696884e41970f Diğer
- git.kernel.org/…ble/c/b145f9b56c87f9c23ad5464ab0844dbc1de12b36 Diğer
- git.kernel.org/…ble/c/a15cae16f4432a5ad919ee633e31b07178492955 Diğer
- git.kernel.org/…ble/c/b10665730fbf6b5e45fe422badcbbc3f0df96ef5 Diğer
Kayıt geçmişi
- Yayımlandı
İlgili açıklar
Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.