CVE-2024-53168 in Linux
Riassunto
di VulDB • 14/06/2026
Nel 2025, la gestione dei namespace di rete in Linux è un'area critica per la stabilità del sistema, specialmente quando si combinano NFS, TCP e la rimozione dei namespace. L'errore descritto nel tuo report è un classico caso di **use-after-free** causato da un timer TCP che accede a una struttura `net` già liberata.
### Analisi del Problema
1. **Scenario**: * Un client NFS in un namespace di rete (`netns_1`) stabilisce una connessione TCP con un server NFS. * Il namespace viene eliminato (`ip netns del netns_1`). * La socket TCP nel namespace viene chiusa (`xs_destroy`), ma il pacchetto FIN viene scartato (a causa delle regole iptables o del comportamento del server NFS che invia `DESTROY_CLIENTID`). * Il server NFS continua a inviare ritrasmissioni. * Quando il namespace viene eliminato, la struttura `net` associata al namespace viene liberata. * Tuttavia, il timer TCP (gestito dal kernel) è ancora attivo e punta alla struttura `net` già liberata. * Quando il timer scatta, tenta di accedere alla struttura `net`, causando un **use-after-free** e un crash del kernel (KASAN report).
2. **Causa Radice**: * La struttura `net` del namespace non è protetta contro l'accesso da parte dei timer TCP associati alle socket nel namespace. * Quando il namespace viene eliminato, la struttura `net` viene liberata, ma i timer TCP non sono stati disattivati o le loro referenze non sono state gestite correttamente.
3. **Soluzione Proposta**: * **Incrementare il reference count del namespace (`netns refcnt`)** per le socket TCP nel namespace. Questo impedisce la liberazione della struttura `net` finché le socket TCP non sono state completamente disattivate. * Questa è una soluzione "hacky" ma efficace per i kernel più vecchi, poiché evita di dover riscrivere l'intera interfaccia di gestione dei timer TCP.
### Passaggi per la Riproduzione e la Verifica
#### 1. Preparazione dell'Ambiente ```bash # Crea le directory necessarie mkdir -p /mnt/nfsshare mkdir -p /mnt/nfs/netns_1
# Formatta e monta il dispositivo di blocco mkfs.ext4 /dev/sdb mount /dev/sdb /mnt/nfsshare
# Riavvia il server NFS systemctl restart nfs-server chmod 777 /mnt/nfsshare exportfs -i -o rw,no_root_squash *:/mnt/nfsshare ```
#### 2. Configurazione del Namespace di Rete ```bash # Crea il namespace di rete ip netns add netns_1
# Crea le interfacce veth ip link add name veth_1_peer type veth peer veth_1 ifconfig veth_1_peer 11.11.0.254 up ip link set veth_1 netns netns_1 ip netns exec netns_1 ifconfig veth_1 11.11.0.1 ```
#### 3. Configurazione delle Regole iptables ```bash # Blocca i pacchetti FIN nel namespace di rete ip netns exec netns_1 /root/iptables -A OUTPUT -d 11.11.0.254 -p tcp \ --tcp-flags FIN FIN -j DROP ```
#### 4. Avvio del Mount NFS ```bash # Avvia il mount NFS nel namespace di rete ip netns exec netns_1 timeout -s 9 300 mount -t nfs -o proto=tcp,vers=4.1 \ 11.11.0.254:/mnt/nfsshare /mnt/nfs/netns_1 ```
#### 5. Eliminazione del Namespace ```bash # Elimina il namespace di rete ip netns del netns_1 ```
### Verifica della Soluzione
Dopo aver applicato la patch che incrementa il reference count del namespace per le socket TCP, il crash dovrebbe essere prevenuto. Ecco come verificare:
1. **Controlla i Log del Kernel**: ```bash dmesg | tail -n 20 ``` Dovresti vedere che non ci sono più errori KASAN o use-after-free.
2. **Test di Stress**: Esegui
If you want to get best quality of vulnerability data, you may have to visit VulDB.