Nova vulnerabilidade na linguagem R: atualização imediata.
30 de Abril de 2024

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

Proteja sua empresa contra hackers através de um Pentest

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...