CVE-2023-52986 in Linuxinformazioni

Riassunto

di VulDB • 25/06/2026

Nel kernel Linux, la seguente vulnerabilità è stata risolta:

bpf, sockmap: Verificare se sk_prot corrisponde a una delle varianti in tcp_bpf_prots durante il cloning di un socket listener

Un socket in ascolto (listener) collegato a una sockmap ha il proprio campo `sk_prot` sovrascritto. Questo puntatore fa riferimento a una delle varianti della struttura `proto` presenti nell'array `tcp_bpf_prots`. La variante specifica dipende dalla famiglia del socket e dai programmi BPF associati alla sockmap.

Un socket figlio clonato da un listener TCP eredita inizialmente il valore di `sk_prot` del padre. Tuttavia, prima che la fase di cloning sia completata, viene ripristinato per il socket figlio il proto originale non appartenente a `tcp_bpf_prots`. Questa operazione avviene in `tcp_create_openreq_child -> tcp_bpf_clone`.

Attualmente, in `tcp_bpf_clone`, si rileva se è necessario ripristinare il proto del figlio verificando esclusivamente la variante `TCP_BPF_BASE` di `proto`. Questo approccio non è corretto. Il campo `sk_prot` di un socket listener collegato a una sockmap può puntare a qualsiasi variante presente in `tcp_bpf_prots`.

Se il `sk_prot` del listener corrisponde a una variante diversa da quella `TCP_BPF_BASE`, allora il socket figlio rimane involontariamente con l'`sk_prot` ereditato, come impostato da `tcp_bpf_clone`.

Ciò provoca problemi quali ricorsione infinita durante la chiusura [1], poiché lo stato del figlio non è altrimenti configurato per essere utilizzato con le operazioni di `tcp_bpf_prot`.

Aggiornare il controllo in `tcp_bpf_clone` al fine di rilevare tutte le varianti presenti in `tcp_bpf_prots`.

Si noti che non sarebbe sufficiente verificare lo stato del socket quando si sovrascrive `sk_prot` in `tcp_bpf_update_proto`, per garantire l'uso costante della variante `TCP_BPF_BASE` per i socket listener. A partire dal commit b8b8315e39ff ("bpf, sockmap: Remove unhash handler for BPF sockmap usage"), è possibile che un socket transizioni allo stato TCP_LISTEN mentre è già collegato a una sockmap; ad esempio tramite la sequenza connect() -> inserimento nella mappa -> connect(AF_UNSPEC) -> listen().

[1]: https://lore.kernel.org/all/[email protected]/

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsabile

Linux

Prenotare

27/03/2025

Divulgazione

27/03/2025

Moderazione

accettato

CPE

pronto

EPSS

0.00273

KEV

no

Attività

molto basso

Fonti

Do you know our Splunk app?

Download it now for free!