
Проверяет, подвержена ли система Linux уязвимости CVE-2026-99999 (PwnEscape), и выводит или применяет исправление ядра для конкретного дистрибутива
English | 한국어
Один shell-скрипт, который проверяет, подвержена ли система Linux воздействию CVE-2026-99999 ("PwnEscape"). Он объясняет вердикт, а затем либо выводит шаги установки исправления для данного дистрибутива, либо устанавливает исправление и перезагружает систему за вас.
Данные о производителях, встроенные в скрипт, актуальны по состоянию на 2026-10-20. Рекомендации меняются быстро, поэтому всегда сверяйтесь с трекером безопасности вашего дистрибутива.
| Компонент | Стек IPv4 ядра Linux (skb_checksum_help → ip_do_fragment) |
| Причина | checksum_start / csum_offset, передаваемые через заголовок virtio-net или сокеты пакетов, не проверяются на соответствие заголовку IPv4. Завершение контрольной суммы может затем перезаписать уже проверенную длину заголовка (CWE-20). |
| Воздействие | Гостевая ВМ → хост: раскрытие памяти хоста, сбой хоста, выполнение кода с правами root на хосте |
| Критичность | CVSS 3.1 9.3 Critical (kernel CNA) · 8.8 Important (Red Hat) |
| Затронуто | Каждое ядро начиная с 2.6.27 |
| Исправление | Upstream-коммит 6785011f8b16 "ipv4: validate checksum_start before completing checksum" |
| Обходной путь | Не опубликован. Единственное исправление — загрузиться с исправленным ядром. |
Основной риск касается хостов виртуализации, на которых работают недоверенные гости (KVM/QEMU, Firecracker, Proxmox, облачные и VPS-хосты). Установка исправления на ядро гостя не защищает хост.
| Файл | Описание |
|---|---|
scanner-cve-2026-99999.sh | Сканер, вывод на английском |
scanner-cve-2026-99999_kr.sh | Тот же сканер, вывод на корейском |
Оба файла содержат одинаковую логику; различаются только сообщения и комментарии.
| Файл | SHA-256 | MD5 |
|---|---|---|
scanner-cve-2026-99999.sh | 65c3c226487d5bd80d436c06cc5256304cfa17011be82d8404c54355998801a6 | 8ab38c22ed737986775f6f64f5a800aa |
scanner-cve-2026-99999_kr.sh | 05d4af248ab2cab26566c81067ed35dd0a8c966f7fa8459867597c56ac43a805 | 6223f8db3c1a8dec361fe301a7193ff4 |
Проверьте файл перед запуском:
echo "65c3c226487d5bd80d436c06cc5256304cfa17011be82d8404c54355998801a6 scanner-cve-2026-99999.sh" | sha256sum -c
echo "8ab38c22ed737986775f6f64f5a800aa scanner-cve-2026-99999.sh" | md5sum -c
Эти значения относятся к файлам в релизе v1.0.0. Файлы в более поздних коммитах могут отличаться.
Из релиза (рекомендуется):
curl -LO https://github.com/sqzer-x/cve-2026-99999-scanner/releases/download/v1.0.0/scanner-cve-2026-99999.sh
echo "65c3c226487d5bd80d436c06cc5256304cfa17011be82d8404c54355998801a6 scanner-cve-2026-99999.sh" | sha256sum -c
sudo bash scanner-cve-2026-99999.sh
Или из репозитория:
git clone https://github.com/sqzer-x/cve-2026-99999-scanner.git
cd cve-2026-99999-scanner
sudo bash scanner-cve-2026-99999.sh
Запускайте его на хосте, а не внутри контейнера. Проверка работает от имени обычного пользователя; root (через sudo) нужен только для пункта меню 1.
Определяет дистрибутив (/etc/os-release) и работающее ядро (/proc).
Оценивает ядро:
Проверяет наличие применённого livepatch (kpatch, Canonical Livepatch, SUSE kernel-livepatch, Ksplice), исправленного ядра, которое установлено, но ещё не загружено, и того, будет ли исправлено ядро при следующей загрузке.
Сообщает индикаторы подверженности: /dev/kvm, vhost_net, устройства TUN/TAP, процессы виртуальных машин (QEMU, Firecracker, Proxmox kvm, ...), настройки user namespace.
Если система небезопасна, предлагает меню:
1. Patch now (install the fixed kernel and reboot)
2. Patch manually later (show the commands)
3. Exit
Если запуск происходит не из терминала (cron, конвейеры, вывод перенаправлен в файл), меню не отображается, и программа ведёт себя как при выборе варианта 2.
| Параметр | Описание |
|---|---|
-l, --list | Вывести только таблицу статуса по дистрибутивам |
--no-color | Отключить цветной вывод (также учитывается NO_COLOR) |
--os-release FILE | Использовать указанный файл os-release вместо /etc/os-release |
--uname-r STRING | Оценивать указанную версию ядра вместо текущей (пропускает локальные проверки) |
--uname-v STRING | Строка сборки ядра (uname -v), необходима для ядер Debian при использовании --uname-r |
-h, --help | Показать справку |
| Код | Значение |
|---|---|
| 0 | Безопасно (исправлено, не затронуто или livepatch применён) |
| 1 | Уязвимо — доступно исправленное ядро |
| 2 | Исправленное ядро установлено — требуется перезагрузка |
| 3 | Уязвимо — исправления от производителя пока нет или срок поддержки истёк |
| 4 | Не определено (неизвестное ядро, запуск внутри контейнера, ...) |
Коды выхода позволяют использовать программу в системах управления конфигурацией или мониторинга:
bash scanner-cve-2026-99999.sh --no-color > report.txt; echo "exit code: $?"
Вердикт можно вычислить для значений, собранных в другом месте, например из контейнера или инвентаризации:
# On the target: uname -r ; uname -v ; cat /etc/os-release > os-release.txt
bash scanner-cve-2026-99999.sh --uname-r 5.14.0-570.12.1.el9_6.x86_64 --os-release os-release.txt
bash scanner-cve-2026-99999.sh --uname-r 6.1.0-38-amd64 \
--uname-v '#1 SMP PREEMPT_DYNAMIC Debian 6.1.176-1 (2026-08-02)' --os-release os-release.txt
bash scanner-cve-2026-99999.sh --list выводит ту же таблицу.