Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE_2026_31694 — 用于 CVE-2026-31694 的被动式 Linux 主机漏洞扫描器:检查运行中的内核、FUSE 配置、软件包元数据和补丁证据,并生成针对性的缓解指导。 | Kitploit
工具/GitHubGitHub/zenzue/cve_2026_31694
防御工具漏洞扫描器漏洞分析配置审计
GitHubzenzue/cve_2026_31694

CVE_2026_31694

用于 CVE-2026-31694 的被动式 Linux 主机漏洞扫描器:检查运行中的内核、FUSE 配置、软件包元数据和补丁证据,并生成针对性的缓解指导。

查看仓库
31个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-31694 被动扫描器

一个针对 CVE-2026-31694 的被动式 Linux 主机评估工具,该漏洞是 Linux 内核中 FUSE readdir 缓存的越界写入。

该扫描器评估运行中的内核、FUSE 暴露面、本地软件包元数据、内核源码证据、执行环境以及操作系统家族。当主机可能受影响时,它会生成针对所检测发行版量身定制的缓解指南。

作者: Aung Myat Thu [w01f]


目录

  • 概述
  • 漏洞摘要
  • 安全模型
  • 功能特性
  • 要求
  • 安装
  • 使用方法
  • 命令行选项
  • 评估工作流
  • 判定结果
  • 退出代码
  • 检测来源
  • 发行版支持
  • 缓解措施生成
  • 容器与 WSL 行为
  • 报告格式
  • 自动化与集成
  • 操作指导
  • 局限性
  • 故障排除
  • 参考

概述

cve_2026_31694_scanner.py 是一个本地、非利用型的漏洞评估工具。

它不会通过触发受影响的 FUSE 代码路径来确认漏洞,而是综合多种被动指标:

  • 运行中的内核版本;
  • 上游已修复版本基线;
  • 当前内存页大小;
  • CONFIG_FUSE_FS 内核配置;
  • 已注册的 FUSE 文件系统类型;
  • /dev/fuse 是否存在及当前用户访问权限;
  • FUSE 挂载辅助工具是否可用;
  • 活动的 FUSE 挂载点;
  • 已安装内核源码检查;
  • 内核软件包归属;
  • 本地软件包变更日志证据;
  • 缓存的软件包更新元数据;
  • 已安装内核与运行中内核的对比;
  • 发行版和软件包管理器检测;
  • 容器、虚拟机和 WSL 检测。

结果是暴露面评估,而非基于利用的证明。


漏洞摘要

CVE-2026-31694 影响 Linux 内核的 FUSE readdir 缓存。

存在漏洞的逻辑根据服务器控制的名称长度计算目录项的序列化大小,并将该记录复制到单个页缓存页中。名称为 4095 的目录项可以产生 4120 字节的序列化大小。

在使用 4096 字节页的系统中,该记录会超出单页 24 字节。

上游修复会在缓存复制发生之前拒绝无法容纳在单页内的目录记录。

受影响组件```text

fs/fuse/readdir.c fuse_add_dirent_to_cache()

root@kitploit:~
### 扫描器基线数据

扫描器包含以下上游稳定修复基线:

| 内核系列 | 修复基线 |
|---|---:|
| 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 |
| 主线 | 7.1 或更高版本 |

这些版本被用作评估输入之一。它们并非唯一的判断依据,因为发行版厂商可能会在保留较旧上游版本号的同时向后移植修复补丁。

---

## 安全模型

该扫描器旨在避免触发易受攻击的操作。

### 扫描器不会

- 挂载 FUSE 文件系统;
- 打开或与 `/dev/fuse` 通信;
- 启动 FUSE 服务器;
- 提交特制的目录记录;
- 为页放置测试分配内存;
- 整理内核分配器;
- 修改 `/etc/passwd`;
- 更改内核配置;
- 加载或卸载内核模块;
- 修改 `/dev/fuse` 权限;
- 安装或移除软件包;
- 重启系统;
- 尝试提权。

### 扫描器可能

- 读取 `/proc`、`/boot`、`/lib/modules`、`/usr/lib/modules`、`/usr/src` 以及软件包元数据目录下的文件;
- 执行有界、只读的软件包查询;
- 检查活动挂载和文件系统注册信息;
- 仅在显式提供 `--output` 时写入报告;
- 打印缓解命令供管理员审阅。

缓解命令是文档性输出,绝不会自动执行。

---

## 功能

### 主机与内核识别

- 读取 `platform.release()` 并解析上游风格的内核版本。
- 读取 `/etc/os-release` 或 `/usr/lib/os-release`。
- 检测 CPU 架构和内存页大小。
- 识别被扫描的内核是否属于当前操作系统。

### FUSE 暴露评估

- 从可用的内核配置源读取 `CONFIG_FUSE_FS`。
- 检测内置 FUSE 支持和可加载模块配置。
- 读取 `/proc/filesystems`。
- 检查 `/dev/fuse` 元数据和当前用户的读/写访问权限。
- 定位 `fusermount3` 或 `fusermount`。
- 从 `/proc/self/mountinfo` 解析活动的 FUSE 挂载。

### 补丁证据

- 将正在运行的版本与上游修复基线进行比较。
- 在已安装的内核源码中搜索超长记录防护代码。
- 检查本地 RPM 或 Debian 软件包变更日志中是否包含:
  - `CVE-2026-31694`;
  - 上游补丁标题。

### 软件包与重启状态

- 尝试识别拥有当前运行内核的软件包。
- 在不刷新软件源的情况下查询本地软件包管理器元数据。
- 当主机环境具有权威性时,检测是否有更新的已安装内核。
- 在适用时检查 `/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` | SUSE 缓存 CVE 补丁查询 |
| `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;
  • 发行版 ID 和系列;
  • 包管理器;
  • 进程是否运行在:
    • 普通主机上;
    • 虚拟机中;
    • 容器中;
    • 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 可作为可加载模块使用。
nFUSE 在检测到的配置中已被禁用。
未知没有可用的可读配置来源。

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

扫描器无法获得足够证据。

常见原因:

  • 内核配置不可用;
  • 无法识别的版本字符串;
  • 源代码或软件包元数据不可访问;
  • 不受支持的发行版;
  • 在容器内执行;
  • 宿主机管理的内核;
  • 供应商 backport 状态在本机不可用。

NOT_APPLICABLE

当前操作系统不是 Linux。


退出代码

CodeMeaning
0已修复证据、安全的上游基线,或文档记载的暴露不存在
1可能易受攻击
2

示例:```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:~
When `--no-exit-status` is specified, the scanner returns `0` after producing the report.

---

## Detection Sources

The scanner uses the following local sources where available:

| Source | Information |
|---|---|
| `/etc/os-release` | Distribution identity |
| `/usr/lib/os-release` | Distribution identity fallback |
| `/proc/version` | Kernel and WSL indicators |
| `/proc/config.gz` | Running-kernel configuration |
| `/boot/config-*` | Kernel configuration |
| `/lib/modules/*/build/.config` | Kernel build configuration |
| `/proc/filesystems` | Registered filesystems |
| `/proc/self/mountinfo` | Active FUSE mounts |
| `/proc/1/cgroup` | Container indicators |
| `/dev/fuse` | Device presence and permissions |
| `/usr/src/*/fs/fuse/readdir.c` | Optional source-level patch evidence |
| `/lib/modules` | Installed kernel inventory |
| `/usr/lib/modules` | Installed kernel inventory |
| `/boot/vmlinuz-*` | Installed kernel inventory |
| `/var/run/reboot-required` | Debian-family reboot indicator |
| package database | Kernel package ownership |
| package changelogs | Optional local backport evidence |
| package cache | Optional update availability evidence |

---

## Distribution Support

### Distribution-family detection

| Family | Recognized distributions |
|---|---|
| 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 |
| Unknown | Generic Linux guidance |

### Local update-query support

| Family | Read-only update query |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | cached `dnf check-upgrade` |
| SUSE | cached CVE patch listing with `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | Not implemented |
| Void | Not implemented |
| NixOS | Not implemented |
| Unknown | Not implemented |

The absence of a locally visible update does not mean a fixed package is unavailable. Repository metadata may be stale or the distribution may not yet have published a package.

---

## Mitigation Generation

Mitigation guidance is selected according to:

- distribution family;
- package manager;
- container or WSL status;
- FUSE configuration;
- `/dev/fuse` availability;
- active FUSE mounts;
- reboot state;
- final verdict.

The scanner prints commands but never executes them.

### Debian and Ubuntu family

Typical generated sequence:```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

临时控制措施

当无法立即完成修补时,扫描器可能会建议采取临时控制措施。

可能的建议包括:

  • 在没有活动的 FUSE 挂载时卸载 FUSE 模块;
  • 将可加载的 FUSE 模块加入黑名单;
  • 临时限制 /dev/fuse;
  • 从未受信任的容器中移除 /dev/fuse;
  • 移除 CAP_SYS_ADMIN;
  • 避免使用 --privileged 容器。

这些控制措施可能会干扰合法的工作负载,包括:

  • SSHFS;
  • AppImage;
  • rclone 挂载;
  • 桌面门户;
  • 无根容器工具;
  • 用户空间文件系统。

临时限制措施不得替代安装由供应商修复的内核。


容器与 WSL 行为

容器

容器通常与宿主机共享内核。

在容器内执行的扫描器可能会检测到:

  • 宿主机内核版本;
  • 容器文件系统包元数据;
  • 没有匹配的宿主机内核包;
  • 即使宿主机已启用 FUSE,也没有 /dev/fuse。

因此,扫描器将依赖宿主机环境的证据标记为非权威性,并将缓解措施指向容器宿主机。

直接在宿主机上运行扫描器,以获得权威的包与重启评估。

容器加固指南包括移除:```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 包管理器更新 guest 软件包并不会替换 WSL 内核。

### 虚拟机

虚拟机通常拥有自己的 guest 内核。发行版特定的软件包与重启检查在 guest 内仍然适用。

hypervisor 宿主机应单独评估。

---

## 报告格式

### 文本

文本输出旨在供终端直接使用。```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 格式时,仅缓解模式会返回缓解对象,而不是完整的主机报告。


自动化与集成

Shell 门```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

The scanner needs read access to kernel and package metadata. Additional sandbox restrictions may hide evidence and produce an inconclusive report.

机群使用

对于机群评估:

  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 状态。

  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 结论表示可用的被动证据与暴露情况一致。这并不能证明漏洞利用会成功。

厂商向后移植

发行版内核通常会向后移植安全修复。

看起来较旧的上游版本可能已打补丁。

对于由发行版管理的内核,厂商公告和确切的软件包版本具有权威性。

源码树不匹配

在 /usr/src 下找到的源码树可能与正在运行的内核不匹配。

应针对以下内容验证源码补丁证据:```bash uname -r

root@kitploit:~
以及用于该确切内核的源包或构建目录。

### 过期的软件包元数据

扫描器不会刷新软件仓库。

软件包更新检查依赖于现有的本地缓存状态。

使用生成的分发特定刷新和升级命令,以获得最新的软件包决策。

### 容器

容器看到的是宿主内核,但通常具有不同的软件包元数据。

在宿主机上运行扫描器。

### WSL

Linux 客户机的软件包状态并不能决定 WSL 内核的补丁状态。

请从 Windows 更新 WSL。

### 自定义内核

自定义、嵌入式、设备、供应商和自行构建的内核可能没有软件包元数据或可识别的版本字符串。

请检查实际的源代码提交或供应商发布说明。

### 实时修补

扫描器不会判断实时修补框架是否已将这一特定修正应用于正在运行的内核。

请使用实时修补供应商的状态工具和公告数据。

### 安全启动和引导加载程序状态

扫描器不会验证:

- 引导加载程序下一步将选择哪个内核;
- 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:~
可能仍需要重新启动。

另请查看供应商公告,因为修复后的反向移植版本可能与上游版本基线不一致。

### 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
  • Red Hat CVE 数据库:https://access.redhat.com/security/cve/CVE-2026-31694
  • SUSE CVE 数据库: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显示命令帮助。
无法确定
3扫描器或报告生成错误