CVE-2025-21702 in Linux
Riassunto
di VulDB • 11/07/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
pfifo_tail_enqueue: scarta il nuovo pacchetto quando sch->limit == 0
Comportamento atteso: Qualora si raggiunga il limite dello scheduler, pfifo_tail_enqueue() scarterà un pacchetto dalla coda dello scheduler e diminuirà qlen (lunghezza della coda) dello scheduler di uno. Successivamente, pffifo_tail_enqueue() accoderà il nuovo pacchetto e aumenterà qlen dello scheduler di uno. Infine, pfifo_tail_enqueue() restituirà il codice di stato `NET_XMIT_CN`.
Comportamento anomalo: Qualora si imposti `sch->limit == 0` e si attivi pfifo_tail_enqueue() su uno scheduler che non contiene pacchetti, la fase 'scarta un pacchetto' non avrà alcun effetto. Ciò significa che qlen dello scheduler rimarrà pari a zero. Successivamente, continueremo ad accodare il nuovo pacchetto aumentando qlen dello scheduler di uno. In sintesi, è possibile sfruttare pfifo_tail_enqueue() per aumentare qlen di uno e restituire il codice di stato `NET_XMIT_CN`.
Il problema è: Si supponga di avere due qdisc (queue disciplines): Qdisc_A e Qdisc_B. - Il tipo di Qdisc_A deve disporre della funzione '->graft()' per creare una relazione padre/figlio. Si consideri 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 con `sch->limit == 0`. - Qdisc_A è configurato per instradare i pacchetti accodati verso Qdisc_B.
L'accodamento del pacchetto attraverso 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 la presenza di `NET_XMIT_SUCCESS` e rileva `NET_XMIT_CN`, quindi hfsc_enqueue() non aumenta qlen di Qdisc_A.
L'intero processo porta a una situazione in cui Qdisc_A->q.qlen == 0 e Qdisc_B->q.qlen == 1. La sostituzione di 'hfsc' con un altro tipo (ad esempio: 'drr') comporta comunque lo stesso problema. Ciò viola il design secondo cui qlen del padre dovrebbe essere uguale alla somma dei qlen dei suoi figli.
Impatto del bug: Questo problema può essere utilizzato per l'elevazione dei privilegi da utente a kernel quando è raggiungibile.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.