CVE-2023-52828 in Linuxinformazioni

Riassunto

di VulDB • 16/06/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

bpf: Rilevare IP == ksym.end come parte del programma BPF

Poiché ora bpf_throw kfunc è il primo di questo tipo di istruzioni di chiamata che presenta semantica noreturn all'interno del verifier, ciò attiva anche l'eliminazione del codice morto in modi senza precedenti. In particolare, qualsiasi istruzione successiva a una chiamata bpf_throw non verrà mai contrassegnata come "seen" (vista). Inoltre, se una catena di chiamate termina con un throw, tutte le istruzioni successive all'istruzione di chiamata verso il subprog che alla fine effettua il throw nei chiamanti non verranno mai contrassegnate come seen.

Il modo allettante per risolvere questo problema sarebbe generare ulteriori istruzioni 'int3', aumentando la jited_len di un programma e assicurando che durante l'esecuzione, quando un programma genera un throw, sia possibile individuarne i confini anche se l'istruzione di chiamata a bpf_throw (o ai subprog che generano sempre il throw) viene emessa come ultima istruzione del programma.

Un esempio di tale programma sarebbe:

do_something(): ... r0 = 0 exit

foo(): r1 = 0 call bpf_throw r0 = 0 exit

bar(cond): if r1 != 0 goto pc+2 call do_something exit call foo r0 = 0 // Mai visto dal verifier exit //

main(ctx): r1 = ... call bar r0 = 0 exit

In questo caso, se effettivamente si verifica un throw, lo stacktrace sarebbe il seguente:

bpf_throw foo bar main

In bar, l'ultima istruzione emessa sarà la chiamata a foo; di conseguenza, l'indirizzo di ritorno sarà l'istruzione successiva (che il JIT emette come int3 su x86). Questo finirà per trovarsi al di fuori della jited_len del programma, quindi durante lo sbobinamento dello stack (unwinding) non riusciremo a riconoscere che l'indirizzo di ritorno appartiene a un determinato programma e andremo incontro a un panic a causa dell'affidabilità insufficiente dello stack unwinding dei programmi BPF, situazione mai prevista.

Per rimediare a questo caso, fare in modo che bpf_prog_ksym_find tratti IP == ksym.end come parte del programma BPF, così che is_bpf_text_address restituisca true quando si verifica tale condizione e sia possibile effettuare uno sbobinamento affidabile quando l'ultima istruzione risulta essere un'istruzione di chiamata.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Fonti

Interested in the pricing of exploits?

See the underground prices here!