
# Audit e indurimento dei sistemi Linux contro l'escalation dei privilegi locali AF_ALG (CVE-2026-31431) verificando l'esposizione dell'API crittografica del kernel, limitando i moduli e fornendo script di ripristino.
Questo strumento implementa il Blocco Strutturale per mitigare la CVE-2026-31431 rinominando fisicamente i moduli del kernel e rimuovendoli dalla memoria. Prima dell'uso, si prega di essere consapevoli dei seguenti rischi architetturali:
/lib/modules/, rendendo nullo il precedente blocco.AF_ALG (API Crypto del Kernel) potrebbe interrompere applicazioni o servizi specifici che dipendono dall'accelerazione hardware a livello di kernel (ad es., VPN specializzate, utilità di crittografia del disco o strumenti di sicurezza personalizzati).[cite: 3]Utilizzare a proprio rischio. Verificare sempre le funzioni critiche del proprio sistema dopo aver eseguito solution.sh.[cite: 3]
Un kit di strumenti per scoprire, diagnosticare e contenere vettori di LPE (Escalation dei Privilegi Locali) attraverso l'API Crypto del Kernel Linux (AF_ALG).
Lo strumento utilizza il Blocco Strutturale per affrontare la CVE-2026-31431 rinominando i moduli del kernel e rimuovendoli dalla memoria. I principali rischi architetturali includono:
/lib/modules/, rendendo nullo il precedente blocco.Utilizzare a proprio rischio.
Questo repository fornisce due script che formano un flusso di lavoro diagnosi → contenimento → verifica contro gli attacchi di escalation dei privilegi tramite AF_ALG (socket(38, 5, 0)):
check.sh — Audit della postura di sicurezza a più livelli (eseguito senza privilegi)solution.sh — Rimuove forzatamente i moduli AF_ALG dalla memoria + verifica la presenza di file di modulo fisici (richiede root)restore.sh — Ricarica i moduli AF_ALG e ripristina il sistema allo stato precedente a solution.sh (richiede root)./check.sh
sudo ./solution.sh
sudo ./restore.sh
restore.sh annulla gli effetti di solution.sh ricaricando i moduli del kernel AF_ALG (af_alg, algif_rng, algif_aead, algif_skcipher, algif_hash). Se il file del modulo fisico (af_alg.ko.xz) è stato rinominato o rimosso, lo script avviserà e richiederà il ripristino manuale prima di tentare di caricare i moduli.
Eseguire solution.sh su un sistema attivo che utilizza AF_ALG (ad es., un sistema con IPsec, dm-crypt/LUKS o qualsiasi offload crittografico hardware) interromperà immediatamente tutte le operazioni crittografiche del kernel. Questo include:
algif_*Lo script scarica forzatamente i moduli del kernel AF_ALG. Le operazioni crittografiche del kernel falliranno fino al riavvio. Questo script è pensato solo per sistemi air-gapped, non di produzione o usa-e-getta a scopo di test e analisi. Non eseguirlo su infrastrutture di produzione o critiche.
check.sh non richiede dipendenze oltre alla shell POSIX e a /proc//syssolution.sh richiede privilegi di rootrestore.sh richiede privilegi di rootaf_alg_block.so richiede privilegi di root per l'installazione tramite /etc/ld.so.preloadQuesto POC è stato testato su WSL2. Tenere presente quanto segue:
wsl --shutdown). Questo include le modifiche allo stato dei moduli del kernel da solution.sh, le rinomine dei file, i risultati di check.sh e qualsiasi modifica locale ai file in questo repository..wslconfig, /etc/wsl.conf o uno script di avvio automatico (ad es., /etc/rc.local) separatamente.Per chiudere definitivamente il vettore di attacco AF_ALG:
Mettere in blacklist il modulo del kernel (il più affidabile):
echo "blacklist af_alg" | sudo tee /etc/modprobe.d/af_alg-blacklist.conf
Oppure rinominare il file fisico:
sudo mv /lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz \
/lib/modules/$(uname -r)/kernel/crypto/af_alg.ko.xz.bak
Disabilitare AF_ALG tramite sysctl:
sudo sysctl -w net.core.af_alg_disabled=1
Bloccare la creazione di socket AF_ALG tramite policy SELinux / AppArmor
Disabilitare i namespace utente non privilegiati (ambienti container):
sudo sysctl -w kernel.unprivileged_userns_clone=0
Bloccare AF_ALG alla syscall socket() tramite LD_PRELOAD (soluzione per WSL2):
# Installazione a livello di sistema (richiede root)
echo /absolute/path/to/af_alg_block.so | sudo tee -a /etc/ld.so.preload
Nel repository è inclusa una libreria condivisa precompilata (af_alg_block.so). Intercetta e restituisce quando il dominio è (38). Tutte le altre chiamate socket passano all'implementazione reale senza modifiche.
MIT
| Controllo | Cosa esamina | Gravità |
|---|
| Contesto del Processo | UID/GID corrente e capacità effettive | Bassa |
| Socket Crypto AF_ALG | Accessibilità dell'API Crypto del Kernel tramite socket(AF_ALG, ...) | Alta |
| kptr_restrict | Visibilità dei puntatori del kernel nello spazio utente | Media |
| dmesg_restrict | Restrizione dell'accesso al buffer circolare del kernel | Media |
| SELinux | Stato Enforcing / Permissive / Disabled | Media |
| /proc hidepid | Se /proc nasconde le informazioni di altri processi | Bassa |
socket(2)EAFNOSUPPORTAF_ALGQuesto approccio è pensato principalmente per WSL2, dove la semantica a utente singolo e il comportamento di reset al riavvio rendono pratico un LD_PRELOAD a livello di sistema. Su sistemi Linux multiutente tradizionali, preferire il metodo 1 (blacklist del modulo) — l'iniezione tramite /etc/ld.so.preload influisce su ogni processo del sistema e potrebbe interrompere silenziosamente i servizi che dipendono da AF_ALG.
Nota: Richiede glibc (non musl). /etc/ld.so.preload richiede root per essere modificato. La rimozione avviene eliminando la riga corrispondente dal file.