PT-2021-14478 · Nanopb+2 · Nanopb+2
Petteri Aimonen
·
Publicado
2021-03-23
·
Atualizado
2024-08-30
·
CVE-2021-21401
CVSS v3.1
7.1
Alta
| Vetor | AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L |
Nome do software vulnerável e versões afetadas
Versões do Nanopb anteriores à 0.3.9.8 e à 0.4.5
Descrição
A decodificação de uma mensagem criada de forma específica pode causar chamadas inválidas de
free() ou realloc() se o tipo da mensagem contiver um campo oneof e esse oneof contiver diretamente tanto um campo de ponteiro quanto um campo que não seja de ponteiro. Se os dados da mensagem contiverem primeiro o campo não ponteiro e depois o campo ponteiro, os dados do campo não ponteiro são tratados incorretamente como se fossem um valor de ponteiro. Esses dados de mensagem raramente ocorrem em mensagens normais, mas são motivo de preocupação quando dados não confiáveis são analisados.Recomendações
Para versões anteriores à 0.3.9.8, atualize para a versão 0.3.9.8.
Para versões anteriores à 0.4.5, atualize para a versão 0.4.5.
Como solução temporária, considere definir a opção
no unions para o campo oneof a fim de gerar campos separados em vez de uma união C, o que evita acionar o código problemático.Alternativamente, defina o tipo de todos os campos dentro do oneof como
FT POINTER para garantir que os dados contidos dentro da union sejam sempre um ponteiro válido.Implementações de heap que protegem contra chamadas inválidas de
free() oferecem uma mitigação parcial.Exploit
Correção
Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾
Enumeração de Fraquezas
Identificadores relacionados
Produtos afetados
Linuxmint
Nanopb
Ubuntu