
Correzione upstream del kernel OpenVPN per CVE-2026-74727, testata sul kernel Ubuntu 7.0.0-38.38. Include istruzioni di compilazione e risultati dei test funzionali.
Documentazione di una build locale, test funzionali, revisione mirata del codice sorgente e test di regressione deterministici sull'invariante di rehash dell'IP VPN e dell'endpoint di trasporto relativi alla correzione upstream associata a CVE-2026-74727, rispetto al pacchetto sorgente del kernel Ubuntu linux 7.0.0-38.38 su x86_64. I test sull'endpoint di trasporto sono stati inoltre ricompilati ed eseguiti su un kernel Generic KASAN compilato localmente.
Questa è una revisione di un backport di una correzione upstream esistente, non una vulnerabilità scoperta di recente né una correzione di sicurezza originale. L'autore upstream registrato è Antonio Quartulli. Il commit registrato è 33ec10567fe14456063daf549fdf1a4f53448e4c.
Patch upstream: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/patch/?id=33ec10567fe14456063daf549fdf1a4f53448e4c
La modifica in drivers/net/ovpn/peer.c impedisce il rehash di un peer già rimosso dalla tabella hash degli ID dei peer. Conservare le intestazioni originali della patch, la paternità e la licenza al momento della distribuzione. Questa documentazione non relicenzia la patch del kernel.
La patch upstream originale è inclusa byte per byte. Il suo SHA-256 corrisponde all'artefatto utilizzato nella sessione di test registrata. L'autore, il messaggio di commit e le modifiche al codice sono stati verificati rispetto al commit upstream pubblico su GitHub. Nessun binario è incluso.
Il checksum della patch è stato verificato in modo indipendente rispetto al file incluso. Il checksum del modulo è stato registrato durante la sessione di test dell'operatore; il binario non è distribuito qui.
| Artefatto | SHA-256 |
|---|---|
CVE-2026-74727-upstream.patch | baf0962c60b182776a86e040d2ec5b35eea2737c2e2eb6f17f87eb7d2fe47b24 |
ovpn.ko testato | 0853fdce14ce1c4d64857871dc873bf98a1b8fe8243bf042ad6daffc906e6d27 |
Utilizzare una copia estratta separata dell'esatto pacchetto sorgente Ubuntu linux 7.0.0-38.38. Installare prima gli header del kernel corrispondenti e la toolchain di compilazione. Il compilatore registrato era Ubuntu GCC 15.2.0-16ubuntu1, corrispondente al compilatore del kernel in esecuzione.
Dalla radice del sorgente, con la patch nella directory superiore:
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
L'applicazione della patch registrata ha utilizzato zero fuzz con offset di riga di -6 e -5. La build ha restituito codice di uscita 0. La generazione di BTF è stata saltata perché vmlinux non era disponibile. Il vermagic del modulo corrispondeva a 7.0.0-38-generic SMP preempt mod_unload modversions.
La corrispondenza del vermagic e una build riuscita non dimostrano che un modulo sia sicuro né che la vulnerabilità sia stata completamente validata.
I test sono stati eseguiti manualmente su una VM Ubuntu Hyper-V con kernel 7.0.0-38-generic e Secure Boot disabilitato. I risultati si basano sull'output del terminale fornito dall'operatore:
192.0.2.2 a 192.0.2.3; lo stato del peer restituito ha confermato la modifica. Ciò è rimasto confinato a un namespace di test temporaneo e non ha modificato l'indirizzo VPN operativo.Il 2026-10-06, due moduli di test autonomi hanno eseguito la funzione effettiva ovpn_peer_hash_vpn_ip() estratta dal backup non patchato e dal sorgente patchato. Oggetti sintetici privati sono rimasti allocati per tutta la durata. Dopo aver simulato la rimozione completata dalle tabelle hash, il test ha richiamato nuovamente la funzione sotto ovpn->lock.
| Proprietà | Prima della patch | Dopo la patch |
|---|---|---|
| Il peer attivo è inserito nelle tabelle IPv4 e IPv6 | PASS | PASS |
| Il peer rimosso rimane fuori dalle tabelle IPv4 e IPv6 | FAIL | PASS |
| Bucket IPv4 / IPv6 occupati dopo il rehash del peer rimosso | 1 / 1 | 0 / 0 |
Si tratta di una verifica a runtime dell'invariante specifico post-rimozione, non di una riproduzione di una race di cancellazione concorrente o di un use-after-free. Il fallimento dell'invariante nella baseline è atteso e dimostra che il test distingue le due versioni della funzione. Entrambi i moduli sono stati successivamente scaricati. La VPN operativa è rimasta attiva con il suo indirizzo invariato. L'intervallo di log esaminato conteneva i risultati dei test e nessun messaggio corrispondente a BUG, Oops, general protection fault o soft lockup.
Vedere TESTING.md per l'output registrato, le istruzioni di riproduzione e i limiti. Il generatore si trova in tests/prepare-ovpn-rehash-regtest.py.
Il 2026-10-06, moduli di test autonomi hanno inoltre eseguito la funzione effettiva ovpn_peer_endpoints_update() estratta dai sorgenti non patchati e patchati, con gli helper di binding di produzione. Sia per IPv4 che per IPv6, header di pacchetto sintetici privati hanno causato il float di un peer attivo, quindi hanno causato un altro aggiornamento dell'endpoint dopo che le sue voci hash erano state rimosse mentre la sua memoria rimaneva allocata.
| Proprietà, sia per IPv4 che per IPv6 | Prima della patch | Dopo la patch |
|---|---|---|
| Il peer attivo esegue il float e rimane nella tabella di trasporto | PASS | PASS |
| L'aggiornamento dell'endpoint viene raggiunto dopo la rimozione modellata | PASS | PASS |
| Il peer rimosso rimane fuori dalla tabella di trasporto | FAIL | PASS |
| Bucket di trasporto occupati dopo l'aggiornamento del peer rimosso | 1 | 0 |
Nessun pacchetto è stato trasmesso e nessuna interfaccia, peer VPN o indirizzo reale è stato modificato. Entrambi i moduli di test sono stati scaricati successivamente; la VPN operativa è rimasta attiva con il suo indirizzo invariato. L'intervallo di log esaminato conteneva i quattro risultati dei test e nessuna riga corrispondente a BUG, Oops, general protection fault o soft lockup.
Vedere FLOAT-TESTING.md e tests/prepare-ovpn-float-regtest.py per l'ambito, le istruzioni di riproduzione e i risultati registrati.