
Scanner passivo de vulnerabilidades de hosts Linux para CVE-2026-31694: verifica o kernel em execução, a configuração do FUSE, metadados de pacotes e evidências de patches, e gera orientações de mitigação personalizadas.
Uma ferramenta passiva de avaliação de hosts Linux para CVE-2026-31694, uma escrita fora dos limites no cache readdir do FUSE no kernel Linux.
O scanner avalia o kernel em execução, a exposição do FUSE, os metadados de pacotes locais, as evidências do código-fonte do kernel, o ambiente de execução e a família do sistema operacional. Quando o host pode estar afetado, ele produz um guia de mitigação adaptado à distribuição detectada.
Autor: Aung Myat Thu [w01f]
cve_2026_31694_scanner.py é um utilitário local de avaliação de vulnerabilidades que não explora o sistema.
Ele não confirma a vulnerabilidade acionando o caminho de código FUSE afetado. Em vez disso, ele combina vários indicadores passivos:
CONFIG_FUSE_FS;/dev/fuse e acesso do usuário atual;O resultado é uma avaliação de exposição, não uma prova baseada em exploração.
A CVE-2026-31694 afeta o cache readdir do FUSE no kernel Linux.
A lógica vulnerável calcula o tamanho serializado de uma entrada de diretório a partir de um comprimento de nome controlado pelo servidor e copia o registro para uma única página do cache de páginas. Uma entrada de diretório com um comprimento de nome de 4095 pode produzir um tamanho serializado de 4120 bytes.
Em um sistema que usa páginas de 4096 bytes, esse registro excede uma página em 24 bytes.
A correção a montante rejeita registros de diretório que não cabem em uma única página antes da cópia do cache ocorrer.
fs/fuse/readdir.c fuse_add_dirent_to_cache()
### Dados de baseline do scanner
O scanner contém os seguintes baselines estáveis corrigidos do upstream:
| Série do kernel | Baseline corrigido |
|---|---:|
| 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 ou mais recente |
Essas versões são usadas como uma das entradas da avaliação. Elas não são tratadas como a única fonte da verdade, pois os fornecedores de distribuições podem fazer backport da correção mantendo um número de versão upstream mais antigo.
---
## Modelo de Segurança
O scanner é projetado para evitar invocar a operação vulnerável.
### O scanner não
- montar um sistema de arquivos FUSE;
- abrir ou comunicar-se com `/dev/fuse`;
- iniciar um servidor FUSE;
- enviar registros de diretório especialmente elaborados;
- alocar memória para teste de posicionamento de página;
- preparar alocadores do kernel;
- modificar `/etc/passwd`;
- alterar a configuração do kernel;
- carregar ou descarregar módulos do kernel;
- modificar as permissões de `/dev/fuse`;
- instalar ou remover pacotes;
- reiniciar o sistema;
- tentar escalonamento de privilégios.
### O scanner pode
- ler arquivos em `/proc`, `/boot`, `/lib/modules`, `/usr/lib/modules`, `/usr/src` e diretórios de metadados de pacotes;
- executar consultas de pacotes limitadas e somente leitura;
- inspecionar montagens ativas e o registro de sistemas de arquivos;
- escrever um relatório somente quando `--output` for explicitamente fornecido;
- imprimir comandos de mitigação para revisão do administrador.
Os comandos de mitigação são saída de documentação. Eles nunca são executados automaticamente.
---
## Recursos
### Identificação do host e do kernel
- Lê `platform.release()` e analisa a versão do kernel no estilo upstream.
- Lê `/etc/os-release` ou `/usr/lib/os-release`.
- Detecta a arquitetura da CPU e o tamanho da página de memória.
- Identifica se o kernel verificado pertence ao sistema operacional atual.
### Avaliação da exposição do FUSE
- Lê `CONFIG_FUSE_FS` das fontes de configuração do kernel disponíveis.
- Detecta o suporte FUSE embutido e configurações de módulo carregável.
- Lê `/proc/filesystems`.
- Verifica os metadados de `/dev/fuse` e o acesso de leitura/escrita do usuário atual.
- Localiza `fusermount3` ou `fusermount`.
- Analisa as montagens FUSE ativas a partir de `/proc/self/mountinfo`.
### Evidência de patch
- Compara a versão em execução com os baselines corrigidos upstream.
- Procura no código-fonte do kernel instalado pela proteção de registro superdimensionado.
- Verifica os changelogs locais de pacotes RPM ou Debian para:
- `CVE-2026-31694`;
- o título do patch upstream.
### Estado do pacote e da reinicialização
- Tenta identificar o pacote que possui o kernel em execução.
- Consulta os metadados locais do gerenciador de pacotes sem atualizar os repositórios.
- Detecta um kernel instalado mais recente quando o ambiente do host é autoritativo.
- Verifica `/var/run/reboot-required` quando aplicável.
### Percepção do ambiente
- Detecta contêineres compatíveis com Docker.
- Detecta contêineres compatíveis com Podman.
- Detecta cgroups relacionados a contêineres.
- Detecta WSL.
- Detecta máquinas virtuais usando `systemd-detect-virt` quando disponível.
### Relatórios
- Saída de texto legível por humanos.
- Saída JSON legível por máquina.
- Saída de relatório em Markdown.
- Saída somente de mitigação.
- Saída opcional em arquivo.
- Códigos de saída de processo significativos.
---
## Requisitos
### Obrigatórios
- Linux para avaliação do kernel.
- Python 3.9 ou mais recente.
- Acesso de leitura aos metadados normais do sistema.
O scanner usa apenas a biblioteca padrão do Python.
### Comandos opcionais
Evidências adicionais são coletadas quando as seguintes ferramentas estão presentes:
| Ferramenta | Finalidade |
|---|---|
| `dpkg-query` | Propriedade de pacote do kernel e descoberta de changelog no Debian/Ubuntu |
| `rpm` | Inspeção de propriedade de pacote e changelog no Fedora/RHEL/SUSE |
| `pacman` | Metadados de pacote de kernel e atualizações da família Arch |
| `apt` | Consulta de atualização em cache da família Debian |
| `dnf` ou `dnf5` | Consulta de atualização em cache do Fedora/RHEL |
| `zypper` | Consulta de patch CVE em cache do SUSE |
| `apk` | Consulta de pacote/atualização do Alpine |
| `systemd-detect-virt` | Detecção de contêineres e máquinas virtuais |
Privilégios de root não são necessários para a verificação normal.
Algumas evidências podem não estar disponíveis para uma conta sem privilégios devido a permissões de arquivo específicas do sistema.
---
## Instalação
Coloque o scanner em um diretório de trabalho:```bash
chmod +x cve_2026_31694_scanner.py
Execute diretamente:```bash ./cve_2026_31694_scanner.py
Ou invoque-o com Python:```bash
python3 cve_2026_31694_scanner.py
Nenhuma instalação de pacote Python é necessária.
python3 cve_2026_31694_scanner.py
### Saída JSON```bash
python3 cve_2026_31694_scanner.py --format json
O alias de compatibilidade abaixo produz o mesmo formato:```bash python3 cve_2026_31694_scanner.py --json
### Relatório 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 apenas orientações de remediação```bash
python3 cve_2026_31694_scanner.py --mitigation-only
python3 cve_2026_31694_scanner.py --no-package-query
### Sempre retornar sucesso após relatar```bash
python3 cve_2026_31694_scanner.py --no-exit-status
Esta opção é útil ao coletar relatórios sem permitir que o status de vulnerabilidade faça um job de orquestração falhar.
O scanner avalia as evidências na seguinte ordem.
O scanner determina:
A detecção do ambiente altera a interpretação dos dados de pacotes e reinicialização.
Por exemplo, um contêiner pode ver o kernel do host, mas normalmente não consegue determinar o pacote do kernel do host a partir do sistema de arquivos do contêiner.
O scanner procura uma configuração do kernel em execução em:```text /proc/config.gz /boot/config-$(uname -r) /lib/modules/$(uname -r)/build/.config /usr/lib/modules/$(uname -r)/build/.config
Ele avalia:```text
CONFIG_FUSE_FS=y
CONFIG_FUSE_FS=m
CONFIG_FUSE_FS is not set
Interpretação:
| Valor | Significado |
|---|---|
y | O FUSE está embutido no kernel. A lista negra de módulos não pode desativá-lo. |
m | O FUSE está disponível como módulo carregável. |
O scanner verifica:```text /proc/filesystems /dev/fuse PATH for fusermount3 or fusermount /proc/self/mountinfo
A ausência de `/dev/fuse` ou `fusermount3` reduz a usabilidade imediata no ambiente atual, mas não prova que o kernel está corrigido.
### 4. Geometria do tamanho de página
O registro superdimensionado documentado tem `4120` bytes.
Quando o tamanho de página do host é de pelo menos `4120` bytes, o registro documentado não cruza um limite de página. O scanner pode relatar que o sistema não está exposto pela geometria de página documentada.
Essa conclusão se aplica apenas ao registro documentado e ao comportamento de implementação avaliado. Não é uma declaração geral de que todos os problemas de segurança de memória do FUSE são impossíveis em sistemas com páginas maiores.
### 5. Inspeção da fonte instalada
Quando a fonte instalada está disponível, o scanner pesquisa:```text
fs/fuse/readdir.c
Ele procura pela função afetada e por uma proteção equivalente à rejeição de reclen > PAGE_SIZE.
A evidência direta do código-fonte tem maior confiança do que a comparação de versões.
O código-fonte inspecionado deve corresponder ao kernel em execução para que o resultado seja autoritativo. As árvores de código-fonte da distribuição em /usr/src podem representar um kernel instalado diferente.
O scanner tenta mapear a imagem do kernel em execução para o pacote proprietário usando o banco de dados de pacotes da distribuição detectada.
Os mecanismos possíveis incluem:```text dpkg-query -S rpm -qf pacman -Qo apk info -W
Quando um pacote é identificado, os metadados locais do changelog podem ser inspecionados em busca do ID de CVE ou do título do patch.
A ausência de correspondência no changelog não é prova de vulnerabilidade. Os fornecedores nem sempre incluem referências individuais de CVE nos changelogs instalados localmente.
### 7. Comparação de versão upstream
A versão do kernel analisada é comparada com a tabela de linha de base fixa do scanner.
A comparação de versões produz um resultado heurístico porque:
- kernels de fornecedores podem conter backports;
- as revisões de lançamento do pacote de kernel são específicas de cada distribuição;
- kernels de nuvem, tempo real, endurecidos e de habilitação de hardware podem ter cronogramas de patch separados;
- uma string de versão pode representar um ramo mantido pelo fornecedor, em vez de um lançamento upstream não modificado.
### 8. Metadados de atualização de pacotes
Onde houver suporte, o scanner executa consultas somente leitura contra os metadados locais existentes.
Ele não atualiza os repositórios.
Exemplos:```text
apt list --upgradable
pacman -Qu
dnf --cacheonly --quiet check-upgrade
zypper --no-refresh list-patches --all --cve=CVE-2026-31694
apk version -l <
Um resultado que não mostra atualização disponível é tão atual quanto os metadados do repositório em cache.
Em um host normal ou máquina virtual, o scanner compara o kernel em execução com os kernels instalados detectados e verifica o marcador de reinicialização usado por sistemas da família Debian.
Dentro de um contêiner ou convidado do WSL, essa verificação é marcada como controlada pelo host, em vez de comparar os arquivos do convidado com o kernel do host.
A precedência de evidências é aproximadamente:
PATCHEDEvidência local direta indica que a correção existe.
Exemplos:
A confiança normalmente é alta, mas o alinhamento entre o código-fonte e o kernel em execução ainda deve ser verificado.
NOT_EXPOSEDA configuração detectada do kernel em execução tem o FUSE desabilitado.
Este é um resultado de exposição, não uma evidência de que o código-fonte do kernel em si contém a correção.
NOT_EXPOSED_BY_DOCUMENTED_PAGE_GEOMETRYO tamanho da página de memória é grande o suficiente para conter o registro documentado de 4120 bytes sem cruzar um limite de página.
Este veredito se limita à geometria documentada da vulnerabilidade.
UPSTREAM_BASELINE_SAFEA versão em execução analisada atende a uma linha de base upstream corrigida conhecida ou é anterior à implementação afetada.
A verificação do pacote do fornecedor continua sendo preferível.
POTENTIALLY_VULNERABLEO kernel analisado está dentro de uma faixa upstream afetada e nenhuma evidência direta de patch local foi encontrada.
Este resultado exige verificar o advisory do fornecedor do sistema operacional antes de declarar o kernel instalado como vulnerável.
INCONCLUSIVEO scanner não conseguiu obter evidências suficientes.
Causas comuns:
NOT_APPLICABLEO sistema operacional atual não é Linux.
| Código | Significado |
|---|---|
0 | Evidência de correção aplicada, linha de base upstream segura ou exposição documentada ausente |
Exemplo:```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
Quando `--no-exit-status` é especificado, o scanner retorna `0` após gerar o relatório.
---
## Fontes de Detecção
O scanner utiliza as seguintes fontes locais quando disponíveis:
| Fonte | Informação |
|---|---|
| `/etc/os-release` | Identidade da distribuição |
| `/usr/lib/os-release` | Identidade da distribuição (alternativa) |
| `/proc/version` | Indicadores de kernel e WSL |
| `/proc/config.gz` | Configuração do kernel em execução |
| `/boot/config-*` | Configuração do kernel |
| `/lib/modules/*/build/.config` | Configuração de compilação do kernel |
| `/proc/filesystems` | Sistemas de arquivos registrados |
| `/proc/self/mountinfo` | Montagens FUSE ativas |
| `/proc/1/cgroup` | Indicadores de contêiner |
| `/dev/fuse` | Presença e permissões do dispositivo |
| `/usr/src/*/fs/fuse/readdir.c` | Evidência opcional de patch no nível do código-fonte |
| `/lib/modules` | Inventário de kernels instalados |
| `/usr/lib/modules` | Inventário de kernels instalados |
| `/boot/vmlinuz-*` | Inventário de kernels instalados |
| `/var/run/reboot-required` | Indicador de reinicialização da família Debian |
| banco de dados de pacotes | Propriedade do pacote do kernel |
| changelogs de pacotes | Evidência opcional de backport local |
| cache de pacotes | Evidência opcional de disponibilidade de atualização |
---
## Suporte a Distribuições
### Detecção de família de distribuição
| Família | Distribuições reconhecidas |
|---|---|
| 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 |
| Desconhecida | Orientação genérica para Linux |
### Suporte a consulta de atualização local
| Família | Consulta de atualização somente leitura |
|---|---|
| Debian/Ubuntu | `apt list --upgradable` |
| Arch | `pacman -Qu` |
| Fedora/RHEL | `dnf check-upgrade` em cache |
| SUSE | listagem de patches CVE em cache com `zypper` |
| Alpine | `apk version -l <` |
| Gentoo | Não implementado |
| Void | Não implementado |
| NixOS | Não implementado |
| Desconhecida | Não implementado |
A ausência de uma atualização visível localmente não significa que um pacote corrigido esteja indisponível. Os metadados do repositório podem estar desatualizados ou a distribuição pode ainda não ter publicado um pacote.
---
## Geração de Mitigação
A orientação de mitigação é selecionada de acordo com:
- família de distribuição;
- gerenciador de pacotes;
- status de contêiner ou WSL;
- configuração do FUSE;
- disponibilidade de `/dev/fuse`;
- montagens FUSE ativas;
- estado de reinicialização;
- veredito final.
O scanner imprime comandos, mas nunca os executa.
### Família Debian e Ubuntu
Sequência típica gerada:```bash
sudo apt update
sudo apt full-upgrade
sudo reboot
Revise a transação de pacote proposta antes de aprová-la.
Após a reinicialização:```bash uname -r python3 cve_2026_31694_scanner.py
### Família Arch e Manjaro
Sequência típica gerada:```bash
sudo pacman -Syu
sudo reboot
Arch-family systems require a complete system upgrade. Do not refresh package databases with pacman -Sy and then install selected packages without completing the upgrade.
Sequência típica gerada:```bash sudo dnf upgrade --refresh sudo systemctl reboot
Systems using `yum` may receive the corresponding `yum` command.
### SUSE family
Typical generated sequence:```bash
sudo zypper refresh
sudo zypper patch --cve=CVE-2026-31694
sudo zypper patch --category security
sudo systemctl reboot
O patch específico do CVE pode não estar disponível como uma transação separada em todos os produtos SUSE ou estados de repositório.
Sequência gerada típica:```bash doas apk update doas apk upgrade doas reboot
O prefixo de privilégio depende de o scanner encontrar `sudo`, `doas` ou uma sessão já como root.
### Gentoo Linux
Sequência gerada típica:```bash
sudo emaint sync -a
sudo emerge --ask --update --deep --newuse @world
A instalação e ativação do kernel dependem do fluxo de trabalho do kernel Gentoo configurado no host.
Sequência gerada típica:```bash sudo xbps-install -Suv sudo reboot
### NixOS
Sequência gerada típica:```bash
sudo nixos-rebuild switch --upgrade
sudo systemctl reboot
Quando a correção não puder ser concluída imediatamente, o scanner pode sugerir controles temporários.
As recomendações possíveis incluem:
/dev/fuse;/dev/fuse de contêineres não confiáveis;CAP_SYS_ADMIN;--privileged.Esses controles podem interromper cargas de trabalho legítimas, incluindo:
As restrições temporárias não devem substituir a instalação de um kernel corrigido pelo fornecedor.
Contêineres normalmente compartilham o kernel do host.
Um scanner executado dentro de um contêiner pode detectar:
/dev/fuse, mesmo quando o host tem FUSE habilitado.Por esse motivo, o scanner marca evidências dependentes do host como não autoritativas e direciona a mitigação ao host do contêiner.
Execute o scanner diretamente no host para uma avaliação autoritativa de pacotes e reinicialização.
As diretrizes de endurecimento de contêineres incluem a remoção de:```text --device /dev/fuse --cap-add SYS_ADMIN --privileged
A configuração Compose equivalente também deve ser revisada:```yaml
devices:
- /dev/fuse:/dev/fuse
cap_add:
- SYS_ADMIN
privileged: true
O kernel WSL é gerenciado pelo Windows em vez do pacote de kernel da distribuição convidada Linux.
Orientação típica gerada:```powershell wsl --update wsl --shutdown
Execute estes comandos no Windows PowerShell, reinicie a distribuição e execute novamente o scanner.
Atualizar apenas os pacotes convidados com `apt`, `dnf` ou outro gerenciador de pacotes Linux não substitui o kernel do WSL.
### Máquinas virtuais
Uma máquina virtual normalmente possui seu próprio kernel convidado. As verificações de pacotes e reinicialização específicas da distribuição permanecem aplicáveis dentro do convidado.
O host do hipervisor deve ser avaliado separadamente.
---
## Formatos de Relatório
### Texto
A saída de texto é destinada ao uso direto no terminal.```bash
python3 cve_2026_31694_scanner.py --format text
O relatório contém:
A saída JSON contém o relatório completo baseado em dataclass.```bash
python3 cve_2026_31694_scanner.py
--format json
--output report.json
Exemplo de seleção de campo:```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"])
'
A saída em Markdown é adequada para registros técnicos, tickets e relatórios de avaliação.```bash
python3 cve_2026_31694_scanner.py
--format markdown
--output report.md
### Relatório apenas de mitigação```bash
python3 cve_2026_31694_scanner.py \
--mitigation-only \
--format markdown
Com o formato JSON, o modo somente mitigação retorna o objeto de mitigação em vez do relatório completo do 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"
### Coleta de relatórios sem falhar um job```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
Isso sobrescreve o mesmo arquivo de relatório. Use um script wrapper quando relatórios históricos forem necessários.
### Exemplo de serviço 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.
Para avaliação de frota:
Não trate uma verificação feita a partir de uma imagem de contêiner como uma avaliação do kernel do host.
POTENTIALLY_VULNERABLEIdentifique o kernel exato em execução: ```bash uname -r
Identifique a distribuição e a versão instaladas: ```bash cat /etc/os-release
Revise o status CVE do fornecedor da distribuição para o pacote de kernel e a variante exatos.
Atualize os metadados do pacote.
instale o pacote de kernel corrigido suportado pelo fornecedor.
Reinicie o host.
Confirme que o kernel em execução mudou: ```bash uname -r
Execute o scanner novamente.
INCONCLUSIVEColete as evidências ausentes:```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
Then verify the exact kernel package against the vendor advisory.
### Verificação de reinicialização
Instalar um pacote de kernel corrigido não altera o kernel atualmente em execução.
Verifique os kernels instalados e em execução e reinicie conforme necessário.
Exemplos:```bash
uname -r
ls -1 /lib/modules
Os sistemas da família Debian também podem fornecer:```bash test -e /var/run/reboot-required && cat /var/run/reboot-required
### Revisão da dependência FUSE
Antes de descarregar ou bloquear temporariamente o FUSE:```bash
findmnt -t fuse,fuseblk,fusectl
lsmod | grep '^fuse'
ps aux | grep -E '[f]usermount|[s]shfs|[r]clone'
Não descarregue o módulo enquanto houver sistemas de arquivos FUSE ativos montados.
O scanner intencionalmente não aciona o caminho de código vulnerável.
Um veredito POTENTIALLY_VULNERABLE significa que a evidência passiva disponível é consistente com a exposição. Não é prova de que a exploração terá sucesso.
Kernels de distribuição frequentemente fazem backport de correções de segurança.
Uma versão upstream de aparência mais antiga pode estar corrigida.
O aviso do fornecedor e a versão exata do pacote são as referências definitivas para kernels gerenciados pela distribuição.
Uma árvore de fontes encontrada em /usr/src pode não corresponder ao kernel em execução.
As evidências de patches de código-fonte devem ser validadas em relação a:```bash uname -r
and the source package or build directory used for that exact kernel.
### Metadados de pacotes desatualizados
O scanner não atualiza repositórios.
As verificações de atualização de pacotes dependem do estado do cache local existente.
Use os comandos de refresh e upgrade específicos da distribuição gerados para uma decisão de pacotes atualizada.
### Contêineres
Um contêiner vê o kernel do host, mas normalmente tem metadados de pacotes diferentes.
Execute o scanner no host.
### WSL
O estado dos pacotes do convidado Linux não determina o status de correção do kernel do WSL.
Atualize o WSL a partir do Windows.
### Kernels personalizados
Kernels personalizados, embarcados, de appliances, de fornecedores e compilados manualmente podem não ter metadados de pacotes ou strings de versão reconhecíveis.
Inspecione o commit real da fonte ou as notas de lançamento do fornecedor.
### Live patching
O scanner não determina se um framework de live-patch aplicou essa correção específica ao kernel em execução.
Use as ferramentas de status e os dados de aviso do fornecedor do live-patch.
### Estado do Secure Boot e do bootloader
O scanner não verifica:
- qual kernel o bootloader selecionará em seguida;
- se o Secure Boot aceita a imagem instalada;
- se um novo initramfs foi gerado corretamente;
- se a máquina foi reinicializada com sucesso no kernel esperado.
### Sistemas de arquivos distribuídos e namespaces
O scanner avalia o namespace do processo atual.
Montagens ou acessos a dispositivos ocultos por namespaces podem não aparecer no relatório.
---
## Solução de problemas
### `Kernel configuration could not be determined`
Verifique se um destes arquivos existe:```bash
ls -l /proc/config.gz
ls -l /boot/config-"$(uname -r)"
ls -l /lib/modules/"$(uname -r)"/build/.config
Some distributions do not expose the running configuration through /proc/config.gz.
Running kernel package could not be identifiedPossible causes:
Check:```bash uname -r ls -l /boot ls -l /lib/modules/"$(uname -r)"
### Consulta de atualização de pacotes não relata atualização
Atualize os metadados dos pacotes usando o guia de mitigação gerado e execute novamente o scanner.
O scanner passivo não atualiza os repositórios automaticamente.
### `POTENTIALLY_VULNERABLE` após instalar as atualizações
Confirme que o novo kernel está em execução:```bash
uname -r
Compare-o com os diretórios do kernel instalado:```bash ls -1 /lib/modules
Pode ser necessário reinicializar.
Verifique também o aviso do fornecedor, pois um backport corrigido pode não corresponder à linha de base da versão upstream.
### O FUSE está integrado ao kernel
Quando o relatório mostra:```text
CONFIG_FUSE_FS=y
modprobe -r fuse e a lista negra de módulos não podem desativar o FUSE.
Use um kernel com patch ou um kernel compilado sem suporte a FUSE.
O scanner pode precisar de acesso de leitura a:```text /proc /boot /lib/modules /usr/lib/modules /usr/src package database directories package cache directories
Ajuste o endurecimento do serviço para que esses caminhos permaneçam legíveis.
---
## Layout de Arquivos
Layout de projeto recomendado:```text
cve-2026-31694-scanner/
├── README.md
└── cve_2026_31694_scanner.py
Layout de instalação recomendado:```text /opt/security/cve-2026-31694/ ├── README.md └── cve_2026_31694_scanner.py
Exemplo:```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]
| Opção | Descrição |
|---|
--format text | Saída de terminal legível por humanos. Este é o padrão. |
--format json | Relatório estruturado completo em JSON. |
--format markdown | Relatório técnico em Markdown. |
--json | Alias para --format json. |
--output PATH | Escreve o relatório em um arquivo em vez da saída padrão. |
--mitigation-only | Retorna apenas a seção de mitigação gerada. |
--no-package-query | Ignora consultas locais de atualização do gerenciador de pacotes. |
--no-exit-status | Sempre encerra com o status 0 após gerar a saída. |
-h, --help | Exibe a ajuda do comando. |
n | O FUSE está desativado na configuração detectada. |
| unknown | Nenhuma fonte de configuração legível estava disponível. |
1 | Potencialmente vulnerável |
2 | Inconclusivo |
3 | Erro no scanner ou na geração de relatório |