
Script de shell que avalia o estado de patch do kernel do Ubuntu para a CVE-2026-98432 e aplica uma solução paliativa persistente com nftables ou iptables, descartando pacotes TCP IPv4 que transportam opções IP.
# 1. Inspect the host; no changes.
sudo ./cve-2026-98432-mitigate.sh check
# 2. Get a patch-state verdict for the exact running kernel package.
sudo ./cve-2026-98432-mitigate.sh assess
# 3. Apply the stopgap filter and make it survive reboot.
sudo ./cve-2026-98432-mitigate.sh enable
# 4. Prove that normal TCP still works and IP-option TCP is dropped.
sudo ./cve-2026-98432-mitigate.sh verify
# 5. Monitor. Exit 0 = healthy, 1 = mismatch/persistence failure, 2 = no state.
sudo ./cve-2026-98432-mitigate.sh status
# 6. After booting a kernel that Ubuntu marks as fixed.
sudo ./cve-2026-98432-mitigate.sh disable
enable recusa-se a alterar o conjunto de regras quando CIPSO/NetLabel é detetado, porque a regra descarta todo o TCP que transporta opções IP, incluindo tráfego rotulado. Use --ignore-cipso apenas se aceitar esse compromisso. Contentores ou hosts sem systemd devem usar --no-persist; caso contrário, enable termina com o código 4 quando a persistência após reinício não pode ser estabelecida, mantendo a regra ativa.
CVE-2026-98432 é um use-after-free no handshake TCP IPv4 do Linux. É alcançável quando um SYN recebido transporta opções IP. A correção real é um kernel com patch; este script é uma solução temporária que descarta pacotes TCP IPv4 de entrada cujo comprimento do cabeçalho IP é superior a 5 (IHL 6-15), ou seja, pacotes que transportam opções IP, antes do conntrack e do NAT do Docker.
Suporta dois backends equivalentes:
table ip cve_2026_98432, prioridade de prerouting -310, apenas TCP, contador, drop.raw PREROUTING, correspondência u32 0>>24&0xf=6:15, apenas TCP, contador, drop.A forma nft usa a família ip e uma prioridade numérica para funcionar tanto no nft 0.5 do Ubuntu 16.04 como no nft 1.x atual. A forma iptables funciona com iptables 1.6 e posteriores. Nenhum pacote é instalado a menos que --install-nft seja passado.
O script valida a regra esperada completa, não fragmentos. Para nft, exige que a cadeia pre tenha o hook de prerouting exatamente na prioridade -310 (ou a grafia legada raw - 10) e que o DROP esperado seja a primeira regra. Para iptables, exige que iptables -C tenha sucesso e que a primeira regra completa de raw PREROUTING corresponda após normalização. enable repara uma regra deslocada em vez de se recusar a reaplicá-la.
O script da Akamai contribuiu com as ideias de avaliação e segurança abaixo. A sua forma de aplicação não foi adotada porque a nossa é mais estrita e compatível com 16.04. As descobertas incorporadas mais importantes, por ordem de prioridade:
assess resolve o pacote de imagem exato do kernel em execução (linux-image-$KVER, depois linux-image-unsigned-$KVER, depois o proprietário de /boot/vmlinuz-$KVER). Metapacotes como linux-image-generic são mostrados apenas como contexto, nunca usados como evidência de veredito. Uma correspondência no changelog é evidência forte mas falível; um changelog ausente juntamente com uma versão upstream limpa independentemente conclusiva igual ou superior à versão corrigida ainda produz PATCHED; um kernel de fornecedor sem evidência produz UNKNOWN.enable terminar com o código 4 mantendo a regra ativa. status avalia a persistência independentemente do estado de execução do oneshot e rejeita enabled-runtime como não persistente.detected recusa por predefinição, unknown avisa, not_detected prossegue. A ausência de netlabelctl não prova que o CIPSO está ausente.check distingue verificado-utilizável, presente-não-verificado, inutilizável e desconhecido; --backend nft avalia o nft mesmo quando o iptables funciona.XDP_PASS ainda entra na pilha do kernel.-x) sempre que possível, e uma regra legada filter/INPUT de uma versão anterior é reportada e removida após a substituição por raw ser carregada.A correspondência de regras e o formato do arquivo de estado são compatíveis com versões anteriores. Você não precisa executar disable primeiro; executar novamente enable com esta versão repara a regra no local, instala a unidade de inicialização atualizada e registra o novo campo de persistência. Se um arquivo de estado antigo não tiver uma linha persist=, status infere a persistência a partir do estado da unidade em vez de falhar pelo campo ausente.
Mudanças operacionais a conhecer:
enable agora sai com código 4 quando a regra está ativa, mas a persistência após reinicialização falhou. Anteriormente, ele podia sair com código 0 nesse caso.check agora retorna 0 apenas para um backend utilizável verificado, 1 para nenhum backend utilizável, 4 para presente mas não verificado, e 2 para uso.assess é novo e retorna 0/1/3/4 conforme documentado abaixo.enable a menos que --ignore-cipso seja passado.enable para que a nova ordenação da unidade e o ExecStart sejam aplicados.Preparado: 2026-10-30 (atualizado em 2026-10-31)
Rastreador do Ubuntu verificado: 2026-10-31 11:59 UTC (página atualizada pela última vez em 2026-10-30). Nenhum kernel corrigido foi lançado ainda.
Escopo: servidores Linux, principalmente Ubuntu 16.04 (xenial), 22.04 (jammy), 24.04 (noble) e 26.04 (resolute), incluindo hosts Docker/BTCPay.
Entregável: cve-2026-98432-mitigate.sh neste diretório.
Testado em: Ubuntu 16.04, 22.04, 24.04 e 26.04.