В ядре Linux устранена следующая уязвимость: net: openvswitch: исправить валидацию среднего атрибута в push_nsh() действие Структура действ…
В ядре Linux устранена следующая уязвимость: net: openvswitch: исправить валидацию среднего атрибута в push_nsh() действие Структура действия push_nsh() выглядит так: OVS_ACTION_ATTR_PUSH_NSH(OVS_KEY_ATTR_NSH(OVS_NSH_KEY_ATTR_BASE,...)) Самый внешний атрибут OVS_ACTION_ATTR_PUSH_NSH ОК'ed nla_for_each_nested() внутри __ovs_nla_copy_actions(). Самый внутренний OVS_NSH_KEY_ATTR_BASE/MD1/MD2 в порядке от nla_for_each_nested() внутри nsh_key_put_from_nlattr(). Но ничто не проверяет, если атрибут Посередине - это нормально. Мы даже не проверяем, что этот атрибут является OVS_KEY_ATTR_NSH. Мы просто делаем двойную разворачивание с парой nla_data() звонки - первый раз напрямую при вызове validate_push_nsh() и второй раз в рамках макрос nla_for_each_nested(), который не является безопасный, потенциально вызывающий неверный доступ к памяти, если размер этого Атрибут неверный. Неудача может быть не замечена во время валидация из-за большего буфера netlink, но вызвать проблемы позже во время исполнение действия, где буфер выделяется точно на размер: BUG: KASAN: slab-out-of-bounds in nsh_hdr_from_nlattr+0x1dd/0x6a0 [openvswitch] Прочитайте размер 184 по адресу idr ff88816459a634 по заданию a.out/22624 CPU: 8 UID: 0 PID: 22624 6.18.0-rc7+ #115 ПРЕМПТ (добровольный) Трейс по вызову: <TASK> дап_стэк_lvl+0x51/0x70 print_address_description.constprop.0+0x2c/0x390 kasan_report+0xdd/0x110 kasan_check_range+0x35/0x1b0 __asan_memcpy+0x20/0x60 nsh_hdr_from_nlattr+0x1dd/0x6a0 [openvswitch] push_nsh+0x82/0x120 [openvswitch] do_execute_actions+0x1405/0x2840 [openvswitch] ovs_execute_actions+0xd5/0x3b0 [openvswitch] ovs_packet_cmd_execute+0x949/0xdb0 [openvswitch] genl_family_rcv_msg_doit+0x1d6/0x2b0 genl_family_rcv_msg+0x336/0x580 genl_rcv_msg+0x9f/0x130 netlink_rcv_skb+0x11f/0x370 genl_rcv+0x24/0x40 netlink_unicast+0x73e/0xaa0 netlink_sendmsg+0x744/0xbf0 __sys_sendto+0x3d6/0x450 do_syscall_64+0x79/0x2c0 вход_SYSCALL_64_after_hwframe+0x76/0x7e </ТАШКИ> Давайте добавим некоторые проверки, что атрибут правильного размера и он Единственный атрибут внутри действия. Технически, нет Реальная причина для OVS_KEY_ATTR_NSH быть там, так как мы знаем, что мы Нажимая на заголовок NSH уже, он просто создает дополнительное гнездование, но Вот как работает uAPI сегодня. Так что, сохраняя как есть.
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-5.10 | Отслеживается | |
| linux-6.1 | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |