libfuse — это эталонная реализация Linux FUSE. Начиная с версии 3.18.0 и до версии 3.18.2, разыменование NULL-указателя и утечка памяти в fuuse_uring_init_queue позволяют локальному пользователю аварийно завершить работу демона FUSE или вызвать исчерпание ресурсов. Если numa_alloc_local завершается с ошибкой во время настройки записи очереди io_uring, код продолжает работу с NULL указателями.
При сбое функции Fuse_uring_register_queue происходит утечка выделений NUMA, и функция неправильно возвращает успех. Затрагивается только транспорт io_uring; традиционный путь /dev/fuse не затрагивается. PoC подтвержден с помощью AddressSanitizer/LeakSanitizer.
Эта проблема исправлена в версии 3.18.2.
Показать оригинальное описание (EN)
libfuse is the reference implementation of the Linux FUSE. From version 3.18.0 to before version 3.18.2, a NULL pointer dereference and memory leak in fuse_uring_init_queue allows a local user to crash the FUSE daemon or cause resource exhaustion. When numa_alloc_local fails during io_uring queue entry setup, the code proceeds with NULL pointers. When fuse_uring_register_queue fails, NUMA allocations are leaked and the function incorrectly returns success. Only the io_uring transport is affected; the traditional /dev/fuse path is not affected. PoC confirmed with AddressSanitizer/LeakSanitizer. This issue has been patched in version 3.18.2.
Характеристики атаки
Последствия
Строка CVSS v3.1