Páginas

sexta-feira, 26 de junho de 2026

ELSA-2026-29702: Guia Definitivo para Atualizar o runc no Oracle Linux 9

 


Guia prático para aplicar a atualização de segurança ELSA-2026-29702 do runc no Oracle Linux 9, com comandos reais, verificação prévia e pós-atualização, troubleshooting e boas práticas.


Em 26 de junho de 2026, a Oracle liberou o aviso de segurança ELSA-2026-29702, uma atualização Important para o pacote runc no Oracle Linux 9. 

O runc é a implementação de referência da Open Container Initiative (OCI) para criar e executar containers — ou seja, é o coração de qualquer stack containerizada no Linux, desde Docker e Podman até Kubernetes e ambientes OpenShift.

Esta atualização corrige três CVEs que afetam o runtime do container em camadas críticas:

CVE


A severidade Important não é para ser tratada como um simples "patch de rotina". As vulnerabilidades de negação de serviço (CVE-2026-32280 e CVE-2026-32281) podem tornar um nó containerizado inoperante ao consumir CPU excessiva durante validações TLS. 

Já a CVE-2026-25679, por afetar o parsing de IPv6, pode gerar comportamentos inesperados em ambientes com redes IPv6.

Público-alvo: administradores de infraestrutura com conhecimento intermediário/avançado em linha de comando. O foco aqui é ação — comandos reais, saídas esperadas e o "porquê" de cada passo.


Pré-requisitos


Antes de qualquer coisa, valide os seguintes pontos:

    1. Sistema alvo: Oracle Linux 9 (qualquer arquitetura: x86_64 ou aarch64).

    2. Acesso root ou sudo com privilégios elevados.

    3. Repositório configurado: Acesso ao Unbreakable Linux Network (ULN) ou ao repositório público da Oracle.

    4. Backup: Em ambientes de produção, tenha um plano de rollback — o runc é dependência crítica de Docker, Podman, containerd e CRI-O.

    5. Janela de manutenção: A atualização exige reinicialização do dockerd/containerd e de todos os containers em execução.


⚠️ Importante: A atualização para runc-1.4.2-2.el9_8 é cumulativa e substitui qualquer versão anterior. Não há atualização parcial — ou você aplica o pacote completo ou fica vulnerável.


Passo a Passo

1. Verificação do Ambiente Atual
Antes de aplicar qualquer atualização, documente o estado atual do sistema.

1.1. Versão do runc instalada
bash
$ rpm -q runc
runc-1.4.1-1.el9_8.x86_64

Ou, se preferir verificar o binário diretamente:

bash
$ runc --version
runc version 1.4.1
commit: v1.4.1-0-gb14b3c4
spec: 1.0.2-dev

1.2. Versão do kernel e arquitetura
bash
$ uname -a
Linux oracle9-node01 5.15.0-400.xxx.el9uek.x86_64 #1 SMP ... x86_64 x86_64 x86_64 GNU/Linux

Por quê ? O pacote runc é específico por arquitetura — x86_64 e aarch64 têm RPMs distintos. Saber a arquitetura evita baixar o pacote errado.

1.3. Verificar dependências e serviços que usam runc
bash
$ sudo lsof | grep -E "runc|containerd" | head -20
$ sudo systemctl status docker containerd podman 2>/dev/null | grep -E "Active|Loaded"

Registre quais serviços estão ativos. Você precisará reiniciá-los após a atualização.

2. Obtendo a Atualização

A Oracle disponibiliza o pacote atualizado através do ULN (Unbreakable Linux Network).

2.1. Via yum/dnf (recomendado)

bash
$ sudo dnf check-update runc
Last metadata expiration check: 0:05:12 ago on Thu Jun 26 10:15:33 2026.

runc.x86_64 1.4.2-2.el9_8 ol9_baseos_latest

Para aplicar:

bash
$ sudo dnf update runc -y

Saída esperada (trecho):

text
Transaction Summary
================================================================================
Install  1 Package
Upgrade  1 Package

Total download size: 3.2 M
Downloading Packages:
runc-1.4.2-2.el9_8.x86_64.rpm              2.1 MB/s | 3.2 MB     00:01
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1
  Upgrading        : runc-1.4.2-2.el9_8.x86_64                             1/2
  Cleanup          : runc-1.4.1-1.el9_8.x86_64                             2/2
  Verifying        : runc-1.4.2-2.el9_8.x86_64                             1/2
  Verifying        : runc-1.4.1-1.el9_8.x86_64                             2/2

Upgraded:
  runc-1.4.2-2.el9_8.x86_64

Complete!

2.2. Via RPM manual (fallback)

Caso precise baixar o RPM diretamente:

bash
# Para x86_64
$ curl -O http://oss.oracle.com/ol9/SRPMS-updates/runc-1.4.2-2.el9_8.src.rpm

# Para aarch64, o URL é similar, mas com o sufixo adequado

💡 O SRPM (Source RPM) está disponível em http://oss.oracle.com/ol9/SRPMS-updates/. Para instalação direta, use os RPMs binários, não o SRPM.

3. Pós-Atualização: Reinicialização e Validação

A atualização do runc não requer reboot do sistema operacional, mas requer reinicialização dos serviços que o utilizam (containerd, dockerd, podman, etc.).

3.1. Verificar a nova versão

bash
$ rpm -q runc
runc-1.4.2-2.el9_8.x86_64

$ runc --version
runc version 1.4.2
commit: v1.4.2-0-g123abc
spec: 1.0.2-dev

3.2. Reiniciar serviços dependentes

A ordem correta é:

bash
# Para ambientes Docker
$ sudo systemctl stop docker
$ sudo systemctl restart containerd
$ sudo systemctl start docker

# Para Podman (geralmente não requer restart, mas é recomendado)
$ sudo systemctl restart podman

# Para CRI-O (Kubernetes)
$ sudo systemctl restart crio

3.3. Validar containers em execução

Após reiniciar os serviços, verifique se os containers existentes estão operacionais:

bash
$ docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED       STATUS       PORTS     NAMES
abc123def456   nginx:latest   "nginx -g '…" 2 hours ago   Up 2 minutes 80/tcp    web-nginx

$ podman ps -a

🧠 Por quê ? O runc é o runtime que efetivamente "executa" o container. Ao substituir o binário, os processos filhos (containers) continuam rodando, mas novos containers usarão a nova versão. Containers existentes não são migrados automaticamente para a nova versão do runc — eles continuam associados à versão antiga até serem recriados.

3.4. Recriar containers para garantir a nova versão

Para garantir que todos os containers estejam usando o novo runtime:

bash
# Para Docker: drenar e recriar (em produção, use estratégias de rollout)
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -aq)
$ docker-compose up -d   # ou docker run ...

Em ambientes Kubernetes, um rollout dos Deployments/StatefulSets é suficiente:

bash
$ kubectl rollout restart deployment/<nome-do-deployment>

4. Verificação de Segurança (Opcional, mas Recomendado)

Para confirmar que as CVEs foram realmente corrigidas, você pode verificar se o pacote contém os patches:

bash
$ rpm -q --changelog runc | grep -E "CVE-2026-25679|CVE-2026-32280|CVE-2026-32281"
- Resolves: RHEL-158787 (CVE-2026-25679, CVE-2026-32280, CVE-2026-32281)

Ou, de forma mais detalhada:

bash
$ rpm -qi runc | grep -E "Version|Release|Build Date"
Name        : runc
Version     : 1.4.2
Release     : 2.el9_8
Build Date  : Thu Jun 25 08:00:00 2026

A data de build (25 de junho de 2026) é consistente com a liberação do advisory.

📘  Indicação de Leitura 


Livro: Segurança em Servidores Linux Ataque e Defesa

Esse livro  é um guia prático e abrangente sobre a segurança do sistema operacional Linux como um todo. O livro ensina a pensar como um atacante para fortalecer a defesa do servidor, abordando tópicos fundamentais como:

  • Ferramentas de rede: Nmap, Netcat, knockd.
  • Monitoramento: de arquivos e sistemas de arquivos.
  • Defesas: contra malware e ataques DDoS.
  • Descoberta de vulnerabilidades: como invasores encontram pontos fracos.


Segurança em Servidores Linux Ataque e Defesa: (anúncio) ->  https://link.amazon/B08G1PKaL

Eu ganho uma comissão quando você faz uma compra.


Troubleshooting


Problema Comum: "runc: symbol lookup error" após a atualização.

Sintoma:

bash
$ docker run hello-world
docker: Error response from daemon: OCI runtime create failed: 
runc: symbol lookup error: /usr/bin/runc: undefined symbol: 
[...]

Causa: Incompatibilidade de versão entre o runc e a biblioteca libseccomp ou libc do sistema. O Oracle Linux 9 utiliza libseccomp para restrições de syscall — se a versão for muito antiga, o novo runc pode não encontrar símbolos esperados.

Solução:

1. Atualize libseccomp simultaneamente:

bash
$ sudo dnf update libseccomp -y

2. Verifique a versão da biblioteca:

bash
$ rpm -q libseccomp
libseccomp-2.5.4-3.el9.x86_64

3. Se o problema persistir, reinstale o runc forçadamente:

bash
$ sudo dnf reinstall runc -y

4. Reinicie o containerd e o docker novamente.

Prevenção: Sempre atualize o sistema como um todo (dnf update) em vez de pacotes isolados, para evitar inconsistências de dependências.


Armadilha Comum: Não reiniciar os serviços após a atualização

O erro: O administrador aplica o dnf update runc, verifica a versão com rpm -q runc e considera o trabalho concluído. Porém, o containerd/dockerd continua usando o binário antigo em memória até ser reiniciado.

Consequência: Novos containers continuam sendo criados com a versão vulnerável do runc. A correção só é efetivada após o restart dos serviços.

Solução correta:

bash
$ sudo systemctl restart containerd
$ sudo systemctl restart docker

Verificação: Para confirmar que o serviço está usando o novo binário:

bash
$ sudo lsof -p $(pidof containerd) | grep runc
containerd 12345 root mem REG 253,0 3456789 /usr/bin/runc

Se o caminho apontar para /usr/bin/runc (e não para uma versão anterior em /tmp ou /var/lib), está correto.


Conclusão

A atualização ELSA-2026-29702 para o runc no Oracle Linux 9 é uma correção de segurança Important que aborda três CVEs críticas:


  • CVE-2026-25679: parse incorreto de IPv6 no net/url

  • CVE-2026-32280: DoS por validação ineficiente de cadeias de certificados TLS
  • CVE-2026-32281: DoS por validação ineficiente no crypto/x509


O processo de atualização é simples — um dnf update runc seguido de reinicialização dos serviços dependentes — mas requer atenção aos detalhes: verificação da arquitetura, validação pós-atualização e, crucialmente, o restart de containerd/dockerd para que a nova versão seja efetivamente utilizada.

Em ambientes de produção, planeje a atualização com rollout gradual: atualize os nós de teste primeiro, monitore os logs e, somente então, proceda com os nós de produção. 

Lembre-se de que containers existentes continuam usando a versão antiga do runtime — recrie-os para garantir a correção completa.

O runc é a base de toda a stack containerizada. Manter-se atualizado não é apenas uma boa prática — é um requisito operacional para infraestruturas seguras e resilientes.

Nenhum comentário:

Postar um comentário