Uma falha crítica no Ruby on Rails pode permitir que um atacante não autenticado grave arquivos arbitrários no servidor de uma aplicação, por meio de um arquivo manipulado, caso o app processe uploads usando o ImageMagick. O projeto Rails divulgou a falha em um aviso de segurança e a corrigiu nas versões 8.1.4.1 e 8.0.5.2.
A falha está no Active Storage, componente do Rails responsável pelo envio de arquivos. Algumas aplicações armazenam os arquivos enviados com o serviço Disk do Active Storage, que os salva no disco do servidor. Nessas aplicações, um atacante também poderia ler qualquer arquivo que o app consiga acessar.
De acordo com o Rails, esses arquivos normalmente incluem o secret_key_base da aplicação e as credenciais de acesso a outros sistemas. A leitura desses dados pode, por sua vez, permitir a execução remota de código ou a movimentação lateral para outros sistemas.
O Rails classifica a falha com nota 9,8 em 10 na escala CVSS (Sistema de Pontuação de Vulnerabilidades Comuns). Ela é acompanhada pelo identificador GHSA-f3w6-w445-fwh9 e ainda não possui um identificador CVE (Vulnerabilidades e Exposições Comuns).
O ImageMagick escolhe um manipulador de formato, que chama de coder, com base no conteúdo do arquivo. Alguns coders atuam sobre outros arquivos citados dentro da imagem, e não sobre a própria imagem. O Active Storage não impõe limites aos coders que um upload pode usar, de modo que a única restrição era a política de segurança do ImageMagick instalada no servidor.
O analisador do ImageMagick no Active Storage é executado quando um arquivo é anexado. Basta anexar o upload para alcançar a falha. A aplicação não precisa gerar uma variante (uma cópia transformada da imagem), uma prévia ou chamar a análise.
Segundo o commit que corrigiu a falha, um arquivo SVG (formato de imagem vetorial) enviado chegou ao coder MSL do ImageMagick por meio desse analisador. O MSL (Linguagem de Script do ImageMagick) é um coder de script que lê e grava arquivos indicados no próprio script.
O Rails afirmou que lhe foi reportada uma cadeia de ataque, mas que não “presume que seja a única existente”. O aviso não diz se a falha já foi explorada.
A falha foi reportada pela plataforma HackerOne por RyotaK, pesquisador da GMO Flatt Security.
Quais aplicações Rails são afetadas
Uma aplicação só é afetada se as três condições a seguir forem verdadeiras:
- Ela usa o ImageMagick para processar imagens do Active Storage. Isso ocorre com a configuração config.active_storage.variant_processor = :mini_magick, que é o padrão para aplicações com load_defaults 6.1 ou anterior.
- A política de segurança do ImageMagick não bloqueia os coders envolvidos. O Rails diz que as políticas distribuídas pelo Debian e pelo Ubuntu não fazem esse bloqueio.
- Ela aceita uploads de usuários não confiáveis.
Para verificar a primeira condição, observe config.active_storage.variant_processor. Se a configuração não estiver definida, o padrão depende de load_defaults: :mini_magick antes da versão 7.0 e :vips a partir da 7.0. A mesma configuração define qual biblioteca analisa os uploads, e não apenas qual delas gera as variantes.
Todas as versões do Active Storage anteriores à 8.0.5.2 são afetadas, assim como as versões da série 8.1 anteriores à 8.1.4.1. As séries anteriores à 8.0 não têm mais suporte, e o Rails não lançará correções para elas.
Em julho, o Rails corrigiu outra falha crítica no Active Storage, a CVE-2026-66066, que afetava aplicações que usam o libvips em vez do ImageMagick. Aplicações que usam o ImageMagick não estavam expostas ao caminho de ataque daquela falha, mas podem ser afetadas por esta.
As mesmas versões também corrigem uma segunda falha no Active Storage, a GHSA-v924-7rp8-4mxh, que o Rails classifica como alta, com pontuação CVSS de 8,8. O Active Storage enviava os uploads ao ImageMagick e ao FFmpeg (ferramenta de processamento de áudio e vídeo) com nomes temporários que mantinham a extensão do arquivo enviado.
Essas ferramentas podem escolher um decodificador a partir da extensão quando o conteúdo do arquivo não revela seu formato. Assim, um atacante que escolhesse o nome do arquivo enviado e declarasse seu tipo de conteúdo poderia definir o decodificador que o processaria.
O que fazer
O Rails recomenda fortemente atualizar o quanto antes. As duas versões corrigem 21 problemas de segurança no total.
As versões corrigidas incluem uma política de segurança para o ImageMagick. O MiniMagick é a biblioteca Ruby que o Active Storage usa para chamar o ImageMagick. Em sua configuração padrão, todo comando do ImageMagick executado pelo MiniMagick aplica a política, e não apenas os comandos vindos do Active Storage.
A política bloqueia o coder MSL; os coders que leem ou excluem arquivos diferentes da imagem; os coders que buscam referências remotas ou locais, ou que as exibem em tela; todos os coders baseados no Ghostscript, junto com o delegado gs; e o redirecionamento por @nome_do_arquivo.
- Atualize para o Rails 8.1.4.1 ou 8.0.5.2. Aplicações com :mini_magick também precisam do mini_magick 5.1 ou posterior, ou apresentarão erro na inicialização. O Rails 8.0 receberá correções de segurança somente até 7 de novembro de 2026, de acordo com sua política de manutenção.
- Confirme que a aplicação carrega a nova política, conforme descrito no guia do Active Storage, executando o comando bin/rails runner 'puts MiniMagick.identify { |i| i.list "policy" }'.
- Verifique se a política distribuída chega de fato à aplicação. Ela não se aplica a apps que substituem MiniMagick.cli_env após a inicialização, que limpam o ambiente com MiniMagick.cli_prefix ou que instalam um MiniMagick::Shell próprio. Esses apps devem incluir as regras na política de sistema do ImageMagick.
- Aplicações que usam o GraphicsMagick não recebem proteção da política distribuída, porque o GraphicsMagick não lê as políticas do ImageMagick.
- Verifique a política de segurança do ImageMagick instalada no servidor. A política distribuída complementa a do servidor, e não a substitui. Uma regra existente que permita um coder, inclusive com curinga como pattern="*", prevalece sobre o bloqueio da política distribuída para esse coder.
- Se a aplicação renderiza arquivos PDF ou PostScript por meio do ImageMagick, reative o delegado gs e os coders que ele usa no policy.xml do servidor.
- Se ainda não for possível atualizar, copie as regras da política distribuída, o arquivo activestorage/lib/active_storage/image_magick/policy.xml, para a política de sistema do ImageMagick, como /etc/ImageMagick-7/policy.xml. No mínimo, bloqueie o coder MSL, os coders do Ghostscript e o delegado gs. O Rails também publicou a correção como patches para a versão 8.1 e para a versão 8.0.
- Aplicações de séries anteriores à 8.0 podem usar essa solução alternativa ou atualizar para a 8.0 ou posterior.
- As soluções alternativas do Rails para a segunda falha alteram apenas a forma como o FFmpeg é usado. Nenhuma delas cobre o ImageMagick.
- Se a aplicação armazena anexos com o serviço Disk, troque o secret_key_base e todos os outros segredos que o processo da aplicação consegue ler. Isso inclui a chave mestra, tudo o que está em config/credentials.yml.enc, as credenciais de armazenamento e de banco de dados e os tokens de terceiros. Não mantenha nenhum segredo exposto como alternativa de contingência.
O aviso não explica como verificar se uma aplicação já foi alvo de ataques.