CVE-2026-64450
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: tipc: broadcast Gap ACK bloklarındaki sınır dışı okuma hatası düzeltildi Bir broadcast PROTOCOL/STATE_MSG, veri alanında bir Gap ACK blokları kaydı taşıyabilir. tipc_get_gap_ack_blks() yalnızca kaydın len alanının ugack_cnt/bgack_cnt sayımlarıyla tutarlı olduğunu doğrular (sz == struct_size(p, gacks, ugack_cnt + bgack_cnt)); ancak kaydın mesaj veri alanı olan msg_data_sz() içerisine gerçekten sığdığını kontrol etmez. Unicast çağırıcısı tipc_link_proto_rcv() bunu sınırlar ("if (glen > dlen) break;"), fakat broadcast çağırıcısı tipc_bcast_sync_rcv() döndürülen boyutu göz ardı eder, bu nedenle tipc_link_advance_transmq() saldırgan tarafından kontrol edilen bir sayım ile kaydı alıcı skb üzerinden kopyalar: this_ga = kmemdup(ga, struct_size(ga, gacks, ga->bgack_cnt), GFP_ATOMIC); TIPC_GAP_ACK_BLOCK üzerinde anlaşmış bir TIPC komşusu, veri alanı kısa olacak şekilde boyutlandırılmış ve len = 0x400, bgack_cnt = 0xff ve ugack_cnt = 0 değerlerine sahip bir Gap ACK kaydı taşıyan sıradan bir broadcast STATE_MSG (msg_bc_ack_invalid() temiz) ile bu durumu tetikler. Bu durumda len değeri struct_size(p, gacks, 255) değerine eşit olur, böylece tutarlılık kontrolü geçer ve ga NULL olmaz; kmemdup(), çok daha küçük olan skb üzerinden struct_size(ga, gacks, 255) = 1024 bayt okur: 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) Kopyalanan baytlar daha sonra gap/ack değerleri olarak tüketilir, ancak nasıl kullanıldıklarından bağımsız olarak kmemdup() aşamasında okuma işlemi zaten sınırların dışına çıkmıştır. Unicast STATE yolu böyle bir mesajı düşürür: "if (glen > dlen) break;" ifadesi STATE_MSG işleminin geri kalanını atlar ve skb serbest bırakılır. Broadcast yolunun da aynı şekilde davranması sağlanmıştır. tipc_bcast_sync_rcv() artık kaydı msg_data_sz() değerine göre sınırlar ve kayıt sığmadığında, skb işlenmek yerine atılması için tipc_node_bc_sync_rcv() aracılığıyla tipc_rcv()'ye raporlar. Bu yolda ga temizlenmez: ga == NULL olması zaten "Selective ACK özelliği olmayan eski eş" anlamına gelir ki bu ayrı ve meşru bir durumdur.
Nasıl düzeltilir
- linux linux_kernel5.10.261, 5.15.212, 6.1.178, 6.6.145, 6.12.96, 6.18.39, 7.1.4 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 | 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 |
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.