Ad

CVE-2026-89695

HIGH CVSS 3.1: 7,5 EPSS 0.49%
Обновлено 13 сентября 2026
Linux
Параметр Значение
CVSS 7,5 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: nfsd: ограничить количество декодированных ACL POSIX до связанной стоимости сортировки nfsd4_decode_posixacl() считывает счетчик записей u32 из сети и передает это прямо к posix_acl_alloc() и sort_pacl_range(). Последнее Пузырьковая сортировка O(n^2), поэтому количество, выбранное клиентом, приводит к неограниченному использованию ЦП. путь составной обработки сервера. nfsd4_decode_posixacl() xdr_stream_decode_u32(&count) /* u32 без ограничения */ posix_acl_alloc (счетчик, GFP_KERNEL) sort_pacl_range(*acl, 0, count - 1) /* пузырьковая сортировка O(n^2) */ Сторона кодировщика в том же файле уже отклоняет списки ACL, у которых a_count превышает NFS_ACL_MAX_ENTRIES, но декодер, представленный в фиксации 5fc51dfc2eb1 («NFSD: добавить поддержку черновых ACL POSIX для декодирования XDR») опустил симметричную проверку. Исправьте это, отклонив количество проводов, превышающее NFS_ACL_MAX_ENTRIES, с помощью nfserr_inval перед любым выделением, поэтому сортировка ограничена NFS_ACL_MAX_ENTRIES^2 сравнения.

Пока мы здесь, также исправьте возврат nfserr_resource, если posix_acl_alloc() завершается с ошибкой. Это недопустимый код ошибки для версии 4.1+. Изменить он возвращает nfserr_jukebox, поскольку это больше подходит для памяти сбои в распределении.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: nfsd: cap decoded POSIX ACL count to bound sort cost nfsd4_decode_posixacl() reads a u32 entry count off the wire and passes it straight to posix_acl_alloc() and sort_pacl_range(). The latter is an O(n^2) bubble sort, so a client-chosen count drives unbounded CPU in the server's compound processing path. nfsd4_decode_posixacl() xdr_stream_decode_u32(&count) /* uncapped u32 */ posix_acl_alloc(count, GFP_KERNEL) sort_pacl_range(*acl, 0, count - 1) /* O(n^2) bubble sort */ The encoder side in the same file already rejects ACLs whose a_count exceeds NFS_ACL_MAX_ENTRIES, but the decoder introduced in commit 5fc51dfc2eb1 ("NFSD: Add support for XDR decoding POSIX draft ACLs") omitted the symmetric check. Fix by rejecting a wire count greater than NFS_ACL_MAX_ENTRIES with nfserr_inval, before any allocation, so the sort is bounded by NFS_ACL_MAX_ENTRIES^2 comparisons. While we're in here, also fix the nfserr_resource return if posix_acl_alloc() fails. That's not a legal error code for v4.1+. Change it to return nfserr_jukebox as that's more appropriate for memory allocation failures.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Нет
Нет утечки данных
Целостность
Нет
Нет модификации данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1