Uma imagem preparada permite escrever ficheiros em servidores Ruby on Rails
O Ruby on Rails, o framework web que faz funcionar muitas lojas online, produtos SaaS e startups, corrigiu uma falha crítica: um atacante sem qualquer conta podia escrever ficheiros arbitrários no servidor bastando carregar uma imagem preparada. O erro está no Active Storage, o componente do Rails que trata do envio de ficheiros, e afeta as aplicações que processam imagens com o ImageMagick. Tem uma pontuação de 9,8 em 10, segundo o aviso de segurança do Rails. A correção saiu a 4 de novembro no Rails 8.0.5.2 e 8.1.4.1.
Como um único envio compromete o servidor
O ImageMagick decide como ler um ficheiro pelo seu conteúdo, não pelo nome. Alguns dos seus «codificadores» não se limitam a descodificar uma imagem: seguem instruções dentro do ficheiro e leem ou escrevem outros ficheiros no disco. O Active Storage não restringia nenhum deles e executa o seu analisador ImageMagick assim que um ficheiro é anexado. «Basta anexar o ficheiro enviado; não é preciso nenhuma chamada a variant, preview ou analyze», diz o aviso.
Se a aplicação guarda os ficheiros no disco local (o serviço Disk), o atacante pode também ler qualquer ficheiro a que a aplicação tenha acesso. Entre eles costumam estar o secret_key_base e as credenciais de bases de dados, armazenamento na nuvem e serviços de terceiros. Com elas, avisa o documento, um atacante pode chegar à execução remota de código ou passar para os sistemas ligados. A falha foi comunicada pelo investigador ryotak através do HackerOne. O Rails diz que lhe foi reportada uma cadeia de ataque, «mas não assumimos que seja a única».
Que aplicações são afetadas
Uma aplicação é vulnerável se as três condições se verificarem:
- As imagens são processadas pelo ImageMagick. É o processador de variantes
:mini_magick, o predefinido nas aplicações comload_defaults 6.1ou anterior. Desde o Rails 7.0, as aplicações novas usam libvips, pelo que só ficam expostas se alguém as tiver mudado de volta para o ImageMagick. - O ImageMagick corre sem uma política restrita. As políticas incluídas nos pacotes Debian e Ubuntu não bloqueiam os codificadores envolvidos.
- Desconhecidos podem enviar ficheiros: avatares, fotos de produtos, anexos em pedidos de suporte.
Estão afetadas as versões do activestorage anteriores à 8.0.5.2 e o ramo 8.1 antes da 8.1.4.1. Os ramos antigos não terão correção: a equipa do Rails diz que as versões anteriores já não têm suporte e recomenda passar pelo menos para a série 8.0, cujo suporte de segurança, ainda assim, termina a 7 de novembro de 2026. A mesma versão corrige outros 20 problemas de segurança, quatro deles de gravidade alta, incluindo uma falha distinta nas pré-visualizações de vídeo que podia levar à execução de código através do FFmpeg.
O aviso não menciona ataques reais. Mas, depois de publicada a correção, os atacantes podem comparar o código antigo com o novo para descobrir onde estava a falha, por isso cada dia sem atualizar aumenta o risco.
O que os programadores devem fazer
- Atualize para o Rails 8.0.5.2 ou 8.1.4.1. Se usa o mini_magick, precisa também do mini_magick 5.1 ou mais recente, caso contrário a aplicação falha no arranque.
- Se não puder atualizar já, copie a política do ImageMagick da versão corrigida para o
policy.xmldo sistema. No mínimo, bloqueie o codificador MSL, os codificadores do Ghostscript e o delegadogs. - Se os ficheiros eram guardados com o serviço Disk, mude o
secret_key_base, a chave mestra, todo o conteúdo docredentials.yml.enc, as palavras-passe das bases de dados e do armazenamento e os tokens de terceiros. O aviso pede que não se guarde o segredo antigo como alternativa. - Se a aplicação gera PDF ou PostScript através do ImageMagick, depois de aplicar a política volte a permitir apenas os codificadores de que precisa.
Quem usa sites feitos em Rails não tem nada para instalar. O risco para essas pessoas é que os dados de clientes de uma loja ou serviço por atualizar sejam roubados, e isso depende da rapidez com que os programadores atualizam.