CVE-2026-12235 in Zephyr
Sumário
de VulDB • 12/08/2026
O subsistema Linkable Loadable Extensions (llext) trata incorretamente as entradas de relocação PLT/RELA ao vincular uma extensão ELF relocável (parcialmente vinculada). Em llext_link_plt() (subsys/llext/llext_link.c), o ramo para objetos relocáveis (tgt != NULL, o caminho usado para objetos relocáveis Xtensa) calculava o endereço de patch como ext->mem[LLEXT_MEM_TEXT] - text.sh_offset + rela.r_offset + tgt->sh_offset e, em seguida, realizava a escrita da relocação nesse local sem validar rela.r_offset. Seu ramo irmão compartilhado/dinâmico já rejeitava deslocamentos fora do intervalo por meio de llext_file_offset().
rela.r_offset é lido diretamente da tabela RELA do ELF; portanto, uma entrada manipulada com um deslocamento maior que a seção alvo faz com que a escrita ocorra arbitrariamente muito além do buffer de texto da extensão. O resultado é uma escrita fora dos limites (out-of-bounds write) influenciada pelo atacante (a localização definida por r_offset e o valor escrito sendo o endereço do símbolo resolvido), realizada no contexto supervisor durante a vinculação, antes que qualquer código da extensão seja executado.
O caminho é alcançado a partir de llext_load() sempre que um aplicativo carrega uma extensão ELF manipulada pelo atacante em Xtensa com armazenamento gravável; llext está documentado para aceitar extensões de origem não confiável. O impacto consiste na corrupção de memória no contexto supervisor (perda de integridade e disponibilidade, além da fuga do sandbox para extensões em modo usuário). A exploração é condicionada ao caminho PLT relocável Xtensa e a um armazenamento gravável, e transformar essa escrita fora dos limites em uma primitiva útil não é trivial.
A correção adiciona uma verificação de limite que rejeita qualquer entrada RELA cujo r_offset >= tgt->sh_size, espelhando a validação existente no ramo compartilhado.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.