CVE-2023-52828 in Linuxinformação

Sumário

de VulDB • 20/05/2026

No kernel do Linux, a seguinte vulnerabilidade foi resolvida:

bpf: Detectar IP == ksym.end como parte do programa BPF

Agora que a kfunc bpf_throw é a primeira instrução de chamada com semântica noreturn dentro do verificador, isso também ativa a eliminação de código morto de maneiras sem precedentes. Por exemplo, qualquer instrução que siga uma chamada a bpf_throw nunca será marcada como vista. Além disso, se uma cadeia de chamadas (callchain) resultar em um throw, quaisquer instruções após a instrução de chamada para o subprog eventualmente lançador nos chamadores também nunca serão marcadas como vistas.

A maneira tentadora de corrigir isso seria emitir instruções 'int3' extras, que aumentam o jited_len de um programa, e garantir que, durante a execução, quando um programa lançar, possamos descobrir seus limites mesmo que a instrução de chamada para bpf_throw (ou para subprogs que sempre lançam) seja emitida como a última instrução do programa.

Um exemplo de tal programa seria este:

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 // Nunca visto pelo verificador exit //

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

Aqui, se realmente lançarmos, a stacktrace seria a seguinte:

bpf_throw foo bar main

Em bar, a última instrução emitida será a chamada para foo, portanto, o endereço de retorno será a instrução subsequente (que o JIT emite como int3 no x86). Isso acabará ficando fora do jited_len do programa, portanto, ao fazer o unwinding, falharemos em descobrir que o endereço de retorno pertence a qualquer programa e entraremos em panic devido ao unwinding de pilha não confiável de programas BPF que nunca esperamos.

Para remediar este caso, faça com que bpf_prog_ksym_find trate IP == ksym.end como parte do programa BPF, de modo que is_bpf_text_address retorne verdadeiro quando esse caso ocorrer, e possamos fazer o unwinding de forma confiável quando a última instrução acabar sendo uma instrução de chamada.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Fontes

Want to stay up to date on a daily basis?

Enable the mail alert feature now!