No utilitário e2fsck, fornecido como parte do pacote , (), permitindo a execução de código malicioso durante a verificação de sistemas de arquivos que contêm diretórios formatados de forma especial. A vulnerabilidade foi confirmada nas versões de 1.43.3 a 1.45.4. A vulnerabilidade foi corrigida na atualização . Nos distribuições o problema ainda permanece sem solução (, , , , ).
A vulnerabilidade é causada por um erro na função mutate_name() do arquivo rehash.c, utilizada ao reconstruir as tabelas de hash associadas ao diretório, que garantem o mapeamento de todos os arquivos contidos nele. A corrupção da estrutura hash_entry associada ao diretório pode levar à gravação de dados de um atacante fora da área do buffer alocado. Se a tabela hash associada ao diretório detectar vários arquivos com o mesmo nome, o utilitário e2fsck renomeia os arquivos duplicados adicionando ~0, ~1, etc. ao nome. Para armazenar temporariamente o novo nome durante essa renomeação, um buffer de 256 bytes é alocado na pilha.
O tamanho dos dados copiados é determinado pela expressão "entry->name_len & 0xff", mas o valor entry->name_len é carregado da estrutura no disco, e não calculado com base no tamanho real do nome. Se o tamanho for zero, o índice do array assume o valor -1, criando condições para um estouro inteiro através do subfluxo do buffer (integer underflow) e sobrescrevendo outros dados na pilha com o valor "~0". Para sistemas de 64 bits, a exploração da vulnerabilidade é considerada de baixa probabilidade e requer a ausência de restrições no tamanho da pilha (ulimit -s unlimited). Para sistemas de 32 bits, a exploração é considerada possível, mas o resultado depende muito de como o arquivo executável foi compilado.
Para realizar um ataque, o invasor precisa danificar os dados de forma específica na partição com sistemas de arquivos ext2, ext3 ou ext4. Como essa operação requer privilégios de superusuário, a vulnerabilidade representa uma ameaça durante a verificação de dispositivos externos ou imagens de sistemas de arquivos obtidas externamente pelo utilitário e2fsck.
Fonte: opennet.ru
