CVE-2026-64450
Təsvir
Linux nüvəsində aşağıdakı zəiflik aradan qaldırılıb: tipc: broadcast Gap ACK bloklarında sərhədləri aşan oxuma xətası düzəldildi Broadcast PROTOCOL/STATE_MSG məlumat sahəsində Gap ACK blocks yazısını daşıya bilər. tipc_get_gap_ack_blks() funksiyası yalnız yazının len sahəsinin onun ugack_cnt/bgack_cnt sayları ilə daxili uyğunluğunu yoxlayır (sz == struct_size(p, gacks, ugack_cnt + bgack_cnt)); lakin yazının faktiki olaraq mesajın məlumat sahəsinə, msg_data_sz(), sığışdığını yoxlamır. Unicast çağırıcısı olan tipc_link_proto_rcv() bunu məhdudlaşdırır ("if (glen > dlen) break;"), lakin broadcast çağırıcısı olan tipc_bcast_sync_rcv() qaytarılan ölçünü nəzərə almır, buna görə də tipc_link_advance_transmq() hücum edən tərəfindən idarə olunan sayla yazını qəbul edilən skb-dən kopyalayır: this_ga = kmemdup(ga, struct_size(ga, gacks, ga->bgack_cnt), GFP_ATOMIC); TIPC_GAP_ACK_BLOCK razılaşdıran bir TIPC qonşusu, məlumat sahəsi kiçik olan və len = 0x400, bgack_cnt = 0xff və ugack_cnt = 0 olan Gap ACK yazısı daşıyan adi bir broadcast STATE_MSG (msg_bc_ack_invalid() təmizdir) vasitəsilə bunu tetikləyir. Bu zaman len dəyəri struct_size(p, gacks, 255)-ə bərabər olur, beləliklə uyğunluq yoxlamasından keçir və ga NULL olmur; kmemdup() funksiyası çox daha kiçik olan skb-dən struct_size(ga, gacks, 255) = 1024 baytı oxuyur: BUG: KASAN: slab-out-of-bounds in kmemdup_noprof+0x48/0x60 Read of size 1024 at addr ffff0000c7030d38 by task poc864/69 Call trace: kmemdup_noprof+0x48/0x60 tipc_link_advance_transmq+0x86c/0xb80 tipc_link_bc_ack_rcv+0x19c/0x1e0 tipc_bcast_sync_rcv+0x1c4/0x2c4 tipc_rcv+0x85c/0x1340 tipc_l2_rcv_msg+0xac/0x104 The buggy address belongs to the object at ffff0000c7030d00 which belongs to the cache skbuff_small_head of size 704 The buggy address is located 56 bytes inside of allocated 704-byte region [ffff0000c7030d00, ffff0000c7030fc0) Kopyalanmış baytlar sonradan gap/ack dəyərləri kimi istifadə olunur, lakin onların necə istifadə edilməsindən asılı olmayaraq, kmemdup() zamanı oxuma artıq sərhədləri aşmış olur. Unicast STATE yolu belə bir mesajı rədd edir: "if (glen > dlen) break;" ifadəsi STATE_MSG emalının qalan hissəsini ötürür və skb azad edilir. Broadcast yolunun da bunu rədd etməsi təmin edildi. Artıq tipc_bcast_sync_rcv() yazını msg_data_sz() ilə müqayisə edərək məhdudlaşdırır və yazı sığmadıqda, skb-nin emal edilməsi əvəzinə atılması üçün tipc_node_bc_sync_rcv() vasitəsilə tipc_rcv()-ə geri bildirir. Bu yolda ga sıfırlanmır: ga == NULL artıq "Selective ACK olmadan köhnə peer" deməkdir ki, bu da ayrı bir legitim vəziyyətdir.
Necə düzəltmək olar
- linux linux_kernel5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 5.8 ≤ v < 5.10.261, 5.11 ≤ v < 5.15.212, 5.16 ≤ v < 6.1.178, 6.2 ≤ v < 6.6.145, 6.7 ≤ v < 6.12.96, 6.13 ≤ v < 6.18.39, 6.19 ≤ v < 7.1.4, 7.2 | 5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.