CVE-2025-21702
pfifo_tail_enqueue: Elimina il nuovo pacchetto quando sch->limit == 0
- Pubblicato
- 18 feb 2025
- Aggiornato
- 8 set 2026
- Assegnazione CNA
- Linux
- Evidenza osservata
- 14 ago 2026
CVSS primario
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HBasso · prossimi 30 giorni
- Percentile
- 19,8%
- Data del modello
- 21 set 2026
L'EPSS è una stima statistica, non una certezza o una misura di impatto. Combinalo con CVSS, stato KEV, esposizione e ambiente.
Riepilogo
Nel kernel Linux è stata risolta la seguente vulnerabilità: pfifo_tail_enqueue: Elimina il nuovo pacchetto quando sch->limit == 0 Comportamento atteso: Nel caso in cui si raggiunga il limite dello scheduler, pfifo_tail_enqueue() eliminerà un pacchetto dalla coda dello scheduler e decrementerà qlen dello scheduler di uno. Quindi, pfifo_tail_enqueue() accoda il nuovo pacchetto e incrementa qlen dello scheduler di uno. Infine, pfifo_tail_enqueue() restituisce il codice di stato `NET_XMIT_CN`. Comportamento anomalo: Nel caso in cui si imposti `sch->limit == 0` e si attivi pfifo_tail_enqueue() su uno scheduler che non ha pacchetti, il passaggio 'elimina un pacchetto' non farà nulla. Ciò significa che qlen dello scheduler ha ancora un valore pari a 0. Quindi, si continua ad accodare il nuovo pacchetto e si incrementa qlen dello scheduler di uno. In sintesi, si può sfruttare pfifo_tail_enqueue() per incrementare qlen di uno e restituire il codice di stato `NET_XMIT_CN`. Il problema è: Supponiamo di avere due qdisc: Qdisc_A e Qdisc_B. - Il tipo di Qdisc_A deve avere la funzione '->graft()' per creare la relazione genitore/figlio. Supponiamo che il tipo di Qdisc_A sia `hfsc`. L'accodamento di un pacchetto a questo qdisc attiverà `hfsc_enqueue`. - Il tipo di Qdisc_B è pfifo_head_drop. L'accodamento di un pacchetto a questo qdisc attiverà `pfifo_tail_enqueue`. - Qdisc_B è configurato per avere `sch->limit == 0`. - Qdisc_A è configurato per instradare il pacchetto accodato a Qdisc_B. L'accodamento di un pacchetto tramite Qdisc_A porterà a: - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B) - Qdisc_B->q.qlen += 1 - pfifo_tail_enqueue() restituisce `NET_XMIT_CN` - hfsc_enqueue() verifica `NET_XMIT_SUCCESS` e vede `NET_XMIT_CN` => hfsc_enqueue() non incrementa qlen di Qdisc_A. L'intero processo porta a una situazione in cui Qdisc_A->q.qlen == 0 e Qdisc_B->q.qlen == 1. Sostituire 'hfsc' con un altro tipo (ad esempio: 'drr') porta ancora allo stesso problema. Ciò viola il progetto secondo cui qlen del genitore dovrebbe essere uguale alla somma delle qlen dei suoi figli. Impatto del bug: Questo problema può essere utilizzato per l'escalation dei privilegi da utente a kernel quando è raggiungibile.
Fonti
1Utilizzo responsabile
Utilizza le informazioni sulla vulnerabilità solo sui sistemi che possiedi o che sei autorizzato a testare. Kitploit si collega ai metadati della ricerca pubblica e non memorizza codici exploit o payload dannosi.