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

VetorAV: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

CVE-2021-21401
GHSA-7MV5-5MXH-QG88
OPENSUSE-SU-2024:11074-1
PYSEC-2021-432
USN-6121-1

Produtos afetados

Linuxmint
Nanopb
Ubuntu