← CVE Veritabanı

CVE-2026-89635

Kritik

Teknik Veri (Otomatik)

CVSS Skoru
9.8
EPSS
0.6%
CWE
—
KEV Durumu
Hayır

Yayım tarihi: 11 Eylül 2026

Linux çekirdeğinde aşağıdaki güvenlik açığı çözülmüştür: ksmbd: yalnızca yeniden açılmış dosyanın kendi oplock'ını dayanıklı yeniden bağlama ksmbd_reopen_durable_fd() işlevi, düğümün m_op_list'ini dolaşır ve yeniden bağlanan oturuma her ayrılmış oplock'ı yeniden bağlar: list_for_each_entry_rcu(op, &ci->m_op_list, op_entry, lockdep_is_held(&ci->m_lock)) { if (op->conn) continue; op->conn = ksmbd_conn_get(fp->conn); op->sess = work->sess; } Tek önemli nokta op->conn == NULL'dır, bu durum aynı düğümdeki her ayrılmış dayanıklı tutamaç için geçerli olur, yalnızca fp'ye ait olan değil. İki oturum aynı dosyada dayanıklı tutamaçlara sahipse ve her ikisi de bağlantısını keserse, yeniden bağlanan oturum diğer oturumun oplock'ını benimser: op->sess, referans alınmadan yeniden bağlanan oturumla üzerine yazılırken, op->conn bağlantıyı sabitler. Kardeş yıkma yolu, session_fd_check(), yıkılan bağlantının kimliğine (op->conn == conn) göre değil, paylaşılan duruma göre çalışır ve bu nedenle bu soruna sahip değildir. Benimseyen oturum yok edildiğinde, ksmbd_session_destroy() diğer oplock hala ona işaret ederken onu serbest bırakır. ksmbd_close_fd_app_instance_id()'deki okuyucu yalnızca opinfo->conn'u doğrular, bu referans yukarıda alınan sayesinde hala canlıdır ve sonra eski oturumu referanslar: if (!opinfo->conn) { up_read(&fp->f_ci->m_lock); goto out; } ft = &opinfo->sess->file_table; write_lock(&ft->lock); HATA: KASAN: slab-use-after-free in _raw_write_lock+0x74/0xd0 Boyut 4'ün addr ffff88810a970528 adresine kworker/0:0/9 tarafından yazma Çalışma kuyruğu: ksmbd-io handle_ksmbd_work Çağrı İzleme: _raw_write_lock+0x74/0xd0 ksmbd_close_fd_app_instance_id+0x183/0x410 smb2_open+0x1346/0x4430 handle_ksmbd_work+0x2bb/0x7b0 Kimliği doğrulanmış bir oturumdan, varsayılan dayanıklı-tutamaç ve oplock yapılandırması ile bir paylaşıma karşı erişildi: iki oturum aynı dosyayı ayrı AppInstanceIds ile dayanıklı-v2 tutamaçları ve RH kiralama ile açar, her ikisi de oturumunu kapatır, biri DH2C ile yeniden bağlanır ve daha sonra diğer AppInstanceId ile taşınan bir dayanıklı-v2 oluşturma, serbest bırakılan oturuma girer. Döngüyü yeniden açılmakta olan dosyanın sahip olduğu oplock ile sınırlayın.

Orijinal açıklama (İngilizce)

In the Linux kernel, the following vulnerability has been resolved: ksmbd: only rebind the reopened file's own oplock on durable reconnect ksmbd_reopen_durable_fd() walks the inode's m_op_list and rebinds every detached oplock to the reconnecting session: list_for_each_entry_rcu(op, &ci->m_op_list, op_entry, lockdep_is_held(&ci->m_lock)) { if (op->conn) continue; op->conn = ksmbd_conn_get(fp->conn); op->sess = work->sess; } The only key is op->conn == NULL, which every detached durable handle on that inode matches, not just the one owned by fp. When two sessions hold durable handles on the same file and both disconnect, reconnecting one of them adopts the other session's oplock: op->sess is overwritten with the reconnecting session without taking a reference on it, while op->conn pins the connection. The sibling teardown path, session_fd_check(), keys on the identity of the connection being torn down (op->conn == conn) rather than on shared state, and so does not have this problem. Once the adopting session is destroyed, ksmbd_session_destroy() frees it while the foreign oplock still points at it. The reader in ksmbd_close_fd_app_instance_id() validates only opinfo->conn, which is still live thanks to the reference taken above, and then dereferences the stale session: if (!opinfo->conn) { up_read(&fp->f_ci->m_lock); goto out; } ft = &opinfo->sess->file_table; write_lock(&ft->lock); BUG: KASAN: slab-use-after-free in _raw_write_lock+0x74/0xd0 Write of size 4 at addr ffff88810a970528 by task kworker/0:0/9 Workqueue: ksmbd-io handle_ksmbd_work Call Trace: _raw_write_lock+0x74/0xd0 ksmbd_close_fd_app_instance_id+0x183/0x410 smb2_open+0x1346/0x4430 handle_ksmbd_work+0x2bb/0x7b0 Reached from an authenticated session against a share with the default durable-handle and oplock configuration: two sessions open the same file with a durable-v2 handle and an RH lease under distinct AppInstanceIds, both log off, one reconnects with DH2C, and a later durable-v2 create carrying the other AppInstanceId walks into the freed session. Constrain the loop to the oplock owned by the file being reopened.

Bu CVE için henüz editoryal inceleme yapılmadı. Sadece otomatik teknik veri gösteriliyor.