Atualização crítica de segurança Ruby no Rocky Linux 9 corrige três CVEs no net-imap. Guia prático com comandos, verificação pós-patch e troubleshooting para equipes de infraestrutura.
Em 1º de julho de 2026, a Rocky Linuxx publicou o aviso de segurança RLSA-2026:33577, classificado como Importante, direcionado ao módulo ruby:4.0 no Rocky Linux 9.
O boletim aborda três vulnerabilidades críticas na biblioteca net-imap do Ruby, afetando diretamente os pacotes rubygem-mysql2 e rubygem-pg.
As CVEs corrigidas são:
- CVE-2026-42245 — complexidade quadrática no Net::IMAP::ResponseReader ao processar respostas com muitas strings literais, causando DoS por consumo excessivo de CPU.
- CVE-2026-42246 — STARTTLS stripping: atacante MITM pode forçar Net::IMAP#starttls a retornar "sucesso" sem estabelecer TLS, expondo o tráfego em texto plano.
- CVE-2026-42258 — injeção de comandos IMAP via argumentos do tipo Symbol (CRLF Injection), permitindo execução arbitrária de comandos com CVSS 9.8 (Crítico).
Este guia apresenta o procedimento de aplicação do patch, verificação de integridade e boas práticas operacionais para ambientes de produção.
Pré-requisitos
- Sistema: Rocky Linux 9 (x86_64, aarch64, ppc64le ou s390x)
- Acesso: sudo ou root
- Repositórios: repositórios base e appstream configurados e sincronizados
- Backup: recomendado backup dos Gemfiles e aplicações Ruby antes da atualização
Janela de manutenção: planeje um downtime ou rotação de instâncias, pois a atualização pode reiniciar serviços dependentes do Ruby.
Passo a Passo
1. Identificação do Estado Atual
Antes de qualquer alteração, documente a versão dos pacotes instalados:
$ rpm -qa | grep -E 'rubygem-(mysql2|pg)|ruby' ruby-4.0.0-1.module+el9.8.0+40094+ce01217c.x86_64 rubygem-mysql2-0.5.4-1.module+el9.8.0+40094+ce01217c.x86_64 rubygem-pg-1.3.5-1.module+el9.8.0+40094+ce01217c.x86_64
Por que fazer isso ? Ter um registro do estado pré-patch permite auditoria e rollback, caso necessário. Em ambientes com múltiplos nós, mantenha um inventário das versões.
2. Atualização dos Pacotes via DNF
A atualização pode ser aplicada de duas formas:
Opção A — Atualização seletiva (recomendada para produção):
$ sudo dnf update --security --assumeno
A flag --assumeno simula a operação e exibe o que será atualizado. Após revisão, execute:
$ sudo dnf update --security -y
Opção B — Atualização específica do módulo ruby:4.0:
$ sudo dnf module update ruby:4.0 --security -y
Saída esperada (trecho):
Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Upgrading: rubygem-mysql2 x86_64 0.5.7-1.module+el9.8.0+40094+ce01217c appstream 87 k rubygem-pg x86_64 1.4.6-1.module+el9.8.0+40094+ce01217c appstream 92 k ... Transaction Summary ================================================================================ Upgrade 12 Packages
Por que --security ? O DNF filtra apenas atualizações com classificação de segurança, evitando upgrades indesejados de pacotes não relacionados.
3. Verificação Pós-Atualização
Confirme que os pacotes foram atualizados para as versões corrigidas:
$ rpm -q rubygem-mysql2 rubygem-pg rubygem-mysql2-0.5.7-1.module+el9.8.0+40094+ce01217c.x86_64 rubygem-pg-1.4.6-1.module+el9.8.0+40094+ce01217c.x86_64
A versão alvo do rubygem-mysql2 é 0.5.7-1 (anteriormente 0.5.4). Para o rubygem-pg, a versão corrigida é 1.4.6-1.
Verifique também se o módulo foi atualizado:
$ dnf module list ruby --show-duplicates
4. Validação Funcional da Biblioteca net-imap
A vulnerabilidade CVE-2026-42246 (STARTTLS stripping) exige atenção especial: o patch não altera o comportamento da API, mas a aplicação deve agora verificar explicitamente Net::IMAP#tls_verified? após starttls.
Exemplo de código vulnerável (pré-patch):
imap = Net::IMAP.new('mail.example.com', port: 143) imap.starttls imap.login('user', 'pass') # se starttls falhou silenciosamente, a senha vai em texto plano
Exemplo corrigido (pós-patch):
imap = Net::IMAP.new('mail.example.com', port: 143) imap.starttls unless imap.tls_verified? raise SecurityError, 'STARTTLS negotiation failed — connection not encrypted' end imap.login('user', 'pass')
Por que isso é crítico ? O CVE-2026-42246 permite que um atacante em posição de MITM suprima a negociação TLS sem que a aplicação perceba. A correção no net-imap torna o comportamento mais seguro, mas a camada de aplicação ainda precisa validar o status da conexão.
5. Reinicialização de Serviços Dependentes
Após a atualização, serviços que carregam as gems afetadas (Sidekiq, Action Mailer, qualquer worker que use Net::IMAP) precisam ser reiniciados:
$ sudo systemctl restart sidekiq $ sudo systemctl restart my-rails-app
Em ambientes containerizados, reconstrua as imagens ou reinicie os pods:
$ kubectl rollout restart deployment/my-app
📘 Indicação de Leitura
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.
Troubleshooting
Problema Comum: Net::IMAP ainda reporta versão vulnerável
Cenário: Após a atualização, a aplicação Ruby ainda carrega uma versão antiga do net-imap por meio de uma Gem instalada via Bundler, ignorando a versão do sistema.
Solução:
1. Verifique a versão carregada no runtime:
$ ruby -e "require 'net/imap'; puts Net::IMAP::VERSION"
2. Se a versão for inferior a 0.4.24 (ou 0.5.14 / 0.6.4, dependendo do branch), a Gem local está sobrescrevendo a do sistema.
3. Atualize o Gemfile da aplicação:
gem 'net-imap', '~> 0.6.4' # ou '~> 0.5.14' para compatibilidade
4. Execute bundle update net-imap e reinicie a aplicação.
Armadilha comum:
Iniciantes assumem que o patch do sistema (dnf update) é suficiente para aplicações Ruby que usam Bundler.
Não é. O Bundler isola as Gems do sistema. A atualização do sistema corrige a biblioteca base, mas a aplicação precisa ser explicitamente recompilada/reinstalada para usar a versão corrigida.
Conclusão
O RLSA-2026:33577 é uma atualização obrigatória para qualquer ambiente Rocky Linux 9 que utilize Ruby com funcionalidades IMAP.
As três CVEs corrigidas abrangem desde negação de serviço (CVE-2026-42245) até injeção de comandos com CVSS 9.8 (CVE-2026-42258) e interceptação de tráfego por STARTTLS stripping (CVE-2026-42246).
O procedimento de patch é direto via dnf update --security, mas a validação pós-patch — especialmente a verificação de versão das Gems e a adaptação do código para tls_verified? — é igualmente crítica.
Em ambientes com Bundler, a atualização do sistema é apenas o primeiro passo; a aplicação precisa ser reconfigurada para consumir a versão corrigida da biblioteca.
Mantenha-se atento aos avisos de segurança da Rocky Linux e priorize a automação dessas atualizações em esteiras de CI/CD para reduzir o tempo entre a divulgação e a aplicação do patch em produção.

Nenhum comentário:
Postar um comentário