
Escáner pasivo de vulnerabilidades para hosts Linux para CVE-2026-31694: comprueba el kernel en ejecución, la configuración de FUSE, los metadatos de paquetes y la evidencia de parches, y luego genera recomendaciones de mitigación personalizadas.
Una herramienta pasiva de evaluación de hosts Linux para CVE-2026-31694, una escritura fuera de los límites en la caché de readdir de FUSE del kernel de Linux.
El escáner evalúa el kernel en ejecución, la exposición a FUSE, los metadatos de paquetes locales, la evidencia del código fuente del kernel, el entorno de ejecución y la familia de sistemas operativos. Cuando el host puede estar afectado, produce una guía de mitigación adaptada a la distribución detectada.
Autor: Aung Myat Thu [w01f]
cve_2026_31694_scanner.py es una utilidad local de evaluación de vulnerabilidades que no explota la vulnerabilidad.
No confirma la vulnerabilidad activando la ruta de código FUSE afectada. En su lugar, combina múltiples indicadores pasivos:
CONFIG_FUSE_FS;/dev/fuse y acceso del usuario actual;El resultado es una evaluación de exposición, no una prueba basada en explotación.
CVE-2026-31694 afecta a la caché de readdir de FUSE del kernel de Linux.
La lógica vulnerable calcula el tamaño serializado de una entrada de directorio a partir de una longitud de nombre controlada por el servidor y copia el registro en una única página de la caché de páginas. Una entrada de directorio con una longitud de nombre de 4095 puede producir un tamaño serializado de 4120 bytes.
En un sistema que utiliza páginas de 4096 bytes, ese registro excede una página en 24 bytes.
La corrección de upstream rechaza los registros de directorio que no caben en una sola página antes de que se produzca la copia en la caché.
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### Datos de línea base del escáner
El escáner contiene las siguientes líneas base estables corregidas de upstream:
| Serie del kernel | Línea base corregida |
|---|---:|
| 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 o superior |
Estas versiones se utilizan como una de las entradas de evaluación. No se tratan como la única fuente de verdad, porque los proveedores de distribuciones pueden aplicar un backport de la corrección conservando un número de versión upstream más antiguo.
---
## Modelo de seguridad
El escáner está diseñado para evitar invocar la operación vulnerable.
### El escáner no
- montar un sistema de archivos FUSE;
- abrir o comunicarse con `/dev/fuse`;
- iniciar un servidor FUSE;
- enviar registros de directorio manipulados;
- asignar memoria para pruebas de colocación de páginas;
- manipular los asignadores del kernel;
- modificar `/etc/passwd`;
- cambiar la configuración del kernel;
- cargar o descargar módulos del kernel;
- modificar los permisos de `/dev/fuse`;
- instalar o eliminar paquetes;
- reiniciar el sistema;
- intentar una escalada de privilegios.
### El escáner puede
- leer archivos bajo `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src` y los directorios de metadatos de paquetes;
- ejecutar consultas de paquetes limitadas y de solo lectura;
- inspeccionar los montajes activos y el registro de sistemas de archivos;
- escribir un informe solo cuando se proporciona `--output` explícitamente;
- imprimir comandos de mitigación para revisión del administrador.
Los comandos de mitigación son salida de documentación. Nunca se ejecutan automáticamente.
---
## Características
### Identificación del host y del kernel
- Lee `platform.release()` y analiza la versión del kernel de estilo upstream.
- Lee `/etc/os-release` o `/usr/lib/os-release`.
- Detecta la arquitectura de la CPU y el tamaño de página de memoria.
- Identifica si el kernel escaneado pertenece al sistema operativo actual.
### Evaluación de exposición FUSE
- Lee `CONFIG_FUSE_FS` de las fuentes de configuración del kernel disponibles.
- Detecta soporte FUSE integrado y configuraciones de módulo cargable.
- Lee `/proc/filesystems`.
- Comprueba los metadatos de `/dev/fuse` y el acceso de lectura/escritura del usuario actual.
- Localiza `fusermount3` o `fusermount`.
- Analiza los montajes FUSE activos desde `/proc/self/mountinfo`.
### Evidencia de parche
- Compara la versión en ejecución con las líneas base corregidas de upstream.
- Busca en el código fuente del kernel instalado la protección contra registros de tamaño excesivo.
- Comprueba los changelogs de paquetes RPM o Debian locales para:
- `CVE-2026-31694`;
- el título del parche de upstream.
### Estado del paquete y del reinicio
- Intenta identificar el paquete al que pertenece el kernel en ejecución.
- Consulta los metadatos locales del gestor de paquetes sin actualizar los repositorios.
- Detecta un kernel instalado más reciente cuando el entorno del host es autoritativo.
- Comprueba `/var/run/reboot-required` cuando corresponde.
### Detección del entorno
- Detecta contenedores compatibles con Docker.
- Detecta contenedores compatibles con Podman.
- Detecta cgroups relacionados con contenedores.
- Detecta WSL.
- Detecta máquinas virtuales usando `systemd-detect-virt` cuando está disponible.
### Informes
- Salida de texto legible por humanos.
- Salida JSON legible por máquina.
- Salida de informe en Markdown.
- Salida solo de mitigación.
- Salida opcional a archivo.
- Códigos de salida de proceso significativos.
---
## Requisitos
### Requisitos obligatorios
- Linux para la evaluación del kernel.
- Python 3.9 o superior.
- Acceso de lectura a los metadatos normales del sistema.
El escáner utiliza únicamente la biblioteca estándar de Python.
### Comandos opcionales
Se recopila evidencia adicional cuando las siguientes herramientas están presentes:
| Herramienta | Propósito |
|---|---|
| `dpkg-query` | Descubrimiento de la propiedad del paquete de kernel y del changelog en Debian/Ubuntu |
| `rpm` | Inspección de la propiedad del paquete y del changelog en Fedora/RHEL/SUSE |
| `pacman` | Metadatos de paquetes de kernel y actualizaciones para la familia Arch |
| `apt` | Consulta de actualizaciones en caché para la familia Debian |
| `dnf` o `dnf5` | Consulta de actualizaciones en caché para Fedora/RHEL |
| `zypper` | Consulta de parches CVE en caché para SUSE |
| `apk` | Consulta de paquetes/actualizaciones de Alpine |
| `systemd-detect-virt` | Detección de contenedores y máquinas virtuales |