Uma vulnerabilidade de segurança foi descoberta na linguagem de programação R que poderia ser explorada por um ator de ameaças para criar um arquivo RDS (R Data Serialization) malicioso, de tal forma que resulte em execução de código quando carregado e referenciado.
A falha, atribuída ao identificador CVE
CVE-2024-27322
(pontuação CVSS: 8.8), "envolve o uso de objetos promise e avaliação lazy no R", disse a companhia de segurança de aplicações em IA, HiddenLayer.
RDS, assim como pickle no Python, é um formato usado para serializar e salvar o estado de estruturas de dados ou objetos em R, uma linguagem de programação de código aberto usada em computação estatística, visualização de dados e aprendizado de máquina.
Esse processo de serialização – serialize() ou saveRDS() – e deserialização – unserialize() e readRDS() – também é utilizado quando salvando e carregando pacotes R.
A causa raiz por trás do
CVE-2024-27322
reside no fato de que isso poderia levar à execução arbitrária de código ao deserializar dados não confiáveis, deixando os usuários expostos a ataques à cadeia de suprimentos por meio de pacotes R especialmente criados.
Um atacante procurando explorar a falha poderia, portanto, tirar vantagem do fato de que pacotes R aproveitam o formato RDS para salvar e carregar dados, causando execução automática de código quando o pacote é descomprimido e deserializado.
"Pacotes R são vulneráveis a esse exploit e, portanto, podem ser usados como parte de um ataque à cadeia de suprimentos via repositórios de pacotes", disseram os pesquisadores de segurança Kasimir Schulz e Kieran Evans.
"Para um atacante assumir um pacote R, tudo o que eles precisam fazer é sobrescrever o arquivo rdx com o arquivo maliciosamente criado, e quando o pacote é carregado, ele automaticamente executa o código."
O defeito de segurança foi abordado na versão 4.4.0 lançada em 24 de abril de 2024, seguindo a divulgação responsável.
"Um atacante pode explorar esse [defeito] criando um arquivo no formato RDS que contém uma instrução promise configurando o valor para unbound_value e a expressão para conter código arbitrário", disse a HiddenLayer.
Devido à avaliação lazy, a expressão só será avaliada e executada quando o símbolo associado ao arquivo RDS for acessado.
Portanto, se isso for simplesmente um arquivo RDS, quando um usuário o atribui a um símbolo (variável) para trabalhar com ele, o código arbitrário será executado quando o usuário referenciar esse símbolo.
Se o objeto estiver compilado dentro de um pacote R, o pacote pode ser adicionado a um repositório R como o CRAN, e a expressão será avaliada e o código arbitrário executado quando um usuário carregar esse pacote.
O Centro de Coordenação CERT (CERT/CC) divulgou um aviso para o
CVE-2024-27322
, observando que a falha poderia ser explorada para alcançar execução arbitrária de código no dispositivo alvo da vítima via arquivos RDS ou rdx maliciosos.
"Um atacante pode criar arquivos .rds e .rdx maliciosos e usar engenharia social para distribuir esses arquivos para executar código arbitrário no dispositivo da vítima", disse o CERT/CC.
Projetos que usam readRDS em arquivos não confiáveis também são vulneráveis ao ataque.
Publicidade
Tenha acesso aos melhores hackers éticos do mercado através de um serviço personalizado, especializado e adaptado para o seu negócio. Qualidade, confiança e especialidade em segurança ofensiva de quem já protegeu centenas de empresas. Saiba mais...