В ядре Linux устранена следующая уязвимость:
net: openvswitch: исправить потенциальный UAF при сбое подключения счетчика
При присоединении вновь созданного счетчика функция Attach_meter() делает
новый счетчик виден другим процессорам, но впоследствии может все равно выйти из строя. В случае сбоя он отсоединяет счетчик и возвращает ошибку. Однако это неожиданное поведение для ovs_meter_cmd_set().
который использует простой kfree(meter) при сбое подключения, не дожидаясь
Читателям RCU прекратить его использование, предполагая, что оно никогда не будет видно.
Это никогда не является проблемой для ovs-vswitchd, поскольку он всегда создает счетчики.
прежде чем создавать какие-либо потоки, которые их используют. Но УАФ может сработать
с помощью специального приложения с использованием uAPI:
ОШИБКА: KASAN: slab-use-after-free в ovs_meter_execute (net/openvswitch/meter.c:653)
Чтение размера 8 по адресу ffff88810d152650 с помощью Taskmeter/2508. Отслеживание вызова:
ovs_meter_execute (net/openvswitch/meter.c:653)
do_execute_actions (net/openvswitch/actions.c:1407)
ovs_execute_actions (net/openvswitch/actions.c:1584)
ovs_packet_cmd_execute (net/openvswitch/datapath.c:703)
...
netlink_sendmsg (af_netlink.c:1900)
Выделено заданием 2519:
__kasan_kmalloc (mm/kasan/common.c:398 мм/kasan/common.c:415)
ovs_meter_cmd_set (net/openvswitch/meter.c:422)
...
netlink_sendmsg (af_netlink.c:1900)
Освобожден заданием 2519:
kсвободный (мм/слуб.ц:2705 мм/слуб.ц:6405 мм/слуб.ц:6720)
ovs_meter_cmd_set (net/openvswitch/meter.c:479)
...
netlink_sendmsg (af_netlink.c:1900)
Исправьте это, убедившись, что Attach_meter() не делает счетчик видимым.
до тех пор, пока все проверки не будут выполнены и функция больше не сможет выйти из строя.
Это также гарантирует, что значение «хеш-функции» рассчитывается после потенциального изменение размера таблицы. Об этом сообщает Trend Micro Zero Day Initiative как ZDI-CAN-31642.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: net: openvswitch: fix potential UAF on meter attach failure While attaching a newly created meter attach_meter() function makes the new meter visible to other CPUs but can still fail afterwards. On failure, it detaches the meter back and returns an error. However, this is an unexpected behavior for the ovs_meter_cmd_set() that uses a plain kfree(meter) on attach failure without waiting for RCU readers to stop using it, assuming it was never visible. This is never a problem for ovs-vswitchd as it always creates meters before creating any flows that use them. But the UAF can be triggered with a custom application using uAPI: BUG: KASAN: slab-use-after-free in ovs_meter_execute (net/openvswitch/meter.c:653) Read of size 8 at addr ffff88810d152650 by task meter/2508 Call Trace: ovs_meter_execute (net/openvswitch/meter.c:653) do_execute_actions (net/openvswitch/actions.c:1407) ovs_execute_actions (net/openvswitch/actions.c:1584) ovs_packet_cmd_execute (net/openvswitch/datapath.c:703) ... netlink_sendmsg (af_netlink.c:1900) Allocated by task 2519: __kasan_kmalloc (mm/kasan/common.c:398 mm/kasan/common.c:415) ovs_meter_cmd_set (net/openvswitch/meter.c:422) ... netlink_sendmsg (af_netlink.c:1900) Freed by task 2519: kfree (mm/slub.c:2705 mm/slub.c:6405 mm/slub.c:6720) ovs_meter_cmd_set (net/openvswitch/meter.c:479) ... netlink_sendmsg (af_netlink.c:1900) Fix that by making sure attach_meter() doesn't make the meter visible until all the checks are done and the function can't fail anymore. This also makes sure the "hash" value is calculated after the potential re-sizing of the table. Reported by Trend Micro's Zero Day Initiative as ZDI-CAN-31642.
Характеристики атаки
Последствия
Строка CVSS v3.1