Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE_2026_31694 — Пассивный сканер уязвимостей хостов Linux для CVE-2026-31694: проверяет запущенное ядро, конфигурацию FUSE, метаданные пакетов и признаки установленных исправлений, затем формирует персонализированные рекомендации по устранению уязвимости. | Kitploit
Инструменты/GitHubGitHub/zenzue/cve_2026_31694
Оборонительные ИнструментыСканеры уязвимостейАнализ уязвимостейАудит конфигурации
GitHubzenzue/cve_2026_31694

CVE_2026_31694

Пассивный сканер уязвимостей хостов Linux для CVE-2026-31694: проверяет запущенное ядро, конфигурацию FUSE, метаданные пакетов и признаки установленных исправлений, затем формирует персонализированные рекомендации по устранению уязвимости.

Репозиторий
31 месяц назадЕщё не проверено

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-31694 Пассивный сканер

Пассивный инструмент оценки хоста Linux для CVE-2026-31694 — внеграничной записи в кэше readdir подсистемы FUSE в ядре Linux.

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

Автор: Aung Myat Thu [w01f]


Содержание

  • Обзор
  • Сводка об уязвимости
  • Модель безопасности
  • Возможности
  • Требования
  • Установка
  • Использование
  • Параметры командной строки
  • Порядок оценки
  • Вердикты
  • Коды выхода
  • Источники обнаружения
  • Поддержка дистрибутивов
  • Формирование рекомендаций по смягчению
  • Поведение в контейнерах и WSL
  • Форматы отчётов
  • Автоматизация и интеграция
  • Эксплуатационные рекомендации
  • Ограничения
  • Устранение неполадок
  • Ссылки

Обзор

cve_2026_31694_scanner.py — локальная утилита оценки уязвимостей, не использующая эксплойты.

Она не подтверждает уязвимость путём запуска затронутого участка кода FUSE. Вместо этого она объединяет несколько пассивных индикаторов:

  • версия работающего ядра;
  • эталонные исправленные версии из апстрима;
  • текущий размер страницы памяти;
  • конфигурация ядра CONFIG_FUSE_FS;
  • зарегистрированные типы файловой системы FUSE;
  • наличие /dev/fuse и доступ текущего пользователя;
  • наличие вспомогательной утилиты монтирования FUSE;
  • активные точки монтирования FUSE;
  • проверка установленных исходников ядра;
  • принадлежность пакета ядра;
  • свидетельства из локального журнала изменений пакетов;
  • кешированные метаданные обновлений пакетов;
  • сравнение установленного и работающего ядра;
  • определение дистрибутива и пакетного менеджера;
  • определение контейнера, виртуальной машины и WSL.

Результат представляет собой оценку подверженности, а не доказательство на основе эксплойта.


Сводка об уязвимости

CVE-2026-31694 затрагивает кэш readdir подсистемы FUSE в ядре Linux.

Уязвимая логика вычисляет сериализованный размер записи каталога на основе управляемой сервером длины имени и копирует запись на одну страницу page-cache. Запись каталога с длиной имени 4095 может дать сериализованный размер 4120 байт.

В системе с страницами по 4096 байт такая запись превышает одну страницу на 24 байта.

Исправление из апстрима отклоняет записи каталога, которые не помещаются в одну страницу, до выполнения копирования в кэш.

Затронутый компонент```text

fs/fuse/readdir.c fuse_add_dirent_to_cache()

root@kitploit:~
### Базовые данные сканера

Сканер содержит следующие стабильные исправленные эталонные версии из upstream:

| Серия ядра | Исправленная эталонная версия |
|---|---:|
| 5.10 | 5.10.258 |
| 5.15 | 5.15.209 |
| 6.1 | 6.1.175 |
| 6.6 | 6.6.136 |
| 6.12 | 6.12.84 |
| 6.18 | 6.18.25 |
| 7.0 | 7.0.2 |
| Mainline | 7.1 или новее |

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

---

## Модель безопасности

Сканер спроектирован так, чтобы не вызывать уязвимую операцию.

### Сканер не делает

- не монтирует файловую систему FUSE;
- не открывает и не взаимодействует с `/dev/fuse`;
- не запускает FUSE-сервер;
- не передаёт специально сформированные записи каталогов;
- не выделяет память для тестирования размещения страниц;
- не выполняет груминг аллокаторов ядра;
- не изменяет `/etc/passwd`;
- не изменяет конфигурацию ядра;
- не загружает и не выгружает модули ядра;
- не изменяет права доступа к `/dev/fuse`;
- не устанавливает и не удаляет пакеты;
- не перезагружает систему;
- не пытается повысить привилегии.

### Сканер может

- читать файлы в `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src` и каталогах метаданных пакетов;
- выполнять ограниченные, доступные только для чтения запросы к пакетам;
- проверять активные точки монтирования и регистрацию файловых систем;
- записывать отчёт только при явном указании `--output`;
- выводить команды для смягчения последствий для ознакомления администратора.

Команды для смягчения последствий — это справочный вывод. Они никогда не выполняются автоматически.

---

## Возможности

### Идентификация хоста и ядра

- Читает `platform.release()` и разбирает версию ядра в стиле upstream.
- Читает `/etc/os-release` или `/usr/lib/os-release`.
- Определяет архитектуру CPU и размер страницы памяти.
- Определяет, принадлежит ли сканируемое ядро текущей операционной системе.

### Оценка подверженности FUSE

- Читает `CONFIG_FUSE_FS` из доступных источников конфигурации ядра.
- Определяет встроенную поддержку FUSE и конфигурации подгружаемых модулей.
- Читает `/proc/filesystems`.
- Проверяет метаданные `/dev/fuse` и права чтения/записи текущего пользователя.
- Находит `fusermount3` или `fusermount`.
- Разбирает активные FUSE-монтирования из `/proc/self/mountinfo`.

### Признаки наличия исправления

- Сравнивает текущую версию с исправленными эталонными версиями upstream.
- Ищет в установленных исходниках ядра защиту от записей чрезмерного размера.
- Проверяет локальные журналы изменений пакетов RPM или Debian на наличие:
  - `CVE-2026-31694`;
  - названия исправления upstream.

### Состояние пакетов и перезагрузки

- Пытается определить пакет, которому принадлежит работающее ядро.
- Запрашивает локальные метаданные менеджера пакетов без обновления репозиториев.
- Определяет более новое установленное ядро, если окружение хоста является авторитетным.
- Проверяет `/var/run/reboot-required`, где это применимо.

### Определение окружения

- Определяет контейнеры, совместимые с Docker.
- Определяет контейнеры, совместимые с Podman.
- Определяет cgroups, связанные с контейнерами.
- Определяет WSL.
- Определяет виртуальные машины с помощью `systemd-detect-virt`, если он доступен.

### Отчётность

- Вывод в текстовом формате, читаемом человеком.
- Вывод в машиночитаемом формате JSON.
- Вывод отчёта в формате Markdown.
- Вывод только команд для смягчения последствий.
- Необязательный вывод в файл.
- Информативные коды завершения процесса.

---

## Требования

### Обязательные

- Linux для оценки ядра.
- Python 3.9 или новее.
- Доступ на чтение к обычным системным метаданным.

Сканер использует только стандартную библиотеку Python.

### Необязательные команды

Дополнительные свидетельства собираются при наличии следующих инструментов:

| Инструмент | Назначение |
|---|---|
| `dpkg-query` | определение владельца пакета ядра и поиск журнала изменений в Debian/Ubuntu |
| `rpm` | проверка владельца пакета и журнала изменений в Fedora/RHEL/SUSE |
| `pacman` | метаданные пакета ядра и обновлений для семейства Arch |
| `apt` | запрос к кэшированным обновлениям в семействе Debian |
| `dnf` или `dnf5` | запрос к кэшированным обновлениям в Fedora/RHEL |
| `zypper` | запрос к кэшированным исправлениям CVE в SUSE |
| `apk` | запрос пакетов/обновлений в Alpine |
| `systemd-detect-virt` | определение контейнеров и виртуальных машин |

Для обычного сканирования права root не требуются.

Некоторые свидетельства могут быть недоступны непривилегированной учётной записи из-за специфических для системы прав на файлы.

---

## Установка

Поместите сканер в рабочий каталог:```bash
chmod +x cve_2026_31694_scanner.py

Запустите напрямую:```bash ./cve_2026_31694_scanner.py

root@kitploit:~
Или запустите его с помощью Python:```bash
python3 cve_2026_31694_scanner.py

Установка Python-пакета не требуется.


Использование

Стандартная оценка```bash

python3 cve_2026_31694_scanner.py

root@kitploit:~
### Вывод JSON```bash
python3 cve_2026_31694_scanner.py --format json

Приведённый ниже псевдоним совместимости создаёт тот же формат:```bash python3 cve_2026_31694_scanner.py --json

root@kitploit:~
### Отчёт Markdown```bash
python3 cve_2026_31694_scanner.py --format markdown

Сохранение отчёта```bash

python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md

root@kitploit:~
### Выводить только рекомендации по устранению```bash
python3 cve_2026_31694_scanner.py --mitigation-only

Пропустить запросы обновления пакетов```bash

python3 cve_2026_31694_scanner.py --no-package-query

root@kitploit:~
### Всегда возвращать успех после отчёта```bash
python3 cve_2026_31694_scanner.py --no-exit-status

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


Параметры командной строки


Процесс оценки

Сканер оценивает данные в следующем порядке.

1. Определение операционной системы и окружения

Сканер определяет:

  • является ли операционная система Linux;
  • идентификатор и семейство дистрибутива;
  • менеджер пакетов;
  • работает ли процесс в следующем окружении:
    • обычном хосте;
    • виртуальной машине;
    • контейнере;
    • WSL.

Определение окружения изменяет интерпретацию данных о пакетах и перезагрузках.

Например, контейнер может видеть ядро хоста, но обычно не может определить пакет ядра хоста из файловой системы контейнера.

2. Конфигурация FUSE

Сканер ищет конфигурацию работающего ядра в:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config

root@kitploit:~
Он оценивает:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set

Интерпретация:

ЗначениеСмысл
yFUSE встроен в ядро. Черный список модулей не может его отключить.
mFUSE доступен в виде загружаемого модуля.

3. Экспозиция во время выполнения

Сканер проверяет:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo

root@kitploit:~
Отсутствие `/dev/fuse` или `fusermount3` снижает немедленную применимость в текущем окружении, но не доказывает, что ядро пропатчено.

### 4. Геометрия размера страницы

Задокументированная запись увеличенного размера составляет `4120` байт.

Когда размер страницы хоста составляет не менее `4120` байт, задокументированная запись не пересекает границу страницы. Сканер может сообщить, что система не подвержена задокументированной геометрии страниц.

Этот вывод относится только к задокументированной записи и оценённому поведению реализации. Это не общее утверждение о том, что все проблемы безопасности памяти FUSE невозможны в системах со страницами большего размера.

### 5. Проверка установленного исходного кода

Если установленный исходный код доступен, сканер ищет:```text
fs/fuse/readdir.c

Она ищет затронутую функцию и защитную проверку, эквивалентную отклонению reclen > PAGE_SIZE.

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

Проверенный исходный код должен соответствовать работающему ядру, чтобы результат был авторитетным. Деревья исходников дистрибутива в /usr/src могут представлять другое установленное ядро.

6. Свидетельства о пакете ядра

Сканер пытается сопоставить работающий образ ядра с его владельцем-пакетом, используя базу данных пакетов обнаруженного дистрибутива.

Возможные механизмы включают:```text dpkg-query -S rpm -qf pacman -Qo apk info -W

root@kitploit:~
Когда пакет идентифицирован, локальные метаданные журнала изменений могут быть проверены на наличие CVE ID или заголовка исправления.

Отсутствие совпадения в журнале изменений не является доказательством уязвимости. Вендоры не всегда включают отдельные ссылки на CVE в локально установленные журналы изменений.

### 7. Сравнение с вышестоящей версией

Распознанная версия ядра сравнивается с фиксированной базовой таблицей сканера.

Сравнение версий даёт эвристический результат, потому что:

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

### 8. Метаданные обновления пакетов

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

Он не обновляет репозитории.

Примеры:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <

Результат, показывающий отсутствие доступных обновлений, актуален лишь настолько, насколько актуальны кэшированные метаданные репозитория.

9. Состояние перезагрузки

На обычном хосте или виртуальной машине сканер сравнивает работающее ядро с обнаруженными установленными ядрами и проверяет маркер перезагрузки, используемый системами семейства Debian.

Внутри контейнера или гостевой системы WSL эта проверка помечается как управляемая хостом, а не сравнивает файлы гостевой системы с ядром хоста.

10. Формирование вердикта

Приоритет свидетельств примерно следующий:

  1. прямые свидетельства исправления в исходном коде или пакете;
  2. FUSE отключён;
  3. документированная геометрия страниц не раскрыта;
  4. базовая линия, исправленная или не затронутая в апстриме;
  5. потенциально затронутая версия в апстриме;
  6. неубедительные свидетельства.

Вердикты

PATCHED

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

Примеры:

  • совпадающая защитная проверка в соответствующем исходном коде ядра;
  • локальные метаданные пакета ядра ссылаются на CVE или исправление.

Уверенность обычно высокая, но соответствие исходного кода работающему ядру всё равно следует проверить.

NOT_EXPOSED

В обнаруженной конфигурации работающего ядра FUSE отключён.

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

NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRY

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

Этот вердикт ограничен документированной геометрией уязвимости.

UPSTREAM_BASELINE_SAFE

Распознанная работающая версия соответствует известной исправленной базовой линии апстрима или предшествует затронутой реализации.

Проверка пакета вендора остаётся предпочтительной.

POTENTIALLY_VULNERABLE

Распознанное ядро находится в затронутом диапазоне апстрима, и прямых локальных свидетельств исправления не найдено.

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

INCONCLUSIVE

Сканеру не удалось получить достаточно свидетельств.

Частые причины:

  • недоступная конфигурация ядра;
  • нераспознанная строка версии;
  • недоступные исходный код или метаданные пакета;
  • неподдерживаемый дистрибутив;
  • выполнение внутри контейнера;
  • ядро, управляемое хостом;
  • статус бэкпорта вендора недоступен локально.

NOT_APPLICABLE

Текущая операционная система — не Linux.


Коды выхода

CodeЗначение
0Свидетельства исправления, безопасная базовая линия апстрима или отсутствие документированной подверженности

Пример:```bash python3 cve_2026_31694_scanner.py status=$?

case "$status" in 0) echo "No actionable exposure detected by the scanner" ;; 1) echo "Potential exposure detected" ;; 2) echo "Assessment inconclusive" ;; 3) echo "Scanner execution failed" ;; esac

root@kitploit:~
Когда указан `--no-exit-status`, сканер возвращает `0` после формирования отчёта.

---

## Источники обнаружения

Сканер использует следующие локальные источники, если они доступны:

| Источник | Сведения |
|---|---|
| `/etc/os-release` | Идентификация дистрибутива |
| `/usr/lib/os-release` | Идентификация дистрибутива (запасной вариант) |
| `/proc/version` | Индикаторы ядра и WSL |
| `/proc/config.gz` | Конфигурация работающего ядра |
| `/boot/config-*` | Конфигурация ядра |
| `/lib/modules/*/build/.config` | Конфигурация сборки ядра |
| `/proc/filesystems` | Зарегистрированные файловые системы |
| `/proc/self/mountinfo` | Активные монтирования FUSE |
| `/proc/1/cgroup` | Индикаторы контейнера |
| `/dev/fuse` | Наличие устройства и права доступа |
| `/usr/src/*/fs/fuse/readdir.c` | Необязательные признаки патча на уровне исходного кода |
| `/lib/modules` | Перечень установленных ядер |
| `/usr/lib/modules` | Перечень установленных ядер |
| `/boot/vmlinuz-*` | Перечень установленных ядер |
| `/var/run/reboot-required` | Индикатор необходимости перезагрузки для семейства Debian |
| база данных пакетов | Принадлежность пакетов ядра |
| журналы изменений пакетов | Необязательные локальные признаки бэкпорта |
| кэш пакетов | Необязательные признаки доступности обновлений |

---

## Поддержка дистрибутивов

### Определение семейства дистрибутивов

| Семейство | Распознаваемые дистрибутивы |
|---|---|
| Ubuntu | Ubuntu, Linux Mint, Pop!_OS, elementary OS, Zorin OS |
| Debian | Debian, Kali Linux, Raspbian, Parrot OS |
| Arch | Arch Linux, Manjaro, Garuda Linux, EndeavourOS, CachyOS |
| Fedora | Fedora Linux |
| RHEL | RHEL, CentOS, Rocky Linux, AlmaLinux, Oracle Linux, Amazon Linux |
| SUSE | openSUSE Tumbleweed, openSUSE Leap, SLES, SLED |
| Alpine | Alpine Linux |
| Gentoo | Gentoo Linux |
| Void | Void Linux |
| NixOS | NixOS |
| Неизвестно | Общие рекомендации для Linux |

### Поддержка локальных запросов обновлений

| Семейство | Запрос обновлений только для чтения |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | кэшированный `dnf check-upgrade` |
| SUSE | кэшированный список патчей CVE через `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | Не реализовано |
| Void | Не реализовано |
| NixOS | Не реализовано |
| Неизвестно | Не реализовано |

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

---

## Формирование рекомендаций по устранению

Рекомендации по устранению выбираются с учётом:

- семейства дистрибутива;
- менеджера пакетов;
- статуса контейнера или WSL;
- конфигурации FUSE;
- доступности `/dev/fuse`;
- активных монтирований FUSE;
- состояния перезагрузки;
- итогового вердикта.

Сканер выводит команды, но никогда не выполняет их.

### Семейство Debian и Ubuntu

Типичная формируемая последовательность:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot

Просмотрите предлагаемую транзакцию пакета перед её одобрением.

После перезагрузки:```bash uname -r python3 cve_2026_31694_scanner.py

root@kitploit:~
### Семейство Arch и Manjaro

Типичная генерируемая последовательность:```bash
sudo pacman -Syu
sudo reboot

Системы семейства Arch требуют полного обновления системы. Не обновляйте базы данных пакетов с помощью pacman -Sy, а затем устанавливайте выбранные пакеты, не завершив обновление.

Семейство Fedora и RHEL

Типичная генерируемая последовательность:```bash sudo dnf upgrade --refresh sudo systemctl reboot

root@kitploit:~
Системы, использующие `yum`, могут получить соответствующую команду `yum`.

### Семейство SUSE

Типичная сгенерированная последовательность:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot

Патч для конкретной CVE может быть недоступен в виде отдельной транзакции для каждого продукта SUSE или состояния репозитория.

Alpine Linux

Типичная сгенерированная последовательность:```bash doas apk update doas apk upgrade doas reboot

root@kitploit:~
Префикс привилегий зависит от того, обнаружит ли сканер `sudo`, `doas` или уже root-сессию.

### Gentoo Linux

Типичная генерируемая последовательность:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world

Установка и активация ядра зависят от настроенного на хосте рабочего процесса ядра Gentoo.

Void Linux

Типичная создаваемая последовательность:```bash sudo xbps-install -Suv sudo reboot

root@kitploit:~
### NixOS

Типичная генерируемая последовательность:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot

Temporary controls

When patching cannot be completed immediately, the scanner may suggest temporary controls.

Possible recommendations include:

  • unload the FUSE module when no FUSE mounts are active;
  • blacklist a loadable FUSE module;
  • temporarily restrict /dev/fuse;
  • remove /dev/fuse from untrusted containers;
  • remove CAP_SYS_ADMIN;
  • avoid --privileged containers.

These controls can disrupt legitimate workloads, including:

  • SSHFS;
  • AppImage;
  • rclone mounts;
  • desktop portals;
  • rootless container tools;
  • user-space filesystems.

Temporary restrictions must not replace installation of a vendor-fixed kernel.


Container and WSL Behavior

Containers

Containers normally share the host kernel.

A scanner executed inside a container may detect:

  • the host kernel release;
  • container filesystem package metadata;
  • no matching host kernel package;
  • no /dev/fuse, even when the host has FUSE enabled.

For this reason, the scanner marks host-dependent evidence as non-authoritative and directs mitigation to the container host.

Run the scanner directly on the host for an authoritative package and reboot assessment.

Container hardening guidance includes removing:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged

root@kitploit:~
Эквивалентную конфигурацию Compose также следует проверить:```yaml
devices:
  - /dev/fuse:/dev/fuse

cap_add:
  - SYS_ADMIN

privileged: true

WSL

Ядро WSL управляется Windows, а не пакетом ядра гостевого дистрибутива Linux.

Типичная сгенерированная рекомендация:```powershell wsl --update wsl --shutdown

root@kitploit:~
Выполните эти команды в Windows PowerShell, перезапустите дистрибутив и повторно запустите сканер.

Обновление только гостевых пакетов с помощью `apt`, `dnf` или другого пакетного менеджера Linux не заменяет ядро WSL.

### Виртуальные машины

Виртуальная машина обычно владеет собственным гостевым ядром. Проверки пакетов и перезагрузок, специфичные для дистрибутива, остаются применимы внутри гостевой системы.

Узел гипервизора следует оценивать отдельно.

---

## Форматы отчетов

### Текст

Текстовый вывод предназначен для непосредственного использования в терминале.```bash
python3 cve_2026_31694_scanner.py --format text

Отчёт содержит:

  • сводка по хосту;
  • проверки доказательств;
  • обновления пакетов, если они доступны;
  • вердикт и уверенность;
  • руководство по устранению;
  • команды проверки;
  • предостережения;
  • примечания;
  • код выхода.

JSON

Вывод JSON содержит полный отчёт на основе dataclass.```bash python3 cve_2026_31694_scanner.py
--format json
--output report.json

root@kitploit:~
Пример выбора поля:```bash
python3 cve_2026_31694_scanner.py --format json --no-exit-status |
  python3 -c '
import json
import sys

report = json.load(sys.stdin)
print(report["hostname"])
print(report["verdict"])
print(report["confidence"])
print(report["kernel_release"])
'

Markdown

Вывод в формате Markdown подходит для технических записей, тикетов и отчётов об оценке.```bash python3 cve_2026_31694_scanner.py
--format markdown
--output report.md

root@kitploit:~
### Отчет только о мерах по смягчению```bash
python3 cve_2026_31694_scanner.py \
  --mitigation-only \
  --format markdown

В формате JSON режим mitigation-only возвращает объект mitigation, а не полный отчет хоста.


Автоматизация и интеграция

Shell gate```bash

#!/usr/bin/env bash

set -u

report="cve-2026-31694-$(hostname)-$(date +%Y%m%d-%H%M%S).json"

python3 cve_2026_31694_scanner.py
--format json
--output "$report"

status=$?

case "$status" in 0) echo "Assessment completed without a potential-vulnerability verdict" ;; 1) echo "Potential CVE-2026-31694 exposure detected: $report" >&2 ;; 2) echo "Assessment inconclusive: $report" >&2 ;; *) echo "Scanner failure: $report" >&2 ;; esac

exit "$status"

root@kitploit:~
### Сбор отчётов без сбоя задания```bash
python3 cve_2026_31694_scanner.py \
  --format json \
  --output /var/tmp/cve-2026-31694.json \
  --no-exit-status

Пример Cron```cron

30 3 * * * /usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status

root@kitploit:~
Это перезаписывает тот же файл отчёта. Используйте скрипт-обёртку, если требуются исторические отчёты.

### Пример службы Systemd```ini
[Unit]
Description=Passive CVE-2026-31694 assessment
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/log

Сканеру требуется доступ на чтение к метаданным ядра и пакетов. Дополнительные ограничения песочницы могут скрыть улики и привести к неубедительному отчёту.

Fleet usage

Для оценки парка машин:

  1. разместите скрипт на каждом Linux-хосте;
  2. выполните его локально;
  3. соберите JSON-вывод;
  4. сгруппируйте результаты по:
    • дистрибутиву;
    • версии ядра;
    • вердикту;
    • уверенности;
    • типу окружения;
  5. сверьте потенциально затронутые хосты с бюллетенями вендора;
  6. примените обновления и перезагрузите;
  7. выполните повторное сканирование.

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


Эксплуатационные рекомендации

Рекомендуемые действия при статусе POTENTIALLY_VULNERABLE

  1. Определите точную версию запущенного ядра: ```bash uname -r

    root@kitploit:~
  2. Определите установленный дистрибутив и релиз: ```bash cat /etc/os-release

    root@kitploit:~
  3. Проверьте статус CVE у вендора дистрибутива для конкретного пакета ядра и варианта (flavor).

  4. Обновите метаданные пакетов.

  5. Установите поддерживаемый вендором исправленный пакет ядра.

  6. Перезагрузите хост.

  7. Подтвердите, что загруженное ядро изменилось: ```bash uname -r

    root@kitploit:~
  8. Перезапустите сканер.

Рекомендуемый ответ на INCONCLUSIVE

Соберите недостающие доказательства:```bash uname -a getconf PAGE_SIZE cat /etc/os-release grep CONFIG_FUSE_FS /boot/config-"$(uname -r)" 2>/dev/null cat /proc/filesystems ls -l /dev/fuse 2>/dev/null findmnt -t fuse,fuseblk,fusectl

root@kitploit:~
Затем сверьте точный пакет ядра с бюллетенем безопасности поставщика.

### Проверка после перезагрузки

Установка исправленного пакета ядра не меняет текущее исполняемое ядро.

Проверьте как установленные, так и запущенные ядра, затем перезагрузите систему при необходимости.

Примеры:```bash
uname -r
ls -1 /lib/modules

Системы семейства Debian также могут предоставлять:```bash test -e /var/run/reboot-required && cat /var/run/reboot-required

root@kitploit:~
### Проверка зависимостей FUSE

Перед временной выгрузкой или блокировкой FUSE:```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'

Не выгружайте модуль, пока смонтированы активные файловые системы FUSE.


Ограничения

Отсутствие подтверждения эксплойта

Сканер намеренно не запускает уязвимый путь выполнения кода.

Вердикт POTENTIALLY_VULNERABLE означает, что имеющиеся пассивные доказательства согласуются с фактом подверженности уязвимости. Это не является доказательством того, что эксплуатация увенчается успехом.

Бэкпорты вендора

Ядра дистрибутивов часто бэкпортируют исправления безопасности.

Старая на вид версия upstream может содержать исправления.

Для ядер, управляемых дистрибутивом, определяющими являются бюллетень вендора и точная версия пакета.

Несоответствие дерева исходного кода

Дерево исходного кода, найденное в /usr/src, может не соответствовать работающему ядру.

Доказательства исправлений в исходном коде следует сверять с:```bash uname -r

root@kitploit:~
и исходный пакет или каталог сборки, использованные для этого конкретного ядра.

### Устаревшие метаданные пакетов

Сканер не обновляет репозитории.

Проверки обновлений пакетов зависят от текущего состояния локального кэша.

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

### Контейнеры

Контейнер видит ядро хоста, но обычно имеет другие метаданные пакетов.

Запускайте сканер на хосте.

### WSL

Состояние пакетов в Linux-гостевой системе не определяет статус исправлений ядра WSL.

Обновляйте WSL из Windows.

### Пользовательские ядра

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

Изучите фактический коммит исходного кода или примечания к выпуску вендора.

### Live-патчинг

Сканер не определяет, применил ли фреймворк live-patching данное конкретное исправление к работающему ядру.

Используйте инструменты состояния и данные бюллетеней от вендора live-patch.

### Состояние Secure Boot и загрузчика

Сканер не проверяет:

- какое ядро загрузчик выберет следующим;
- принимает ли Secure Boot установленный образ;
- был ли корректно создан новый initramfs;
- успешно ли машина перезагрузилась в ожидаемое ядро.

### Распределённые файловые системы и пространства имён

Сканер оценивает текущее пространство имён процесса.

Точки монтирования или доступ к устройствам, скрытые пространствами имён, могут не отображаться в отчёте.

---

## Устранение неполадок

### `Kernel configuration could not be determined`

Проверьте, существует ли один из этих файлов:```bash
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config

Некоторые дистрибутивы не предоставляют текущую конфигурацию через /proc/config.gz.

Running kernel package could not be identified

Возможные причины:

  • запуск внутри контейнера;
  • образ ядра отсутствует в текущей файловой системе;
  • нестандартное ядро;
  • база данных пакетов недоступна;
  • ядро предоставляется платформой;
  • недостаточно прав.

Проверка:```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"

root@kitploit:~
### Запрос обновления пакетов не сообщает об обновлениях

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

Пассивный сканер не обновляет репозитории автоматически.

### `POTENTIALLY_VULNERABLE` после установки обновлений

Убедитесь, что запущено новое ядро:```bash
uname -r

Сравните его с установленными каталогами ядра:```bash ls -1 /lib/modules

root@kitploit:~
Возможно, потребуется перезагрузка.

Также проверьте рекомендации вендора, поскольку исправленный бэкпорт может не совпадать с базовой версией upstream.

### FUSE встроен в ядро

Когда в отчёте указано:```text
CONFIG_FUSE_FS=y

modprobe -r fuse и внесение модуля в чёрный список не могут отключить FUSE.

Используйте пропатченное ядро или ядро, собранное без поддержки FUSE.

Вывод сканера неполон при изоляции systemd

Сканеру может потребоваться доступ на чтение к:```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories

root@kitploit:~
Настройте усиление службы так, чтобы эти пути оставались читаемыми.

---

## Структура файлов

Рекомендуемая структура проекта:```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py

Рекомендуемая структура установки:```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py

root@kitploit:~
Пример:```bash
sudo install -d -m 0755 /opt/security/cve-2026-31694

sudo install -m 0755 \
  cve_2026_31694_scanner.py \
  /opt/security/cve-2026-31694/

sudo install -m 0644 \
  README.md \
  /opt/security/cve-2026-31694/

Ссылки

  • Запись CVE: https://www.cve.org/CVERecord?id=CVE-2026-31694
  • Запись NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-31694
  • Ссылка на стабильный патч Linux: https://git.kernel.org/stable/c/51a8de6c50bf947c8f534cd73da4c8f0a13e7bed
  • Статус Ubuntu: https://ubuntu.com/security/CVE-2026-31694
  • Трекер безопасности Debian: https://security-tracker.debian.org/tracker/CVE-2026-31694
  • База данных CVE Red Hat: https://access.redhat.com/security/cve/CVE-2026-31694
  • База данных CVE SUSE: https://www.suse.com/security/cve/CVE-2026-31694.html

Автор

Aung Myat Thu [w01f]

Скачать инструмент
ПараметрОписание
--format textТерминальный вывод, удобный для чтения человеком. Используется по умолчанию.
--format jsonПолный структурированный отчёт в формате JSON.
--format markdownТехнический отчёт в формате Markdown.
--jsonПсевдоним для --format json.
--output PATHЗаписать отчёт в файл вместо стандартного вывода.
--mitigation-onlyВернуть только сформированный раздел с мерами устранения.
--no-package-queryПропускать локальные запросы обновлений менеджера пакетов.
--no-exit-statusВсегда завершать работу со статусом 0 после формирования вывода.
-h, --helpПоказать справку по команде.
n
FUSE отключен в обнаруженной конфигурации.
unknownНе было доступно читаемого источника конфигурации.
1Потенциально уязвим
2Неопределённо
3Ошибка сканера или формирования отчёта