
Correção do kernel OpenVPN upstream para CVE-2026-74727, testada no kernel Ubuntu 7.0.0-38.38. Inclui instruções de compilação e resultados de testes funcionais.
Documentação de uma compilação local, testes funcionais, revisão focada do código-fonte e testes de regressão determinísticos de invariantes de rehash de IP de VPN e de endpoint de transporte da correção upstream associada à CVE-2026-74727, em relação ao pacote de código-fonte do kernel Ubuntu linux 7.0.0-38.38 em x86_64. Os testes de endpoint de transporte também foram recompilados e executados em um kernel Generic KASAN compilado localmente.
Esta é uma revisão de backport de uma correção upstream existente, não uma vulnerabilidade recém-descoberta nem uma correção de segurança original. O autor upstream registrado é Antonio Quartulli. O commit registrado é 33ec10567fe14456063daf549fdf1a4f53448e4c.
Patch upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/patch/?id=33ec10567fe14456063daf549fdf1a4f53448e4c
A alteração em drivers/net/ovpn/peer.c impede o rehash de um peer que já foi removido da tabela hash de IDs de peer. Preserve os cabeçalhos originais do patch, a autoria e o licenciamento ao distribuí-lo. Esta documentação não relicencia o patch do kernel.
O patch upstream original está incluído byte a byte. Seu SHA-256 corresponde ao artefato usado na sessão de teste registrada. Seu autor, mensagem de commit e alterações de código foram verificados em relação ao commit upstream público no GitHub. Nenhum binário está incluído.
O checksum do patch foi verificado de forma independente em relação ao arquivo incluído. O checksum do módulo foi registrado durante a sessão de teste do operador; o binário não é distribuído aqui.
| Artefato | SHA-256 |
|---|---|
CVE-2026-74727-upstream.patch | baf0962c60b182776a86e040d2ec5b35eea2737c2e2eb6f17f87eb7d2fe47b24 |
ovpn.ko testado | 0853fdce14ce1c4d64857871dc873bf98a1b8fe8243bf042ad6daffc906e6d27 |
Use uma cópia extraída separada do pacote de código-fonte exato do Ubuntu linux 7.0.0-38.38. Instale primeiro os headers de kernel correspondentes e o conjunto de ferramentas de compilação. O compilador registrado foi o Ubuntu GCC 15.2.0-16ubuntu1, correspondente ao compilador do kernel em execução.
A partir da raiz do código-fonte, com o patch em seu diretório pai:
patch --dry-run --batch --forward --fuzz=0 -p1 < ../CVE-2026-74727-upstream.patch
patch --batch --forward --fuzz=0 -p1 < ../CVE-2026-74727-upstream.patch
make -C /lib/modules/7.0.0-38-generic/build \
M="$PWD/drivers/net/ovpn" CONFIG_OVPN=m \
CC=x86_64-linux-gnu-gcc -j1 modules
A aplicação do patch registrada usou zero fuzz com deslocamentos de linha de -6 e -5. A compilação retornou código de saída 0. A geração de BTF foi ignorada porque vmlinux não estava disponível. O vermagic do módulo correspondeu a 7.0.0-38-generic SMP preempt mod_unload modversions.
A correspondência do vermagic e uma compilação bem-sucedida não estabelecem que um módulo seja seguro nem que a vulnerabilidade tenha sido totalmente validada.
Os testes foram realizados manualmente em uma VM Ubuntu no Hyper-V com kernel 7.0.0-38-generic e Secure Boot desativado. Os resultados baseiam-se na saída de terminal fornecida pelo operador:
192.0.2.2 para 192.0.2.3; o estado do peer retornado confirmou a alteração. Isso ficou restrito a um namespace de teste temporário e não alterou o endereço operacional da VPN.Em 2026-10-06, dois módulos de teste autônomos executaram a função real ovpn_peer_hash_vpn_ip() extraída do backup não corrigido e do código-fonte corrigido. Objetos sintéticos privados permaneceram alocados durante todo o processo. Após simular a remoção concluída das tabelas de hash, o teste chamou a função novamente sob ovpn->lock.
| Propriedade | Antes do patch | Após o patch |
|---|---|---|
| Peer ativo está inserido nas tabelas IPv4 e IPv6 | PASS | PASS |
| Peer removido permanece fora das tabelas IPv4 e IPv6 | FAIL | PASS |
| Buckets IPv4 / IPv6 ocupados após rehash de peer removido | 1 / 1 | 0 / 0 |
Esta é uma verificação em tempo de execução do invariante específico pós-remoção, não uma reprodução de uma corrida de exclusão concorrente nem de um use-after-free. A falha do invariante na linha de base é esperada e demonstra que o teste distingue as duas versões da função. Ambos os módulos foram subsequentemente descarregados. A VPN operacional permaneceu ativa com seu endereço inalterado. O intervalo de log revisado continha os resultados dos testes e nenhuma mensagem correspondente de BUG, Oops, general protection fault ou soft lockup.
Consulte TESTING.md para a saída registrada, instruções de reprodução e limitações. O gerador está em tests/prepare-ovpn-rehash-regtest.py.
Em 2026-10-06, módulos de teste autônomos também executaram a função real ovpn_peer_endpoints_update() extraída dos códigos-fonte não corrigido e corrigido, com os helpers de binding de produção. Tanto para IPv4 quanto para IPv6, cabeçalhos de pacote sintéticos privados fizeram um peer ativo flutuar e, em seguida, provocaram outra atualização de endpoint após suas entradas de hash terem sido removidas enquanto seu armazenamento permanecia alocado.
| Propriedade, tanto para IPv4 quanto para IPv6 | Antes do patch | Após o patch |
|---|---|---|
| Peer ativo flutua e permanece na tabela de transporte | PASS | PASS |
| A atualização de endpoint é alcançada após remoção modelada | PASS | PASS |
| Peer removido permanece fora da tabela de transporte | FAIL | PASS |
| Buckets de transporte ocupados após atualização de peer removido | 1 | 0 |
Nenhum pacote foi transmitido, e nenhuma interface real, peer de VPN ou endereço foi modificado. Ambos os módulos de teste foram descarregados depois; a VPN operacional permaneceu ativa com seu endereço inalterado. O intervalo de log revisado continha os quatro resultados de teste e nenhuma linha correspondente de BUG, Oops, general protection fault ou soft lockup.
Consulte FLOAT-TESTING.md e tests/prepare-ovpn-float-regtest.py para escopo, instruções de reprodução e resultados registrados.
Em 2026-10-06, o código-fonte revisado do Ubuntu foi compilado como um kernel completo com CONFIG_KASAN=y, CONFIG_KASAN_GENERIC=y, CONFIG_KASAN_OUTLINE=y e CONFIG_STACKTRACE=y. Sua string de versão era 7.0.14-ovpn-kasan. As compilações do kernel e dos módulos retornaram código de saída 0. A VM inicializou este kernel e seu serviço administrativo de VPN estava ativo.