CVE-2025-39986
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: can: sun4i_can: 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 olup olmadığını 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. Böylece sun4ican_start_xmit(), doğru şekilde işleyemeyeceği bir CAN XL çerçevesi alır ve bunu bir CAN çerçevesi olarak yanlış yorumlar. Bu durum bir arabellek taşmasına yol açabilir. Sürücü, şu satırda başka hiçbir kontrol yapmadan cf->len değerini olduğu gibi kullanacaktır: dlc = cf->len; Burada cf->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ğundan, birkaç satır aşağıda şu işlem yapılırken 247 baytlık bir arabellek taşması meydana gelir: for (i = 0; i < dlc; i++) writel(cf->data[i], priv->base + (dreg + i * 4)); 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 Linux063539db42203b29d5aa2adf0cae3d68c646a6b6, 4f382cc887adca8478b9d3e6b81aa6698a95fff4, 60463a1c138900494cb3adae41142a11cd8feb3c, a61ff7ac93270d20ca426c027d6d01c8ac8e904c, 2e423e1990f3972cbea779883fef52c2f2acb858, de77841652e57afbc46e9e1dbf51ee364fc008e1, 7f7b21026a6febdb749f6f6f950427245aa86cce, 61da0bd4102c459823fbe6b8b43b01fb6ace4a22 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < 063539db42203b29d5aa2adf0cae3d68c646a6b6, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < 4f382cc887adca8478b9d3e6b81aa6698a95fff4, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < 60463a1c138900494cb3adae41142a11cd8feb3c, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < a61ff7ac93270d20ca426c027d6d01c8ac8e904c, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < 2e423e1990f3972cbea779883fef52c2f2acb858, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < de77841652e57afbc46e9e1dbf51ee364fc008e1, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < 7f7b21026a6febdb749f6f6f950427245aa86cce, 0738eff14d817a02ab082c392c96a1613006f158 ≤ v < 61da0bd4102c459823fbe6b8b43b01fb6ace4a22, 4.4 | 063539db42203b29d5aa2adf0cae3d68c646a6b6, 4f382cc887adca8478b9d3e6b81aa6698a95fff4, 60463a1c138900494cb3adae41142a11cd8feb3c, a61ff7ac93270d20ca426c027d6d01c8ac8e904c, 2e423e1990f3972cbea779883fef52c2f2acb858, de77841652e57afbc46e9e1dbf51ee364fc008e1, 7f7b21026a6febdb749f6f6f950427245aa86cce, 61da0bd4102c459823fbe6b8b43b01fb6ace4a22 |
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.