CVE-2026-97555 в Linux Kernel: heap overflow в SMB cifs ACL и практическая проверка исправления

CVE: CVE-2026-97555
Продукт: Linux Kernel
Дата публикации: 25.09.2026
Критичность: HIGH
CVSS: 8.8 (3.1)
EPSS: 0,52%; процентиль 42,19%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


Уязвимость CVE-2026-97555 — это heap overflow в клиенте SMB модуля cifs Linux kernel. Ошибка возникает при переписывании DACL: буфер выделяется по размеру исходного ACL, но после подстановки новых SID из cifs.idmap каждый ACE может занять до 76 байт.

Переполнение записывается в память за выделенным блоком и фиксируется KASAN как slab-out-of-bounds в build_sec_desc. Для администратора это риск нестабильности ядра при работе с SMB-томами, где ACL переопределяются через idmap.

Основные характеристики​


Суть риска — переполнение кучи в ядре Linux при обработке SMB ACL, что может привести к повреждению памяти и падению ядра или непредсказуемому поведению. Метрика CVSS показывает высокий уровень влияния на конфиденциальность, целостность и доступность.

  • CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H, оценка 8.8 (HIGH).
  • EPSS: 0,52%, процентиль 42,19%.
  • Компонент: SMB client cifs в Linux kernel, файл fs/smb/client/cifsacl.c.
  • Тип ошибки: heap overflow при переписывании DACL owner/group rewrite.
  • Фикс: commit 0ee150794c75bcd0be0e24ff3394f433cbae18cc и stable backports.

Какие продукты и версии затронуты​


Затронут модуль cifs в Linux kernel. Конкретные версии дистрибутивов не раскрыты в переданных источниках; для проверки используется ядро с включённым SMB-клиентом и обработкой ACL.

  • Linux kernel stable tree, ветки, где применены backport-коммиты 0ee150794c75bcd0be0e24ff3394f433cbae18cc, 2a9aee9ef5622d58d8aafaa3263b3ffe70e2d9dd, 7fa84c9ca690643f429ae2709584a47e74b572c9 и fb736ab4fb8c4fdb8b2f9ccd3a62e03d11549ca1.
  • Версии ядра, не содержащие исправления в fs/smb/client/cifsacl.c.
  • Системы с mounted SMB share и опцией cifsacl или mode_from_sid.

Причина уязвимости​


Функция id_mode_to_cifs_acl выделяет буфер nsecdesclen на основе размера существующего DACL из dacl_ptr->size. При этом replace_sids_and_copy_aces может заменить owner/group SID в каждом ACE новым SID, полученным через cifs.idmap upcall.

Максимальный размер SID включает до 15 sub-authorities, что делает каждый ACE размером sizeof(struct smb_ace) — 76 байт. Если исходные SIDs короткие, а заменяющие длинные, суммарный размер переписанных ACE превышает выделенную область.

Ранняя логика различала cifsacl и mode_from_sid: для cifsacl добавлялся dacl_ptr->size, для mode_from_sid — num_aces * sizeof(struct smb_ace). Оба варианта не учитывали худший случай, когда каждый ACE переписывается с максимальным SID.

Как работает атака​


Путь данных начинается с SMB-клиентской операции над файлом или каталогом на mounted SMB share. При изменении ACL или передаче владения вызывается id_mode_to_cifs_acl.

Функция обращается к существующему DACL и рассчитывает длину нового security descriptor. Если mount использует cifsacl или mode_from_sid, расчёт длины зависит от предыдущей логики.

После исправления длина всегда считается как sizeof(struct smb_acl) + num_aces * sizeof(struct smb_ace), что покрывает заголовок smb_acl и максимум на каждый ACE.

Условия успешной эксплуатации​


Для воспроизведения ошибки необходимо:

  • активный SMB-клиентский модуль cifs в ядре;
  • mounted SMB share с поддержкой ACL;
  • операция, вызывающая переписывание DACL через id_mode_to_cifs_acl;
  • исходный DACL с короткими SIDs и возможность получить длинные заменяющие SID из cifs.idmap.

Доступ к конкретному SMB-тому и возможность инициировать изменение ACL или ownership являются практическим условием.

Возможный сценарий атаки​


Администратор подключает SMB share с cifsacl mount. На томе есть файл с короткими SIDs в ACE. При попытке изменить владельца или группу система вызывает cifs.idmap upcall для разрешения SID.

Заменяющие SID имеют больше sub-authorities, чем исходные. Функция id_mode_to_cifs_acl выделяет буфер по размеру старого ACL, затем replace_sids_and_copy_aces копирует переписанные ACE в этот буфер. Запись выходит за пределы выделенной области и попадает в соседний slab.

KASAN фиксирует событие как BUG: KASAN: slab-out-of-bounds in build_sec_desc+0x1e8a/0x2680 [cifs], с записью размера 4 по адресу, находящемуся на 0 байт справа от выделенной области размером 884 байта. Это подтверждает факт переполнения в ядре.

Есть ли публичный эксплойт​


В источниках присутствует только описание ошибки и commit-исправление. Публичный эксплойт, PoC или подтверждённая эксплуатация в реальных атаках не раскрыты.

Отсутствие сведений не означает отсутствие рабочего сценария; оно означает, что в переданном пакете доказательств такие данные не предоставлены.

Признаки эксплуатации​


Специфичных IOC для CVE-2026-97555 в источниках нет. Ниже приведены общие точки контроля, которые можно использовать как неспецифичные:

  • сообщения KASAN или slab-out-of-bounds с участием модуля cifs;
  • аварийное завершение ядра или panic при операциях над SMB-томами;
  • аномальные записи в syslog/kernel log после изменения ACL на SMB share;
  • рост числа ошибок I/O или замедлений при работе с файлами, имеющими DACL.

Эти признаки не являются уникальными для данной уязвимости и могут появляться при других сбоях ядра.

Как обнаружить атаку​


Для обнаружения можно использовать:

Bash:
grep -i 'kasan' /var/log/kern.log
grep -i 'slab-out-of-bounds' /var/log/kern.log
grep -i 'cifs' /var/log/kern.log
dmesg | grep -i 'cifs'
journalctl -k | grep -i 'cifs'

При наличии KASAN в ядре поиск по строкам build_sec_desc и cifs помогает сузить источник.

Как проверить свою версию​


Проверка версии ядра:

Bash:
uname -r
uname -a
cat /proc/version

Для проверки, включён ли модуль cifs:

Bash:
lsmod | grep cifs

Для просмотра параметров mount SMB-тома:

Bash:
mount | grep cifs
findmnt -t cifs

Исправление​


Исправление доступно в Linux kernel stable tree. Коммиты с идентификаторами:


Практическое действие — обновить ядро до версии, содержащей эти изменения. Конкретные номера релизов дистрибутивов не раскрыты в источниках.

Временные меры защиты​


Пока обновление ядра недоступно, можно снизить вероятность срабатывания:

  • ограничить операции над SMB share, где изменяются ACL или ownership;
  • использовать mount без cifsacl опции, если это допустимо для задач;
  • отключить cifs.idmap при работе с томами, где не требуется маппинг SID;
  • изолировать критичные серверы от внешних SMB-клиентов.

Эти меры не устраняют переполнение, а уменьшают частоту вызова уязвимого кода.

Как проверить устранение уязвимости​


После обновления ядра проверьте:

Bash:
uname -r
dmesg | grep -i 'cifs'
grep -i 'kasan' /var/log/kern.log

Если после обновления нет новых сообщений KASAN при операциях над SMB-томами с ACL, исправление подтверждено на уровне наблюдаемого поведения. Для точной проверки можно сравнить версию ядра с changelog дистрибутива или upstream stable release.

Вывод​


CVE-2026-97555 — это конкретная ошибка переполнения кучи в cifs SMB клиенте Linux kernel, связанная с расчётом длины буфера при переписывании DACL. Исправление меняет логику выделения на worst-case размер smb_acl plus num_aces * sizeof(struct smb_ace).

Для администратора главное действие — обновить ядро до стабильного релиза с этим commit и проверить отсутствие KASAN-сообщений после операций над SMB-томами.

Официальные источники​


  1. NVD — CVE-2026-97555
  2. FIRST EPSS — CVE-2026-97555
  3. smb: client: fix heap overflow in DACL owner/group rewrite - kernel/git/stable/linux.git - Linux kernel stable tree
  4. smb: client: fix heap overflow in DACL owner/group rewrite - kernel/git/stable/linux.git - Linux kernel stable tree
  5. smb: client: fix heap overflow in DACL owner/group rewrite - kernel/git/stable/linux.git - Linux kernel stable tree
  6. smb: client: fix heap overflow in DACL owner/group rewrite - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

История обновлений статьи​


  • 28.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ