Ir para conteúdo

Alerta de Vulnerabilidade - Ruby on Rails

TIPO
Vulnerabilidade
SISTEMAS AFETADOS
Ruby on Rails
ECOSSISTEMA
Outro
CVSS v4.0 - Resumo Técnico CVSS: 9.5 / 10 - Crítico
CVE CVE-2026-66066
Vetor CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Vetor de Ataque Rede Explorável remotamente através da rede
Complexidade Baixa Baixa complexidade de exploração
Requisitos de Ataque Presentes Requer que a aplicação utilize o processador vips do Active Storage e aceite carregamento de imagens de utilizadores não confiáveis
Privilégios Nenhum Sem autenticação
Interação Nenhuma Não requer intervenção do utilizador
Impacto no sistema vulnerável
(C/I/A)
Alta / Alta / Alta Comprometimento total da confidencialidade, integridade e disponibilidade
Impacto em sistemas subsequentes
(C/I/A)
Alta / Alta / Alta Os segredos exfiltrados permitem execução de código e movimento lateral para sistemas e serviços ligados
Resumo Vulnerabilidade de severidade crítica (CVSS 9.5), identificada como CVE-2026-66066, de inicialização de recurso com predefinição insegura (CWE-1188) no processamento de variantes do Active Storage do Ruby on Rails. O Active Storage entrega os ficheiros carregados ao libvips sem desativar os loaders marcados como unfuzzed, inseguros para conteúdo não confiável. Um atacante remoto não autenticado que carregue um ficheiro manipulado e desencadeie a geração de uma variante pode ler ficheiros arbitrários no servidor, incluindo o ambiente do processo (por exemplo secret_key_base e credenciais de serviços externos), com possibilidade de escalar para execução de código e movimento lateral. Afeta configurações que utilizem o processador vips e aceitem carregamentos não confiáveis: activestorage anterior a 7.2.3.2, 8.0.0 a 8.0.5.0 e 8.1.0 a 8.1.3.0. Corrigido em 7.2.3.2, 8.0.5.1 e 8.1.3.1, exigindo libvips 8.13 ou superior.

Descrição
Vulnerabilidade de inicialização de um recurso com predefinição insegura (CWE-1188) no processamento de variantes de imagem do Active Storage do Ruby on Rails, com o identificador CVE-2026-66066 [1][2]. Para gerar variantes de imagem, o Active Storage recorre ao libvips, uma biblioteca de processamento de imagem. O libvips suporta vários formatos através de loaders, alguns marcados como "unfuzzed" por serem inseguros para conteúdo não fidedigno. Na configuração predefinida, o Active Storage não desativa esses loaders, o que permite invocá-los a partir de um ficheiro carregado por um atacante [1].

São afetadas as versões do activestorage anteriores à 7.2.3.2, as versões 8.0 até 8.0.5.0 e as versões 8.1 até 8.1.3.0, quando a aplicação usa o libvips (config.active_storage.variant_processor = :vips, predefinição desde load_defaults 7.0) e aceita carregamento de imagens de utilizadores não fidedignos [1]. As versões 6.x só são afetadas quando o processador vips foi ativado manualmente [1][3]. A correção está disponível nas versões 7.2.3.2, 8.0.5.1 e 8.1.3.1 [1][2].

Impacto
A exploração é remota e não requer autenticação nem interação do utilizador, exigindo apenas que a aplicação use o processador vips e aceite imagens de origem não fidedigna. Ao carregar um ficheiro manipulado e desencadear a geração de uma variante, o atacante invoca um loader inseguro do libvips e lê ficheiros arbitrários do servidor [1].

Entre esses ficheiros está o ambiente do processo, que tipicamente contém o secret_key_base, a master key, as credenciais da base de dados e do serviço de armazenamento (S3, GCS ou Azure) e tokens de serviços terceiros. Com estes segredos, o atacante pode escalar para execução de código no servidor e para movimento lateral para os sistemas ligados [1].

Resolução
Recomenda-se a atualização imediata do activestorage para a versão 7.2.3.2, 8.0.5.1 ou 8.1.3.1, consoante a ramificação, garantindo que o libvips está na versão 8.13 ou posterior. As versões anteriores do libvips não conseguem desativar os loaders inseguros e, nesse caso, o Active Storage passa a gerar uma exceção no arranque [1].

Medidas adicionais recomendadas:
  • Tratar como potencialmente expostos todos os segredos acessíveis ao processo da aplicação e alterá-los, incluindo o secret_key_base, a master key e o conteúdo do config/credentials.yml.enc, as credenciais do serviço de armazenamento e da base de dados, e os tokens de serviços terceiros. O segredo exposto não deve ser mantido como fallback [1];
  • Quando não for possível atualizar de imediato e o libvips for 8.13 ou posterior, desativar os loaders inseguros através da variável de ambiente VIPS_BLOCK_UNTRUSTED, ou, com ruby-vips 2.2.1 ou posterior, invocando Vips.block_untrusted(true) num initializer [1];
  • Se o libvips for anterior à 8.13 e não for possível atualizar, remover o ruby-vips do Gemfile, nos casos em que só é usado para análise de imagem ou em que a aplicação não usa o Active Storage [1];
  • Ter presente que a correção restringe a geração de variantes para formatos como BMP, ICO, PSD, SVG, JPEG XL, JPEG 2000, Netpbm e FITS, o que pode exigir ajustes na configuração variable_content_types [2].
Referências
[1] - https://github.com/rails/rails/security/advisories/GHSA-xr9x-r78c-5hrm
[2] - https://discuss.rubyonrails.org/t/cve-2026-66066-possible-arbitrary-file-read-and-remote-code-execution-in-active-storage-variant-processing/91432
[3] - https://ethiack.com/info-hub/research/kindarails2shell-rails-rce-cve-2026-66066
Última atualização em 07-09-2022