Ad

CVE-2026-89679

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

В ядре Linux устранена следующая уязвимость: nfsd: исправлено нулевое разыменование в nfsd4_setattr для атрибутов временной метки делегирования. Когда запрос SETATTR включает FATTR4_WORD2_TIME_DELEG_ACCESS или FATTR4_WORD2_TIME_DELEG_MODIFY в растровом изображении атрибута, nfsd4_setattr() устанавливает deleg_attrs=true и вызывает nfs4_preprocess_stateid_op() для проверки штатид. Если клиент предоставляет NFSv4 «один идентификатор состояния» (все байты 0xFF), check_special_stateids() возвращает nfs_ok без заполнения вывода указатель nfs4_stid, поскольку путь со специальным идентификатором в nfs4_preprocess_stateid_op() переходит к выполнению: с s==NULL и Блок «if (s)», который бы устанавливал *cstid, пропускается.

Локальная переменная `st` остается НУЛЕВЫМ. Вернёмся в nfsd4_setattr(), блок if (deleg_attrs), затем безоговорочно разыменовывает st->sc_type (по смещению 4 от NULL), вызывая ошибку ядра. Это можно удаленно запустить любым клиентом NFSv4: отправьте COMPOUND [PUTROOTFH, SETATTR(ONE_STATEID, {bmval2=FATTR4_WORD2_TIME_DELEG_ACCESS, ...})].

Никакой аутентификации, делегирования или предварительного состояния не требуется. Исправьте это, добавив проверку NULL перед разыменованием. Специальный статус это не идентификатор делегирования, поэтому существующее возвращаемое значение nfserr_bad_stateid уже правильно; нам нужно только охранять само разыменование указателя.

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

In the Linux kernel, the following vulnerability has been resolved: nfsd: fix null dereference in nfsd4_setattr for deleg timestamp attrs When a SETATTR request includes FATTR4_WORD2_TIME_DELEG_ACCESS or FATTR4_WORD2_TIME_DELEG_MODIFY in the attribute bitmap, nfsd4_setattr() sets deleg_attrs=true and calls nfs4_preprocess_stateid_op() to validate the stateid. If the client supplies the NFSv4 "one stateid" (all-0xFF bytes), check_special_stateids() returns nfs_ok without populating the output nfs4_stid pointer, because the special-stateid path in nfs4_preprocess_stateid_op() jumps to done: with s==NULL, and the "if (s)" block that would set *cstid is skipped. The local variable `st` remains NULL. Back in nfsd4_setattr(), the if (deleg_attrs) block then unconditionally dereferences st->sc_type (at offset 4 from NULL), causing a kernel oops. This is remotely triggerable by any NFSv4 client: send COMPOUND [PUTROOTFH, SETATTR(ONE_STATEID, {bmval2=FATTR4_WORD2_TIME_DELEG_ACCESS, ...})]. No authentication, delegation, or prior state is required. Fix by adding a NULL check before the dereference. A special stateid is not a delegation stateid, so the existing nfserr_bad_stateid return value is already correct; we only need to guard the pointer dereference itself.

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

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

Последствия

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

Строка CVSS v3.1