
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 |
No se requieren privilegios de root para el escaneo normal.
Parte de la evidencia puede no estar disponible para una cuenta sin privilegios debido a permisos de archivo específicos del sistema.
---
## Instalación
Coloque el escáner en un directorio de trabajo:```bash
chmod +x cve_2026_31694_scanner.py
Ejecútalo directamente:```bash ./cve_2026_31694_scanner.py
O invócalo con Python:```bash
python3 cve_2026_31694_scanner.py
No se requiere instalación de paquetes de Python.
python3 cve_2026_31694_scanner.py
### Salida JSON```bash
python3 cve_2026_31694_scanner.py --format json
El alias de compatibilidad a continuación produce el mismo formato:```bash python3 cve_2026_31694_scanner.py --json
### Informe Markdown```bash
python3 cve_2026_31694_scanner.py --format markdown
python3 cve_2026_31694_scanner.py
--format markdown
--output cve-2026-31694-report.md
### Imprimir solo la guía de remediación```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### Devolver siempre éxito después de informar```bash
python3 cve_2026_31694_scanner.py --no-exit-status
Esta opción es útil al recopilar informes sin permitir que el estado de vulnerabilidad haga fallar un trabajo de orquestación.
| Opción | Descripción |
|---|---|
--format text | Salida de terminal legible por humanos. Esta es la opción predeterminada. |
--format json | Informe estructurado completo en JSON. |
--format markdown | Informe técnico en Markdown. |
--json | Alias de --format json. |
--output PATH | Escribe el informe en un archivo en lugar de en la salida estándar. |
--mitigation-only | Devuelve solo la sección de mitigación generada. |
--no-package-query | Omite las consultas de actualización del gestor de paquetes local. |
--no-exit-status | Sale siempre con el estado 0 después de generar la salida. |
-h, --help | Muestra la ayuda del comando. |
El escáner evalúa la evidencia en el siguiente orden.
El escáner determina:
La detección del entorno cambia la interpretación de los datos de paquetes y de reinicio.
Por ejemplo, un contenedor puede ver el kernel del host, pero normalmente no puede determinar el paquete del kernel del host desde el sistema de archivos del contenedor.
El escáner busca una configuración del kernel en ejecución en:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
Evalúa:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
Interpretación:
| Value | Significado |
|---|---|
y | FUSE está integrado en el kernel. El bloqueo de módulos no puede deshabilitarlo. |
m | FUSE está disponible como módulo cargable. |
n | FUSE está deshabilitado en la configuración detectada. |
| unknown | No había ninguna fuente de configuración legible disponible. |
El escáner comprueba:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
La ausencia de `/dev/fuse` o `fusermount3` reduce la usabilidad inmediata desde el entorno actual, pero no demuestra que el kernel esté parcheado.
### 4. Geometría del tamaño de página
El registro sobredimensionado documentado es de `4120` bytes.
Cuando el tamaño de página del host es de al menos `4120` bytes, el registro documentado no cruza un límite de página. El escáner puede informar que el sistema no está expuesto según la geometría de página documentada.
Esta conclusión se aplica únicamente al registro documentado y al comportamiento de implementación evaluado. No es una afirmación general de que todos los problemas de seguridad de memoria en FUSE sean imposibles en sistemas con páginas más grandes.
### 5. Inspección del código fuente instalado
Cuando el código fuente instalado está disponible, el escáner busca:```text
fs/fuse/readdir.c
Busca la función afectada y una guarda equivalente a rechazar reclen > PAGE_SIZE.
La evidencia directa del código fuente tiene mayor confianza que la comparación de versiones.
El código fuente inspeccionado debe corresponder al kernel en ejecución para que el resultado sea autoritativo. Los árboles de código fuente de la distribución bajo /usr/src pueden representar un kernel instalado diferente.
El escáner intenta asignar la imagen del kernel en ejecución a su paquete propietario utilizando la base de datos de paquetes de la distribución detectada.
Los mecanismos posibles incluyen:```text dpkg-query -S rpm -qf pacman -Qo apk info -W
Cuando se identifica un paquete, se pueden inspeccionar los metadatos locales del changelog en busca del ID de CVE o del título del parche.
La ausencia de coincidencia en el changelog no es prueba de vulnerabilidad. Los proveedores no siempre incluyen referencias CVE individuales en los changelogs instalados localmente.
### 7. Comparación de versiones upstream
La versión del kernel analizada se compara con la tabla de línea base fija del escáner.
La comparación de versiones produce un resultado heurístico porque:
- los kernels de los proveedores pueden contener backports;
- las revisiones de lanzamiento de los paquetes de kernel son específicas de cada distribución;
- los kernels de nube, tiempo real, endurecidos y de habilitación de hardware pueden tener cronogramas de parches separados;
- una cadena de versión puede representar una rama mantenida por el proveedor en lugar de un lanzamiento upstream sin modificar.
### 8. Metadatos de actualización de paquetes
Cuando se admite, el escáner ejecuta consultas de solo lectura contra los metadatos locales existentes.
No actualiza los repositorios.
Ejemplos:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <
Un resultado que indica que no hay actualizaciones disponibles solo es tan actual como los metadatos del repositorio en caché.
En un host o máquina virtual normal, el escáner compara el kernel en ejecución con los kernels instalados detectados y comprueba el marcador de reinicio utilizado por los sistemas de la familia Debian.
Dentro de un contenedor o invitado WSL, esta comprobación se marca como controlada por el host en lugar de comparar los archivos del invitado con el kernel del host.
La precedencia de la evidencia es aproximadamente:
PATCHEDLa evidencia local directa indica que la corrección existe.
Ejemplos:
La confianza normalmente es alta, pero la alineación entre el código fuente y el kernel en ejecución aún debe verificarse.
NOT_EXPOSEDLa configuración detectada del kernel en ejecución tiene FUSE deshabilitado.
Este es un resultado de exposición, no una evidencia de que el propio código fuente del kernel contenga la corrección.
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYEl tamaño de página de memoria es lo suficientemente grande como para contener el registro documentado de 4120 bytes sin cruzar un límite de página.
Este veredicto se limita a la geometría de vulnerabilidad documentada.
UPSTREAM_BASELINE_SAFELa versión en ejecución analizada cumple con una línea base corregida conocida en upstream o es anterior a la implementación afectada.
La verificación del paquete del proveedor sigue siendo preferible.
POTENTIALLY_VULNERABLEEl kernel analizado se encuentra dentro de un rango afectado en upstream y no se encontró evidencia local directa de parche.
Este resultado requiere revisar el aviso del proveedor del sistema operativo antes de declarar vulnerable el kernel instalado.
INCONCLUSIVEEl escáner no pudo obtener suficiente evidencia.
Causas comunes:
NOT_APPLICABLEEl sistema operativo actual no es Linux.
| Código | Significado |
|---|---|
0 | Evidencia de parche, línea base segura en upstream o ausencia de exposición documentada |
1 | Potencialmente vulnerable |
2 | No concluyente |
3 | Error del escáner o de generación del informe |
Ejemplo:```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
Cuando se especifica `--no-exit-status`, el escáner devuelve `0` después de generar el informe.
---
## Fuentes de detección
El escáner utiliza las siguientes fuentes locales cuando están disponibles:
| Fuente | Información |
|---|---|
| `/etc/os-release` | Identidad de la distribución |
| `/usr/lib/os-release` | Identidad de la distribución de respaldo |
| `/proc/version` | Indicadores del kernel y de WSL |
| `/proc/config.gz` | Configuración del kernel en ejecución |
| `/boot/config-*` | Configuración del kernel |
| `/lib/modules/*/build/.config` | Configuración de compilación del kernel |
| `/proc/filesystems` | Sistemas de archivos registrados |
| `/proc/self/mountinfo` | Montajes FUSE activos |
| `/proc/1/cgroup` | Indicadores de contenedor |
| `/dev/fuse` | Presencia del dispositivo y permisos |
| `/usr/src/*/fs/fuse/readdir.c` | Evidencia opcional de parche a nivel de código fuente |
| `/lib/modules` | Inventario de kernels instalados |
| `/usr/lib/modules` | Inventario de kernels instalados |
| `/boot/vmlinuz-*` | Inventario de kernels instalados |
| `/var/run/reboot-required` | Indicador de reinicio de la familia Debian |
| base de datos de paquetes | Propiedad de los paquetes del kernel |
| registros de cambios de paquetes | Evidencia opcional de backport local |
| caché de paquetes | Evidencia opcional de disponibilidad de actualizaciones |
---
## Soporte de distribuciones
### Detección de la familia de distribución
| Familia | Distribuciones reconocidas |
|---|---|
| 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 |
| Desconocida | Guía genérica para Linux |
### Soporte de consulta de actualizaciones local
| Familia | Consulta de actualización de solo lectura |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | `dnf check-upgrade` en caché |
| SUSE | listado de parches CVE en caché con `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | No implementado |
| Void | No implementado |
| NixOS | No implementado |
| Desconocida | No implementado |
La ausencia de una actualización visible localmente no significa que un paquete corregido no esté disponible. Los metadatos del repositorio pueden estar desactualizados o la distribución puede no haber publicado aún un paquete.
---
## Generación de mitigación
La guía de mitigación se selecciona según:
- familia de distribución;
- gestor de paquetes;
- estado de contenedor o WSL;
- configuración de FUSE;
- disponibilidad de `/dev/fuse`;
- montajes FUSE activos;
- estado de reinicio;
- veredicto final.
El escáner imprime comandos pero nunca los ejecuta.
### Familia Debian y Ubuntu
Secuencia típica generada:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
Revise la transacción de paquetes propuesta antes de aprobarla.
Después del reinicio:```bash uname -r python3 cve_2026_31694_scanner.py
### Familia Arch y Manjaro
Secuencia generada típica:```bash
sudo pacman -Syu
sudo reboot
Sistemas de la familia Arch requieren una actualización completa del sistema. No actualices las bases de datos de paquetes con pacman -Sy y luego instales paquetes seleccionados sin completar la actualización.
Secuencia generada típica:```bash sudo dnf upgrade --refresh sudo systemctl reboot
Los sistemas que usan `yum` pueden recibir el comando `yum` correspondiente.
### Familia SUSE
Secuencia generada típica:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
El parche específico de CVE puede no estar disponible como una transacción separada en todos los productos SUSE o estados de repositorio.
Secuencia típica generada:```bash doas apk update doas apk upgrade doas reboot
El prefijo de privilegios depende de si el escáner encuentra `sudo`, `doas`, o una sesión ya con privilegios de root.
### Gentoo Linux
Secuencia generada típica:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
La instalación y activación del kernel dependen del flujo de trabajo de kernel de Gentoo configurado en el host.
Secuencia generada típica:```bash sudo xbps-install -Suv sudo reboot
### NixOS
Secuencia típica generada:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
Cuando el parche no puede completarse de inmediato, el escáner puede sugerir controles temporales.
Las recomendaciones posibles incluyen:
/dev/fuse;/dev/fuse de los contenedores no confiables;CAP_SYS_ADMIN;--privileged.Estos controles pueden interrumpir cargas de trabajo legítimas, incluyendo:
Las restricciones temporales no deben reemplazar la instalación de un kernel corregido por el proveedor.
Los contenedores normalmente comparten el kernel del host.
Un escáner ejecutado dentro de un contenedor puede detectar:
/dev/fuse, incluso cuando el host tiene FUSE habilitado.Por esta razón, el escáner marca la evidencia dependiente del host como no autoritativa y dirige la mitigación al host del contenedor.
Ejecute el escáner directamente en el host para una evaluación autoritativa de paquetes y reinicio.
La guía de endurecimiento de contenedores incluye la eliminación de:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
También se debe revisar la configuración equivalente de Compose:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
El kernel de WSL es gestionado por Windows en lugar del paquete de kernel de la distribución invitada de Linux.
Orientación típica generada:```powershell wsl --update wsl --shutdown
Run these commands from Windows PowerShell, restart the distribution, and rerun the scanner.
Updating only guest packages with `apt`, `dnf`, or another Linux package manager does not replace the WSL kernel.
### Virtual machines
A virtual machine normally owns its guest kernel. Distribution-specific package and reboot checks remain applicable inside the guest.
The hypervisor host should be assessed separately.
---
## Report Formats
### Text
Text output is intended for direct terminal use.```bash
python3 cve_2026_31694_scanner.py --format text
El informe contiene:
La salida JSON contiene el informe completo basado en dataclasses.```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
Selección de campo de ejemplo:```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"])
'
La salida Markdown es adecuada para registros técnicos, tickets e informes de evaluación.```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### Informe solo de mitigación```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
Con formato JSON, el modo solo-mitigación devuelve el objeto de mitigación en lugar del informe completo del host.
#!/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"
### Recopilación de informes sin fallar un trabajo```bash
python3 cve_2026_31694_scanner.py \
--format json \
--output /var/tmp/cve-2026-31694.json \
--no-exit-status
30 3 * * * /usr/bin/python3 /opt/security/cve_2026_31694_scanner.py --format json --output /var/log/cve-2026-31694.json --no-exit-status
Esto sobrescribe el mismo archivo de informe. Use un script contenedor cuando se requieran informes históricos.
### Ejemplo de servicio 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
El escáner necesita acceso de lectura a los metadatos del kernel y de los paquetes. Restricciones adicionales de sandbox pueden ocultar evidencia y producir un informe no concluyente.
Para la evaluación de flotas:
No trate un escaneo de la construcción de una imagen de contenedor como una evaluación del kernel del host.
POTENTIALLY_VULNERABLEIdentifique el kernel en ejecución exacto: ```bash uname -r
Identifique la distribución y versión instaladas: ```bash cat /etc/os-release
Revise el estado CVE del proveedor de la distribución para el paquete y la variante exactos del kernel.
Actualice los metadatos del paquete.
instale el paquete de kernel corregido compatible con el proveedor.
Reinicie el host.
Confirme que el kernel en ejecución cambió: ```bash uname -r
Vuelva a ejecutar el escáner.
INCONCLUSIVERecopile la evidencia que falta:```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
Luego verifica el paquete exacto del kernel contra el aviso del proveedor.
### Verificación de reinicio
Instalar un paquete de kernel corregido no cambia el kernel que se está ejecutando actualmente.
Verifica tanto los kernels instalados como los que están en ejecución, y luego reinicia según sea necesario.
Ejemplos:```bash
uname -r
ls -1 /lib/modules
Los sistemas de la familia Debian también pueden proporcionar:```bash test -e /var/run/reboot-required && cat /var/run/reboot-required
### Revisión de dependencia de FUSE
Antes de descargar o bloquear temporalmente FUSE:```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
No desmonte el módulo mientras haya sistemas de archivos FUSE activos montados.
El escáner no activa intencionalmente la ruta de código vulnerable.
Un veredicto POTENTIALLY_VULNERABLE significa que la evidencia pasiva disponible es consistente con la exposición. No es prueba de que la explotación vaya a tener éxito.
Los kernels de las distribuciones frecuentemente aplican backports de correcciones de seguridad.
Una versión upstream de apariencia antigua puede estar parcheada.
El aviso del proveedor y la versión exacta del paquete son la referencia autoritativa para los kernels gestionados por la distribución.
Un árbol de fuentes encontrado en /usr/src puede no coincidir con el kernel en ejecución.
La evidencia de parches en las fuentes debe validarse contra:```bash uname -r
y el paquete fuente o directorio de compilación utilizado para ese kernel exacto.
### Metadatos de paquetes desactualizados
El escáner no actualiza los repositorios.
Las comprobaciones de actualización de paquetes dependen del estado de la caché local existente.
Use los comandos de refresco y actualización específicos de la distribución generados para tomar una decisión de paquetes actualizada.
### Contenedores
Un contenedor ve el kernel del host, pero normalmente tiene metadatos de paquetes diferentes.
Ejecute el escáner en el host.
### WSL
El estado de los paquetes del invitado Linux no determina el estado de parcheo del kernel de WSL.
Actualice WSL desde Windows.
### Kernels personalizados
Los kernels personalizados, integrados, de dispositivos, de proveedor y compilados por uno mismo pueden no tener metadatos de paquetes ni cadenas de versión reconocibles.
Inspeccione el commit fuente real o las notas de versión del proveedor.
### Parcheo en vivo
El escáner no determina si un framework de parcheo en vivo ha aplicado esta corrección específica al kernel en ejecución.
Use las herramientas de estado y los datos de avisos del proveedor de parcheo en vivo.
### Estado de Secure Boot y del cargador de arranque
El escáner no verifica:
- qué kernel seleccionará el cargador de arranque a continuación;
- si Secure Boot acepta la imagen instalada;
- si se generó correctamente un nuevo initramfs;
- si la máquina se reinició correctamente con el kernel esperado.
### Sistemas de archivos distribuidos y namespaces
El escáner evalúa el namespace del proceso actual.
Los montajes o accesos a dispositivos ocultos por namespaces pueden no aparecer en el informe.
---
## Solución de problemas
### `Kernel configuration could not be determined`
Compruebe si existe uno de estos archivos:```bash
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config
Algunas distribuciones no exponen la configuración en ejecución a través de /proc/config.gz.
No se pudo identificar el paquete del kernel en ejecuciónPosibles causas:
Compruebe:```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"
### La consulta de actualización de paquetes no informa ninguna actualización
Actualice los metadatos de los paquetes utilizando la guía de mitigación generada y vuelva a ejecutar el escáner.
El escáner pasivo no actualiza los repositorios automáticamente.
### `POTENTIALLY_VULNERABLE` después de instalar las actualizaciones
Confirme que el nuevo kernel está en ejecución:```bash
uname -r
Compáralo con los directorios del kernel instalado:```bash ls -1 /lib/modules
Es posible que aún sea necesario reiniciar el sistema.
Compruebe también el aviso del proveedor, ya que un backport corregido puede no coincidir con la línea base de la versión upstream.
### FUSE está integrado en el kernel
Cuando el informe muestra:```text
CONFIG_FUSE_FS=y
modprobe -r fuse y el bloqueo de módulos no pueden deshabilitar FUSE.
Use un kernel parcheado o un kernel compilado sin soporte FUSE.
El escáner puede necesitar acceso de lectura a:```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories
Ajuste el endurecimiento del servicio para que estas rutas permanezcan legibles.
---
## Estructura de archivos
Estructura de proyecto recomendada:```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
Estructura de instalación recomendada:```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py
Ejemplo:```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/
Aung Myat Thu [w01f]