CVE-2024-26996
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: usb: gadget: f_ncm: usb ep taşıma hatası sonrası yeniden bağlama sırasında ncm nesnesindeki UAF düzeltildi ncm fonksiyonu çalışırken usb0 arayüzü bağlantıyı kesmek için durdurulduğunda eth_stop() çağrılır. Bu noktada, eğer usb_ep_enable() içinde tesadüfen bir usb taşıma hatası meydana gelirse, 'in_ep' ve/veya 'out_ep' etkinleştirilmemiş olabilir. Ardından, ncm ayırmasını (unbind) devre dışı bırakmak için ncm_disable() çağrılır ancak 'in_ep' etkinleştirilmediği için gether_disconnect() hiçbir zaman çağrılmaz. Sonuç olarak, ncm nesnesi ncm ayırmasında serbest bırakılır ancak 'ncm->port' ile ilişkili olan 'dev->port_usb' NULL değildir. Netdev'i kurtarmak için ncm tekrar bağlandığında (bind), ncm nesnesi yeniden tahsis edilir ancak usb0 arayüzü hâlâ daha önce serbest bırakılmış olan ncm nesnesiyle ilişkilidir. Bu nedenle, usb0 arayüzü aktif olduğunda ve eth_start_xmit() çağrıldığında, serbest bırakılan ncm nesnesine referans verilir ve bu durum serbest bırakıldıktan sonra kullanım (use-after-free) bellek hatasına neden olabilir. [configfs üzerinden unlink fonksiyonu] usb0: eth_stop dev->port_usb=ffffff9b179c3200 --> usb_ep_enable() içinde hata oluşur. NCM: ncm_disable: ncm=ffffff9b179c3200 --> ncm->port.in_ep->enabled false olduğu için gether_disconnect() çağrılmaz. NCM: ncm_unbind: ncm unbind ncm=ffffff9b179c3200 NCM: ncm_free: ncm free ncm=ffffff9b179c3200 <-- serbest bırakılan ncm [configfs üzerinden link fonksiyonu] NCM: ncm_alloc: ncm alloc ncm=ffffff9ac4f8a000 NCM: ncm_bind: ncm bind ncm=ffffff9ac4f8a000 NCM: ncm_set_alt: ncm=ffffff9ac4f8a000 alt=0 usb0: eth_open dev->port_usb=ffffff9b179c3200 <-- önceden serbest bırakılan ncm usb0: eth_start dev->port_usb=ffffff9b179c3200 <-- eth_start_xmit() --> dev->wrap() Unable to handle kernel paging request at virtual address dead00000000014f Bu yama, 'dev->port_usb' ilişkisini kesmek için gether_disconnect()'i çağırmak amacıyla ncm_disable() aşamasında 'ncm->netdev' değerinin NULL olup olmadığını kontrol ederek sorunu gidermektedir. Gether bağlantısı kurulmuş olsa bile 'ncm->port.in_ep->enabled' etkinleştirilmemiş olabileceği için, gether_connect/disconnect çağırmak adına 'ncm->netdev' kontrolünün yapılması daha makuldür.
Nasıl düzeltilir
- linux linux_kernel5.15.157, 6.1.88, 6.6.29, 6.8.8 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | v < 5.15.157, 5.16 ≤ v < 6.1.88, 6.2 ≤ v < 6.6.29, 6.7 ≤ v < 6.8.8, 6.9 | 5.15.157, 6.1.88, 6.6.29, 6.8.8 |
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.