CVE-2023-53369
Açıklama
Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: net: dcb: DCB_ATTR_BCN ayrıştırmak için doğru ilkeyi seçin dcbnl_bcn_setcfg, tb[DCB_ATTR_BCN] ayrıştırmak için hatalı bir ilke kullanır; bu durum 859ee3c43812 ("DCB: Add support for DCB BCN") commit'inde ortaya çıkmıştır. Aşağıdaki koddaki yoruma bakın static int dcbnl_bcn_setcfg(...) { ... ret = nla_parse_nested_deprecated(..., dcbnl_pfc_up_nest, .. ) // !!! dcbnl_pfc_up_nest, enum dcbnl_pfc_up_attrs içindeki // DCB_PFC_UP_ATTR_0 ile DCB_PFC_UP_ATTR_ALL arasındaki öznitelikler için ... for (i = DCB_BCN_ATTR_RP_0; i <= DCB_BCN_ATTR_RP_7; i++) { // !!! enum dcbnl_bcn_attrs içindeki DCB_BCN_ATTR_RP_0 ile DCB_BCN_ATTR_RP_7 arasındaki ... value_byte = nla_get_u8(data[i]); ... } ... for (i = DCB_BCN_ATTR_BCNA_0; i <= DCB_BCN_ATTR_RI; i++) { // !!! enum dcbnl_bcn_attrs içindeki DCB_BCN_ATTR_BCNA_0 ile DCB_BCN_ATTR_RI arasındaki ... value_int = nla_get_u32(data[i]); ... } ... } Yani, nla_parse_nested_deprecated, dcbnl_pfc_up_attrs içinde tanımlanan nlattr'ları ayrıştırmak için dcbnl_pfc_up_nest özniteliklerini kullanır. Ancak aşağıdaki erişim kodu her nlattr'ı dcbnl_bcn_attrs öznitelikleri olarak alır. dcbnl_bcn_attrs için ilişkili nla_policy'ye bakıldığında, bu iki ilkenin başlangıç kısmının "aynı" olduğu görülebilir. static const struct nla_policy dcbnl_pfc_up_nest[...] = { [DCB_PFC_UP_ATTR_0] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_1] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_2] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_3] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_4] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_5] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_6] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_7] = {.type = NLA_U8}, [DCB_PFC_UP_ATTR_ALL] = {.type = NLA_FLAG}, }; static const struct nla_policy dcbnl_bcn_nest[...] = { [DCB_BCN_ATTR_RP_0] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_1] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_2] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_3] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_4] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_5] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_6] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_7] = {.type = NLA_U8}, [DCB_BCN_ATTR_RP_ALL] = {.type = NLA_FLAG}, // buradan itibaren bir miktar farklıdır [DCB_BCN_ATTR_BCNA_0] = {.type = NLA_U32}, ... [DCB_BCN_ATTR_ALL] = {.type = NLA_FLAG}, }; Bu nedenle mevcut kod hatalıdır ve bu nla_parse_nested_deprecated, dcbnl_pfc_up_nest sınırlarını aşarak DCB_BCN_ATTR_BCNA_0'dan itibaren öznitelikleri ayrıştırmak için bitişik nla_policy'yi kullanabilir. Dolayısıyla, iç içe tb[DCB_ATTR_BCN] TLV'sini ayrıştırmak için doğru ilke olan dcbnl_bcn_nest kullanılmalıdır.
Nasıl düzeltilir
- linux linux_kernel5.4.253, 5.10.190, 5.15.126, 6.1.45, 6.4.10 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 | 2.6.29 ≤ v < 5.4.253, 5.5 ≤ v < 5.10.190, 5.11 ≤ v < 5.15.126, 5.16 ≤ v < 6.1.45, 6.2 ≤ v < 6.4.10, 6.5 | 5.4.253, 5.10.190, 5.15.126, 6.1.45, 6.4.10 |
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.