zenzue/CVE_2026_31694
GitHub: zenzue/CVE_2026_31694
一款被动式 Linux 主机评估工具,通过多维度只读检测指标判断系统是否受到 CVE-2026-31694 内核 FUSE 越界写入漏洞的影响,并生成发行版专属的缓解指南。
Stars: 0 | Forks: 0
# CVE-2026-31694 被动扫描器
一款用于 **CVE-2026-31694**(Linux 内核中 FUSE readdir-cache 越界写入漏洞)的被动 Linux 主机评估工具。
该扫描器会评估正在运行的内核、FUSE 暴露情况、本地包元数据、内核源码证据、执行环境以及操作系统家族。当主机可能受到影响时,它会针对检测到的发行版生成专门的缓解指南。
**作者:** Aung Myat Thu [w01f]
## 目录
- [概述](#overview)
- [漏洞概述](#vulnerability-summary)
- [安全模型](#security-model)
- [功能](#features)
- [环境要求](#requirements)
- [安装说明](#installation)
- [使用说明](#usage)
- [命令行选项](#command-line-options)
- [评估工作流](#assessment-workflow)
- [判定结果](#verdicts)
- [退出代码](#exit-codes)
- [检测来源](#detection-sources)
- [发行版支持](#distribution-support)
- [缓解方案生成](#mitigation-generation)
- [容器与 WSL 行为](#container-and-wsl-behavior)
- [报告格式](#report-formats)
- [自动化与集成](#automation-and-integration)
- [操作指南](#operational-guidance)
- [局限性](#limitations)
- [故障排除](#troubleshooting)
- [参考资料](#references)
## 概述
`cve_2026_31694_scanner.py` 是一款本地、非漏洞利用的评估工具。
它不会通过触发受影响的 FUSE 代码路径来确认漏洞,而是结合多个被动指标进行判断:
- 正在运行的内核版本;
- 上游已修复版本的基线;
- 当前内存页大小;
- `CONFIG_FUSE_FS` 内核配置;
- 已注册的 FUSE 文件系统类型;
- `/dev/fuse` 的存在性及当前用户的访问权限;
- FUSE 挂载助手的可用性;
- 活动的 FUSE 挂载;
- 已安装内核源码的检查;
- 内核包归属;
- 本地包更新日志证据;
- 缓存的包更新元数据;
- 已安装与正在运行的内核对比;
- 发行版和包管理器检测;
- 容器、虚拟机和 WSL 检测。
其结果是暴露评估,而不是基于漏洞利用的证明。
## 漏洞概述
CVE-2026-31694 影响的是 Linux 内核的 FUSE readdir cache。
该漏洞逻辑会根据由服务器控制的名称长度计算目录记录的序列化大小,并将该记录复制到单个 page-cache 页中。名称长度为 `4095` 的目录记录会产生 `4120` 字节的序列化大小。
在使用 `4096` 字节页的系统中,该记录会超出单个页面 `24` 个字节。
上游的修复方案会在进行缓存复制之前,拒绝无法容纳在单个页面内的目录记录。
### 受影响组件
```
fs/fuse/readdir.c
fuse_add_dirent_to_cache()
```
### 扫描器基线数据
扫描器包含以下上游稳定版修复基线:
| 内核系列 | 修复基线 |
|---|---:|
| 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 或更新版本 |
这些版本仅作为一项评估输入。它们不被视为唯一的真实依据,因为发行版供应商可能在进行修复的同时保留了较旧的上游版本号。
## 安全模型
该扫描器旨在避免调用存在漏洞的操作。
### 扫描器不会
- 挂载 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 权限。
由于特定系统的文件权限限制,非特权账户可能无法获取某些证据。
## 安装说明
将扫描器放置在工作目录中:
```
chmod +x cve_2026_31694_scanner.py
```
直接运行:
```
./cve_2026_31694_scanner.py
```
或者使用 Python 调用:
```
python3 cve_2026_31694_scanner.py
```
无需安装任何 Python 包。
## 使用说明
### 标准评估
```
python3 cve_2026_31694_scanner.py
```
### JSON 输出
```
python3 cve_2026_31694_scanner.py --format json
```
下方的兼容别名会产生相同的格式:
```
python3 cve_2026_31694_scanner.py --json
```
### Markdown 报告
```
python3 cve_2026_31694_scanner.py --format markdown
```
### 保存报告
```
python3 cve_2026_31694_scanner.py \
--format markdown \
--output cve-2026-31694-report.md
```
### 仅打印补救指南
```
python3 cve_2026_31694_scanner.py --mitigation-only
```
### 跳过包更新查询
```
python3 cve_2026_31694_scanner.py --no-package-query
```
### 报告后始终返回成功
```
python3 cve_2026_31694_scanner.py --no-exit-status
```
在收集报告但不希望因漏洞状态导致编排作业失败时,此选项非常有用。
## 命令行选项
| 选项 | 描述 |
|---|---|
| `--format text` | 人类可读的终端输出。这是默认设置。 |
| `--format json` | 完整的结构化 JSON 报告。 |
| `--format markdown` | 技术 Markdown 报告。 |
| `--json` | `--format json` 的别名。 |
| `--output PATH` | 将报告写入文件,而不是输出到标准输出。 |
| `--mitigation-only` | 仅返回生成的缓解措施部分。 |
| `--no-package-query` | 跳过本地包管理器更新查询。 |
| `--no-exit-status` | 生成输出后始终以状态 `0` 退出。 |
| `-h`, `--help` | 显示命令帮助。 |
## 评估工作流
扫描器按以下顺序评估证据。
### 1. 操作系统与环境检测
扫描器会确定:
- 操作系统是否为 Linux;
- 发行版 ID 及其家族;
- 包管理器;
- 进程是否运行在:
- 普通主机上;
- 虚拟机中;
- 容器中;
- WSL 中。
环境检测会改变对包和重启数据的解释方式。
例如,容器可以看到宿主机内核,但通常无法从容器文件系统中确定宿主机的内核包。
### 2. FUSE 配置
扫描器会在以下位置寻找运行中内核的配置:
```
/proc/config.gz
/boot/config-$(uname -r)
/lib/modules/$(uname -r)/build/.config
/usr/lib/modules/$(uname -r)/build/.config
```
它会评估:
```
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
```
解释:
| 值 | 含义 |
|---|---|
| `y` | FUSE 内置于内核中。模块黑名单无法禁用它。 |
| `m` | FUSE 作为可加载模块提供。 |
| `n` | FUSE 在检测到的配置中被禁用。 |
| 未知 | 没有可用的可读配置源。 |
### 3. 运行时暴露
扫描器会检查:
```
/proc/filesystems
/dev/fuse
PATH for fusermount3 or fusermount
/proc/self/mountinfo
```
缺少 `/dev/fuse` 或 `fusermount3` 会降低当前环境中的直接可用性,但并不能证明内核已打补丁。
### 4. 页大小几何结构
文档记录的超大记录为 `4120` 字节。
当主机页大小至少为 `4120` 字节时,文档记录不会跨越页边界。扫描器可能会报告该系统未因文档记录的页面几何结构而受到暴露。
此结论仅适用于文档记录和已评估的实现行为。这并不代表所有 FUSE 内存安全问题都不可能出现在使用更大页面的系统中。
### 5. 已安装源码检查
当已安装源码可用时,扫描器会搜索:
```
fs/fuse/readdir.c
```
它寻找受影响的函数以及等同于拒绝 `reclen > PAGE_SIZE` 的防护措施。
直接源码证据比版本比较具有更高的置信度。
所检查的源码必须与正在运行的内核相对应,结果才具有权威性。`/usr/src` 下的发行版源码树可能代表不同的已安装内核。
### 6. 内核包证据
扫描器尝试使用检测到的发行版包数据库将正在运行的内核映像映射到其所属的包。
可能的机制包括:
```
dpkg-query -S
rpm -qf
pacman -Qo
apk info -W
```
当识别出包时,可以检查本地更新日志元数据以获取 CVE ID 或补丁标题。
更新日志没有匹配项并不能证明存在漏洞。供应商并不总是在本地安装的更新日志中包含单独的 CVE 引用。
### 7. 上游版本比较
解析出的内核版本会与扫描器的固定基线表进行比较。
版本比较会产生启发式结果,因为:
- 供应商内核可能包含 backport;
- 内核包发布修订版是特定于发行版的;
- 云、实时、强化(hardened)和硬件使能内核可能有单独的补丁时间线;
- 版本字符串可能代表供应商维护的分支,而不是未经修改的上游发布版本。
### 8. 包更新元数据
在支持的情况下,扫描器会对现有的本地元数据运行只读查询。
它不会刷新软件源。
示例:
```
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. 证据不足。
## 判定结果
### `已修补`
直接的本地证据表明修复已存在。
示例:
- 相关内核源码中存在匹配的防护措施;
- 本地内核包元数据引用了该 CVE 或补丁。
置信度通常很高,但仍应验证源码与正在运行的内核是否对齐。
### `未暴露`
检测到的正在运行的内核配置已禁用 FUSE。
这是一个关于暴露的结果,而不是证明内核源码本身包含该修复的证据。
### `未被已记录页面几何结构暴露`
内存页大小足以容纳文档记录的 `4120` 字节记录,而不会跨越页边界。
此判定仅限于文档记录的漏洞几何结构范围。
### `上游基线安全`
解析出的当前运行版本满足已知的上游修复基线,或者早于受影响的实现版本。
仍然建议进行供应商包验证。
### `潜在存在漏洞`
解析出的内核处于受影响的上游范围内,且未找到直接的本地补丁证据。
此结果要求在宣布已安装内核受到漏洞影响之前,先检查操作系统供应商的安全公告。
### `不确定`
扫描器无法获取足够的证据。
常见原因:
- 内核配置不可用;
- 无法识别的版本字符串;
- 源码或包元数据不可访问;
- 不支持的发行版;
- 在容器内执行;
- 宿主机管理的内核;
- 本地无法获取供应商 backport 状态。
### `不适用`
当前操作系统不是 Linux。
## 退出代码
| 代码 | 含义 |
|---:|---|
| `0` | 存在已修复证据、安全的上游基线,或未暴露于文档记录的漏洞 |
| `1` | 潜在受影响 |
| `2` | 证据不足 |
| `3` | 扫描器或报告生成错误 |
示例:
```
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
```
当指定 `--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 系重启指示器 |
| 包数据库 | 内核包归属 |
| 包更新日志 | 可选的本地 backport 证据 |
| 包缓存 | 可选的更新可用性证据 |
## 发行版支持
### 发行版家族检测
| 家族 | 识别的发行版 |
|---|---|
| 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 | 使用 `zypper` 缓存的 CVE 补丁列表 |
| Alpine | `apk version -l <` |
| Gentoo | 未实现 |
| Void | 未实现 |
| NixOS | 未实现 |
| 未知 | 未实现 |
本地未显示更新并不代表没有可用的修复包。软件源的元数据可能已过期,或者发行版可能尚未发布该包。
## 缓解方案生成
缓解指南的选择依据是:
- 发行版家族;
- 包管理器;
- 容器或 WSL 状态;
- FUSE 配置;
- `/dev/fuse` 的可用性;
- 活动的 FUSE 挂载;
- 重启状态;
- 最终判定结果。
扫描器会打印命令,但绝不会执行它们。
### Debian 和 Ubuntu 家族
典型生成的序列:
```
sudo apt update
sudo apt full-upgrade
sudo reboot
```
在批准之前,请审查建议的包事务。
重启后:
```
uname -r
python3 cve_2026_31694_scanner.py
```
### Arch 和 Manjaro 家族
典型生成的序列:
&2
;;
2)
echo "Assessment inconclusive: $report" >&2
;;
*)
echo "Scanner failure: $report" >&2
;;
esac
exit "$status"
```
### 收集报告且不让作业失败
```
python3 cve_2026_31694_scanner.py \
--format json \
--output /var/tmp/cve-2026-31694.json \
--no-exit-status
```
### 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
```
这会覆盖相同的报告文件。如果需要历史报告,请使用包装脚本。
### Systemd 服务示例
```
[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
```
扫描器需要对内核和包元数据的读取权限。额外的沙箱限制可能会隐藏证据,并生成结果不确定的报告。
### 集群使用
对于集群评估:
1. 将脚本放置在每个 Linux 主机上;
2. 在本地执行它;
3. 收集 JSON 输出;
4. 将结果按以下方式分组:
- 发行版;
- 内核版本;
- 判定结果;
- 置信度;
- 环境类型;
5. 根据供应商公告验证可能受影响的主机;
6. 修补并重启;
7. 重新扫描。
不要将来自容器镜像构建的扫描视作对宿主机内核的评估。
## 操作指南
### 针对 `POTENTIALLY_VULNERABLE` 的建议响应
1. 确认正在运行的准确内核:
uname -r
2. 确认已安装的发行版及版本:
cat /etc/os-release
3. 查看发行版供应商针对具体内核包和类型的 CVE 状态。
4. 刷新包元数据。
5. 安装供应商支持的已修复内核包。
6. 重启主机。
7. 确认正在运行的内核已更改:
uname -r
8. 重新运行扫描器。
### 针对 `INCONCLUSIVE` 的建议响应
收集缺失的证据:
```
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
```
然后根据供应商公告验证确切的内核包。
### 重启验证
安装已修复的内核包并不会改变当前正在执行的内核。
请验证已安装和正在运行的内核,然后根据需要重启。
示例:
```
uname -r
ls -1 /lib/modules
```
Debian 系系统可能还提供:
```
test -e /var/run/reboot-required && cat /var/run/reboot-required
```
### FUSE 依赖审查
在临时卸载或阻止 FUSE 之前:
```
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
```
当存在已挂载的活动 FUSE 文件系统时,请勿卸载该模块。
## 局限性
### 无漏洞利用确认
扫描器故意不触发存在漏洞的代码路径。
`POTENTIALLY_VULNERABLE` 判定意味着可用的被动证据与暴露情况一致。它并不是证明漏洞利用一定会成功。
### 供应商 backport
发行版内核经常 backport 安全修复。
看起来较旧的上游版本可能已经包含了补丁。
供应商公告和确切的包发布版对于由发行版管理的内核具有权威性。
### 源码树不匹配
在 `/usr/src` 下找到的源码树可能与正在运行的内核不匹配。
源码补丁证据应根据以下内容进行验证:
```
uname -r
```
以及用于该确切内核的源包或构建目录。
### 过期的包元数据
扫描器不会刷新软件源。
包更新检查依赖于现有的本地缓存状态。
请使用生成的特定于发行版的刷新和升级命令来获取最新的包决策依据。
### 容器
容器看到的是宿主机内核,但通常具有不同的包元数据。
请在宿主机上运行扫描器。
### WSL
Linux 客户机包状态不能决定 WSL 内核的补丁状态。
请从 Windows 更新 WSL。
### 自定义内核
自定义、嵌入式、设备、供应商和自行构建的内核可能没有包元数据或可识别的版本字符串。
请检查实际的源代码提交或供应商发布说明。
### 热补丁(Live patching)
扫描器无法确定热补丁框架是否已将此特定修复应用于正在运行的内核。
请使用热补丁供应商的状态工具和公告数据。
### 安全启动与引导加载程序状态
扫描器不会验证:
- 引导加载程序下次会选择哪个内核;
- Secure Boot 是否接受已安装的映像;
- 是否正确生成了新的 initramfs;
- 机器是否成功重启并进入了预期的内核。
### 分布式文件系统与命名空间
扫描器评估的是当前进程的命名空间。
被命名空间的挂载或设备访问可能不会出现在报告中。
## 故障排除
### `无法确定 Kernel configuration`
检查以下文件之一是否存在:
```
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config
```
某些发行版不会通过 `/proc/config.gz` 公开当前运行的配置。
### `无法识别正在运行的 Kernel package`
可能的原因:
- 在容器内运行;
- 当前文件系统中不存在内核映像;
- 自定义内核;
- 包数据库不可用;
- 平台提供的内核;
- 权限不足。
检查:
```
uname -r
ls -l /boot
ls -l /lib/modules/"$(uname -r)"
```
### 包更新查询报告无更新
使用生成的缓解指南刷新包元数据,然后重新运行扫描器。
被动扫描器不会自动刷新软件源。
### 安装更新后仍然提示 `POTENTIALLY_VULNERABLE`
确认新内核是否正在运行:
```
uname -r
```
将其与已安装的内核目录进行比较:
```
ls -1 /lib/modules
```
可能仍然需要重启。
同时检查供应商公告,因为已修复的 backport 版本可能与上游版本基线不匹配。
### FUSE 内置于内核中
当报告显示:
```
CONFIG_FUSE_FS=y
```
`modprobe -r fuse` 和模块黑名单将无法禁用 FUSE。
请使用已修复的内核或在没有 FUSE 支持的情况下构建的内核。
### 在 systemd 沙箱环境下扫描器输出不完整
扫描器可能需要对这些路径的读取权限:
```
/proc
/boot
/lib/modules
/usr/lib/modules
/usr/src
package database directories
package cache directories
```
调整服务加固设置,以确保这些路径保持可读。
## 文件结构
推荐的项目结构:
```
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
```
推荐的安装结构:
```
/opt/security/cve-2026-31694/
├── README.md
└── cve_2026_31694_scanner.py
```
示例:
```
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 记录:
- NVD 记录:
- Linux stable 补丁参考:
- Ubuntu 状态:
- Debian 安全追踪器:
- Red Hat CVE 数据库:
- SUSE CVE 数据库:
## 作者
**Aung Myat Thu [w01f]**
标签:Python, 安全渗透, 无后门, 无线安全, 系统运维, 聊天机器人, 逆向工具