CVE-2025-39987
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: can: hi311x: arabellek taşmasını önlemek için ndo_change_mtu() dolduruldu Bir PF_PACKET gönderimi, CAN çerçeve mantığının atlanmasına ve bir CAN sürücüsünün xmit() fonksiyonuna doğrudan ulaşılmasına olanak tanır. PF_PACKET çerçevesi tarafından gerçekleştirilen tek kontrol, skb->len değerinin arayüzün MTU değeriyle uyumlu olduğundan emin olmaktır. Maalesef, sun4i_can sürücüsü net_device_ops->ndo_change_mtu() kısmını doldurmadığı için, bir saldırganın örneğin şu işlemi yaparak geçersiz bir MTU yapılandırması mümkündür: $ ip link set can0 mtu 9999 Bunu yaptıktan sonra saldırgan, kötü amaçlı CAN XL çerçeveleri enjekte etmek için ETH_P_CANXL protokolünü kullanarak bir PF_PACKET soketi açabilir: socket(PF_PACKET, SOCK_RAW, htons(ETH_P_CANXL)) Örneğin: struct canxl_frame frame = { .flags = 0xff, .len = 2048, }; CAN sürücülerinin xmit() fonksiyonları, skb'nin geçerli olduğunu kontrol etmek için can_dev_dropped_skb() fonksiyonunu çağırır; ancak yukarıdaki koşullar altında, kötü amaçlı paket can_dev_dropped_skb() kontrollerini geçebilir: 1. skb->protocol, geçerli olan ETH_P_CANXL olarak ayarlanmıştır (fonksiyon gerçek cihaz yeteneklerini kontrol etmez). 2. uzunluk, geçerli bir CAN XL uzunluğudur. Bu nedenle, hi3110_hard_start_xmit() doğru şekilde işleyemeyeceği bir CAN XL çerçevesi alır ve bunu bir CAN çerçevesi olarak yanlış yorumlar. Sürücü, frame->len değerini başka hiçbir kontrol yapmadan olduğu gibi kullanacaktır. Bu durum, daha sonra hi3110_hw_tx() fonksiyonundaki şu satırda bir arabellek taşmasına neden olabilir: memcpy(buf + HI3110_FIFO_EXT_DATA_OFF, frame->data, frame->len); Burada frame->len, CAN XL çerçevesinin flags alanına karşılık gelir. Önceki örneğimizde canxl_frame->flags değerini 0xff olarak ayarlamıştık. Beklenen maksimum uzunluk 8 olduğu için, 247 baytlık bir arabellek taşması meydana gelir! Arayüzün MTU değerinin CAN_MTU'dan daha büyük bir değere ayarlanamamasını sağlamak için net_device_ops->ndo_change_mtu() doldurulmuştur. Kök nedenin düzeltilmesiyle bu arabellek taşması önlenmiştir.
Nasıl düzeltilir
- Linux Linuxf2c247e9581024d8b3dd44cbe086bf2bebbef42c, 8f351db6b2367991f0736b2cff082f5de4872113, 7ab85762274c0fa997f0ef9a2307b2001aae43c4, 57d332ce8c921d0e340650470bb0c1d707f216ee, be1b25005fd0f9d4e78bec6695711ef87ee33398, def814b4ba31b563584061d6895d5ff447d5bc14, e77fdf9e33a83a08f04ab0cb68c19ddb365a622f, ac1c7656fa717f29fac3ea073af63f0b9919ec9a ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < f2c247e9581024d8b3dd44cbe086bf2bebbef42c, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < 8f351db6b2367991f0736b2cff082f5de4872113, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < 7ab85762274c0fa997f0ef9a2307b2001aae43c4, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < 57d332ce8c921d0e340650470bb0c1d707f216ee, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < be1b25005fd0f9d4e78bec6695711ef87ee33398, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < def814b4ba31b563584061d6895d5ff447d5bc14, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < e77fdf9e33a83a08f04ab0cb68c19ddb365a622f, 57e83fb9b7468c75cb65cde1d23043553c346c6d ≤ v < ac1c7656fa717f29fac3ea073af63f0b9919ec9a, 4.12 | f2c247e9581024d8b3dd44cbe086bf2bebbef42c, 8f351db6b2367991f0736b2cff082f5de4872113, 7ab85762274c0fa997f0ef9a2307b2001aae43c4, 57d332ce8c921d0e340650470bb0c1d707f216ee, be1b25005fd0f9d4e78bec6695711ef87ee33398, def814b4ba31b563584061d6895d5ff447d5bc14, e77fdf9e33a83a08f04ab0cb68c19ddb365a622f, ac1c7656fa717f29fac3ea073af63f0b9919ec9a |
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.