Ad

CVE-2026-89713

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

В ядре Linux устранена следующая уязвимость: NFSD: проверьте разрешение на усечение при блокировке индексного дескриптора nfsd_setattr() проверяет, требуется ли для обновления размера NFSD_MAY_TRUNC. прежде чем он примет inode_lock(). При сравнении используется выбранный размер файла. благодаря этому разблокированному чтению, но фактическое обновление ATTR_SIZE применяется позже под inode_lock() с помощью notify_change(). При этом остается окно TOCTOU для файлов, доступных только для добавления.

Если клиент отправляет SETATTR, который не сжимает файл во время разблокировки. пример, параллельное добавление может расширить файл до nfsd_setattr() принимает inode_lock(). notify_change() затем применяет реальное усечение без проверки NFSD_MAY_TRUNC, которая отклоняет IS_APPEND(inode). ВФС усеченные пути системных вызовов перед выполнением собственных проверок только на добавление вызывая notify_change(), поэтому NFSD должен принять это решение против заблокированный размер, который скоро изменится. Разделите получение количества записей от проверки разрешения на усечение.

Сохраните get_write_access() до того, как сработает заблокированный setattr, затем перепроверьте находится ли запрошенный размер ниже i_size_read(inode) после inode_lock() был получен до notify_change(ATTR_SIZE). Это также позволяет избежать простая разблокированная загрузка inode->i_size.

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

In the Linux kernel, the following vulnerability has been resolved: NFSD: check truncate permission under inode lock nfsd_setattr() checks whether a size update needs NFSD_MAY_TRUNC before it takes inode_lock(). The comparison uses the file size sampled by that unlocked read, but the actual ATTR_SIZE update is applied later under inode_lock() by notify_change(). This leaves a TOCTOU window for append-only files. If a client sends a SETATTR that does not shrink the file at the time of the unlocked sample, a concurrent append can extend the file before nfsd_setattr() takes inode_lock(). notify_change() then applies a real truncation without the NFSD_MAY_TRUNC check that rejects IS_APPEND(inode). The VFS truncate syscall paths perform their own append-only checks before calling notify_change(), so NFSD must make this decision against the locked size it is about to change. Split the write-count acquisition from the truncation permission check. Keep get_write_access() before the locked setattr work, then recheck whether the requested size is below i_size_read(inode) after inode_lock() has been acquired and before notify_change(ATTR_SIZE). This also avoids the plain unlocked inode->i_size load.

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

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

Последствия

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

Строка CVSS v3.1