O Google Tensorflow para de admitir a YAML devido a uma falha na execução do código

O TensorFlow, um projeto popular de aprendizado de máquina e inteligência artificial baseado em Python desenvolvido pelo Google, removeu o suporte para YAML para corrigir uma vulnerabilidade crítica de execução de código.

YAML ou Yet Another Markup Language é uma escolha econômica entre os desenvolvedores que procuram uma linguagem de serialização de dados legível para lidar com arquivos de configuração e dados em trânsito.

índice

  1. Vulnerabilidade de desserialização não confiável no TensorFlow
  2. TensorFlow abandona o YAML completamente em favor do JSON

Vulnerabilidade de desserialização não confiável no TensorFlow

Os mantenedores por trás do TensorFlow e do Keras, um projeto de wrapper para o TensorFlow, corrigiram uma vulnerabilidade de desserialização não confiável resultante da verificação insegura de YAML.

Rastreada como CVE-2021-37678, a falha crítica permite que invasores executem código arbitrário quando um aplicativo desserializa um modelo Keras fornecido no formato YAML.

As vulnerabilidades de desserialização geralmente ocorrem quando um aplicativo lê dados inválidos ou maliciosos de fontes não autênticas.

Depois que um aplicativo lê e desserializa os dados, ele pode travar e causar uma condição de negação de serviço (DoS) ou, pior ainda, executar código de invasor arbitrário.

Essa vulnerabilidade de desserialização YAML, classificada em um nível de gravidade de 9,3, foi relatada com responsabilidade aos mantenedores do TensorFlow pelo pesquisador de segurança. Arjun Shibu.

E a origem do defeito, você pergunta? A infame função "yaml.unsafe_load()" no código do TensorFlow:

Chamada de função yaml.unsafe_load vulnerável no TensorFlow ( GitHub )

A função "unsafe_load" é ​​conhecida por desserializar dados YAML de maneira bastante liberal – ela resolve todas as tags, "mesmo aquelas conhecidas por serem perigosas em caso de entrada não confiável".

Isso significa que, idealmente, "unsafe_load" deve ser invocado apenas na entrada que vem de uma fonte confiável e é conhecida por estar livre de qualquer conteúdo malicioso.

Caso contrário, os invasores podem aproveitar o mecanismo de desserialização para executar o código de sua escolha injetando uma carga maliciosa em dados YAML que ainda não foram serializados.

Um exemplo de uma exploração de prova de conceito (PoC) compartilhada na vulnerabilidade consultiva simplesmente demonstra isso:

 from tensorflow.keras import models payload = ''' !!python/object/new:type args: ['z', !!python/tuple [], {'extend': !!python/name:exec }] listitems : "__import__('os').system('cat /etc/passwd')" ''' models.model_from_yaml(payload)

TensorFlow abandona o YAML completamente em favor do JSON

Depois que a vulnerabilidade foi relatada, o TensorFlow decidiu remover completamente o suporte a YAML e usar a desserialização JSON.

“Como o suporte ao formato YAML requer uma quantidade significativa de trabalho, nós o removemos por enquanto”, dizem os mantenedores do projeto no mesmo comunicado.

"Os métodos `Model.to_yaml()` e `keras.models.model_from_yaml` foram substituídos para gerar um `RuntimeError`, pois podem ser abusados ​​para causar a execução de código arbitrário", as notas de lançamento também explicam. versão associada com o ajuste.

"Recomendamos que você use a serialização JSON em vez de YAML ou, uma alternativa melhor, serialize para H5."

Vale a pena notar que o TensorFlow não é o primeiro ou único projeto a usar YAML unsafe_load . O uso da função é bastante frequente em projetos Python.

O GitHub mostra milhares de resultados de pesquisa referentes ao recurso, com alguns desenvolvedores propondo melhorias:

Muitos repositórios no GitHub usaram e estão usando o recurso de upload inseguro do YAML (GitHub)

A correção para CVE-2021-37678 deve chegar na versão 2.6.0 do TensorFlow e também será atualizada para as versões anteriores 2.5.1, 2.4.3 e 2.3.4, dizem os mantenedores.

  • Como pular 10 segundos para frente e para trás no YouTube e outros aplicativos
  • Como se conectar a compartilhamentos de rede com o aplicativo iOS Files

descubra mais conteúdo

O que é um amplificador integrado?

Google Pixel Watch também tem detecção de queda, mas não até o próximo ano

As melhores xícaras de café aquecidas de 2022

Como automatizar seu iPhone com base na hora, atividade ou localização

"Isso deve ter sido antes do meu tempo"

Por que a NASA enviou Snoopy para a Lua? – Revisão Geek

Deixe uma resposta Cancelar resposta

YAML é um formato de serialização de dados legível por humanos inspirado em linguagens como XML, C, Python, Perl, bem como formatação de e-mail. O YAML foi proposto por Clark Evans em 2001, que o projetou junto com Ingy döt Net e Oren Ben-Kiki.

O que é YAML e para que serve?

O arquivo YAML é uma linguagem de declaração de dados que facilita a leitura e a gravação do usuário. Este formato de serialização de dados é responsável por armazenar os arquivos de configuração e pode ser utilizado em conjunto com todas as linguagens de programação.

O que é JSON e YAML?

YAML – é uma linguagem de representação de dados leve e legível por humanos. Ele foi projetado principalmente para tornar o formato fácil de ler, ao mesmo tempo em que inclui recursos complexos. Como YAML é um superconjunto de JSON , você pode analisar JSON com um analisador YAML .

Como usar YAML em Python?

Para ler o arquivo YAML fornecido em Python , primeiro importe o módulo yaml . Em seguida, abra o arquivo yaml usando a função open(). O módulo yaml tem uma função load() integrada, que aceita um arquivo como argumento, carrega um arquivo YAML em Python e o converte em um tipo de dados de objeto Python .

Como abrir um arquivo YAM?

yml também podem ser lidos por qualquer editor de texto desenvolvido para criar, abrir e editar arquivos de texto simples, seja software de edição de texto para sistemas baseados no Microsoft Windows, como Microsoft Notepad e Microsoft WordPad, ou para plataformas Mac como o software

Ir arriba