O CVE-2024-57843 é uma falha de estouro de memória no driver virtio-net do kernel Linux capaz de corromper silenciosamente a memória de uma instância em execução. Este tópico descreve quais imagens oficiais Linux do Alibaba Cloud ECS são afetadas, como verificar se uma instância está vulnerável e como corrigir o problema.
Visão geral da vulnerabilidade
O CVE-2024-57843 consiste em um defeito de estouro de memória no driver virtio-net do kernel Linux. Ele ocorre quando o driver preenche buffers RX mescláveis. O commit upstream 295525e29a5b introduziu o defeito (virtio_net: merge dma operations when filling mergeable buffers), e o commit 6aacd1484468 o corrigiu (virtio-net: fix overflow inside virtnet_rq_alloc).
A Red Hat classifica esta vulnerabilidade como Moderada; a Ubuntu, como Média.
Sintomas
Uma instância ECS afetada pode apresentar os seguintes sintomas:
Falha inesperada da instância — A instância trava sem aviso prévio (kernel panic) e o log dmesg contém entradas relacionadas a
general protection faultoupagealloc: memory corruption.Falha na transferência de arquivos grandes — A transferência de um arquivo com cerca de 100 MB ou mais via scp é interrompida.
Corrupção silenciosa de estruturas de dados do kernel — Páginas de tabela de páginas, objetos slab, estruturas
buffer_heade dados similares são sobrescritos inesperadamente, causando comportamento imprevisível do sistema.
Escopo afetado
A tabela a seguir lista as imagens oficiais Linux do ECS avaliadas para o CVE-2024-57843, o motivo pelo qual cada distribuição é afetada e o status de correção das imagens ECS correspondentes.
|
Distribuição |
Versão afetada |
Causa |
Status de correção das imagens ECS |
|
Ubuntu |
24.04 LTS |
Afetada desde o primeiro lançamento, pois a base do kernel 6.8 inclui o patch que introduziu o defeito, retroportado para a versão 6.6. Corrigido na versão 6.8.0-58.60. |
As imagens lançadas em maio de 2025 estão corrigidas (6.8.0-60-generic). |
|
CentOS Stream 9 |
9 |
Segue o upstream do RHEL. Corrigido na versão 5.14.0-570.12.1.el9_6. |
As imagens corrigidas lançadas em março de 2025 incluem a correção. |
|
Fedora |
40 (EOL) |
Introduzido na versão kernel-6.6.2-201.fc40. Corrigido na versão 6.12.5-200. |
Atingiu o fim do suporte (EOL). Nenhuma atualização está planejada. |
Verifique se sua instância está afetada
A versão do kernel em execução determina se uma instância ECS contém o defeito. Execute o seguinte comando na instância para obter a versão atual do kernel:
uname -r
Compare a saída com a versão de correção listada para sua distribuição na tabela de escopo afetado:
Anterior à versão de correção — A instância está afetada. Atualize o kernel e reinicie a instância.
Igual ou posterior à versão de correção — O kernel em execução já contém a correção; nenhuma ação adicional é necessária.
As condições de gatilho descritas na seção de causa raiz determinam se o defeito é acionado durante a execução, mas não indicam se o kernel em execução contém o defeito. Portanto, utilize a versão do kernel como critério de decisão.
Corrija uma instância afetada
Para todas as distribuições, a correção exige a atualização dos pacotes do kernel e a reinicialização da instância para que a solução entre em vigor.
Reiniciar a instância interrompe todos os service em execução nela. Planeje a reinicialização antes de atualizar o kernel.
Ubuntu 24.04 LTS
Atualize o kernel para a versão 6.8.0-58-generic (versão do pacote 6.8.0-58.60) ou superior.
-
Confirme se há uma versão qualificada do kernel disponível. Os comandos abaixo atualizam o índice de pacotes e listam as versões do
linux-image-genericoferecidas pelos repositórios configurados.sudo apt update apt-cache madison linux-image-generic -
Atualize os pacotes do kernel.
sudo apt install -y --only-upgrade linux-image-generic -
Reinicie a instância.
sudo reboot -
Após a reinicialização, confirme a versão do kernel em execução.
uname -rVerifique se a saída é
6.8.0-58-genericou superior.
O Ubuntu reporta o mesmo kernel como 6.8.0-58-generic na saída do comando uname -r e como 6.8.0-58.60 nos metadados do pacote. O kernel 6.8.0-60-generic incluído nas imagens ECS lançadas em maio de 2025 é posterior ao 6.8.0-58-generic e, portanto, contém a correção.
CentOS Stream 9
Atualize o kernel para a versão kernel-5.14.0-570.12.1.el9_6 ou superior.
-
Atualize os pacotes do kernel.
sudo dnf clean all && sudo dnf makecache sudo dnf -y update kernel -
Reinicie a instância.
sudo reboot -
Após a reinicialização, confirme a versão do kernel em execução.
uname -rVerifique se a saída é
5.14.0-570.12.1.el9_6ou superior.
Fedora 40 (EOL)
O Fedora 40 atingiu o fim do suporte (EOL) e não recebe mais manutenção. Não há atualizações planejadas para as imagens oficiais Fedora 40 do ECS. Migre para o Fedora 41 ou superior.
Caso continue executando o Fedora 40, atualize o kernel para a versão 6.12.5-200 ou superior.
-
Atualize os pacotes do kernel.
sudo dnf clean all && sudo dnf makecache sudo dnf -y update kernel -
Reinicie a instância.
sudo reboot -
Após a reinicialização, confirme a versão do kernel em execução.
uname -rVerifique se a saída é
6.12.5-200ou superior.
Mitigação temporária
Não existe mitigação temporária disponível para o CVE-2024-57843. Atualize para uma versão do kernel que contenha a correção. Alterar qualquer uma das condições de gatilho descritas na seção de causa raiz não substitui a atualização do kernel.
Não defina net.core.high_order_alloc_disable=1 em ambientes de produção. Em versões do kernel que contêm a vulnerabilidade, esse parâmetro aumenta significativamente a probabilidade de o defeito ser acionado. Versões do kernel sem a vulnerabilidade não são afetadas.
Causa raiz
O CVE-2024-57843 é um estouro de 16 bytes entre páginas que ocorre quando o driver virtio-net preenche buffers RX mescláveis com dados.
No modo DMA pré-mapeado (do_dma=true), cada página de fragmento deve reservar 16 bytes no início para armazenar informações de mapeamento. Quando todas as condições da tabela a seguir são atendidas, o driver aloca uma página de 4096 bytes (ordem 0), mas precisa gravar 16 + 4096 = 4112 bytes. Os últimos 16 bytes são gravados na próxima página fisicamente adjacente, o que corrompe silenciosamente a memória.
|
Nº |
Condição de gatilho |
Descrição |
|
1 |
DMA pré-mapeado ativo |
É necessário reservar 16 bytes no início da página. |
|
2 |
Buffers RX mescláveis em uso e XDP desabilitado |
Determina o caminho de código que calcula o comprimento do buffer. |
|
3 |
MTU >= 4084 e EWMA do comprimento do pacote de tráfego > 4020 |
Satura o comprimento (len) para 4096. |
|
4 |
Reversão da página de fragmento da ordem 3 para a ordem 0 (pressão transitória de memória) |
Uma página de ordem 3 (32 KB) tem espaço suficiente, mas uma página de ordem 0 (4 KB) não. |
Evite que novas instâncias sejam afetadas
Ao criar uma instância ECS, utilize uma imagem oficial que já contenha a correção.
Se as falhas persistirem após a atualização
Caso falhas semelhantes continuem ocorrendo após a atualização do kernel, colete o arquivo vmcore e envie um ticket para obter assistência na solução de problemas.