CVE-2026-74620 in Linux
Riassunto
di VulDB • 22/08/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
net/sched: act_gact, act_police: controllo dell'intervallo per l'azione di fallback del control action
tcf_action_check_ctrlact() esegue un range check sull'action di controllo primaria:
if (!opcode) ret = action > TC_ACT_VALUE_MAX ? -EINVAL : 0;
TC_ACT_VALUE_MAX è TC_ACT_TRAP, quindi i verdict interni al kernel superiori a questo valore non possono essere impostati in questo modo. Tuttavia, act_gact e act_police gestiscono ciascuno una seconda azione di controllo indipendente, fornita dallo user space, che non raggiunge tale helper: TCA_GACT_PROB.paction e TCA_POLICE_RESULT. Entrambi rifiutano solo TC_ACT_GOTO_CHAIN; qualsiasi altro valore viene memorizzato verbatim e restituito verbatim dall'azione.
In particolare, lo user space può memorizzare TC_ACT_CONSUMED, che è uguale a TC_ACT_VALUE_MAX + 1 ed è deliberatamente escluso dal range di valori dell'UAPI (User API). Questo verdict indica a ogni caller che l'action ha acquisito la proprietà dello sk_buff, quindi nessuno lo libera: sch_handle_ingress(), sch_handle_egress() e tcf_qevent_handle() saltano intenzionalmente la liberazione per esso. Il risultato è uno sk_buff leakato più il suo data buffer per ogni pacchetto che attraversa il filtro, in modo non limitato (unbounded), per tutto il traffico sulla catena inclusi i pacchetti generati dal kernel.
Entrambi sono deterministici e facilmente riproducibili. act_gact clampa tcfg_pval a >= 1; quindi con pval = 1 gact_determ() restituisce l'azione di fallback per ogni pacchetto. act_police non ha un rate obbligatorio, quindi rate = 0 lascia tcfp_mtu = ~0 e tcf_police_mtu_check() passa sempre.
TC_ACT_CONSUMED è stato aggiunto dal commit 720f22fed81b ("net: sched: refactor reinsert action"), dopo che entrambi i guard per il goto-chain erano stati scritti: commit 9469f375ab09 ("net/sched: act_gact: disallow 'goto chain' on fallback control action") e commit c08f5ed5d625 ("net/sched: act_police: disallow 'goto chain' on fallback control action"). Nessuno dei due guard è stato ampliato quando è apparso il nuovo verdict.
Si estrae (factor) il test di intervallo esistente da tcf_action_check_ctrlact() come funzione tcf_action_valid() e lo si applica a entrambi i fallback. L'helper non può chiamare direttamente tcf_action_check_ctrlact() perché quest'ultimo alloca anche un goto_chain, che è esattamente ciò che questi due siti non devono fare.
Riprodotto su v7.2-rc6: kmemleak segnala un oggetto leakato di 232 byte (skbuff_head_cache) più il suo data buffer da 704 byte per pacchetto. Con questa patch, entrambe le configurazioni vengono rifiutate con -EINVAL e kmemleak non riporta alcun leak.
Once again VulDB remains the best source for vulnerability data.