Um ataque de dependência permite a execução de código no PayPal, Microsoft, Apple, Netflix, Uber e 30 outras empresas

Alguns dias atrás um método surpreendentemente simples foi lançado que permite atacar dependências em aplicativos que são desenvolvidos usando repositórios de pacotes internos. Os pesquisadores que identificaram o problema eles foram capazes de executar seu código nos servidores internos de 35 empresas, incluindo PayPal, Microsoft, Apple, Netflix, Uber, Tesla e Shopify.

Os hacks foram realizados como parte dos programas Bug Bounty, em coordenação com as empresas atacadas, e os perpetradores já receberam US $ 130.000 em bônus por identificar vulnerabilidades.

O método é baseado no fato de que muitas empresas usam dependências de repositório padrão de NPM, PyPI e RubyGems em seus aplicativos internos, bem como dependências internas que não são distribuídas publicamente ou baixadas de seus próprios repositórios.

O problema é que os gerenciadores de pacotes como npm, pip e gem eles tentam baixar as dependências internas das empresas, até mesmo dos repositórios públicos. Para um ataque, basta definir os nomes dos pacotes com dependências internas e criar seus próprios pacotes com os mesmos nomes nos repositórios públicos do NPM, PyPI e RubyGems.

O problema não é específico do NPM, PyPI e RubyGems e também se manifesta em outros sistemas, como NuGet, Maven e Yarn.

A ideia do método proposto surgiu depois que um pesquisador acidentalmente notou que em um código disponível publicamente postado no GitHub, muitas empresas não removem a menção de dependências adicionais de seus arquivos de manifesto utilizado em projetos internos ou na implementação de funcionalidades estendidas. Traços semelhantes foram encontrados no código JavaScript para serviços da web, bem como em projetos Node.JS, Python e Ruby de muitas empresas.

Os principais vazamentos estavam relacionados à incorporação do conteúdo dos arquivos package.json no código JavaScript publicamente disponível durante o processo de construção, bem como com o uso de elementos de caminho reais em chamadas require (), que podem ser usados ​​para julgar nomes de dependências.

A varredura de vários milhões de domínios corporativos revelou vários milhares de nomes de pacotes JavaScript que não estavam no repositório do NPM. Tendo compilado um banco de dados de nomes de pacotes internos, o pesquisador decidiu realizar um experimento para hackear a infraestrutura de empresas participantes dos programas Bug Bounty. Os resultados foram surpreendentemente eficazes e o pesquisador foi capaz de executar seu código em muitos computadores e servidores de desenvolvimento responsáveis ​​por construir ou testar com base em sistemas de integração contínua.

Ao baixar dependências, os gerenciadores de pacotes npm, pip e gem instalaram principalmente os pacotes dos repositórios públicos primários NPM, PyPI e RubyGems, que foram considerados de maior prioridade.

A presença de pacotes semelhantes com os mesmos nomes nos repositórios de empresas privadas foi ignorada sem mostrar qualquer aviso ou causar travamentos que poderia atrair a atenção dos administradores. No PyPI, a prioridade de download foi influenciada pelo número da versão (independentemente do repositório, a versão mais recente do pacote foi baixada). No NPM e RubyGems, a prioridade era apenas dependente do repositório.

O pesquisador colocou pacotes nos repositórios NPM, PyPI e RubyGems que cruzam os nomes das dependências internas encontradas, adicionando código ao script que roda antes da instalação (pré-instalado no NPM) para reunir informações sobre o sistema e enviar as informações recebidas para o host externo.

Para transmitir informações sobre o sucesso do hack, ignore os firewalls que bloqueiam o tráfego externo, o método de organizar as comunicações de canal secreto por meio do protocolo DNS. O código que estava em execução resolveu o host no domínio de ataque sob o controle do domínio de ataque, o que possibilitou a coleta de informações sobre operações bem-sucedidas no servidor DNS. Informações sobre o host, nome de usuário e caminho atual foram passadas.

75% de todas as execuções de código registradas foram associadas a downloads de pacotes NPM, principalmente devido ao fato de que havia significativamente mais nomes de módulos internos em JavaScript do que nomes de dependências em Python e Ruby.

fonte: https://medium.com/


O conteúdo do artigo segue nossos princípios de Ética editorial. Para relatar um erro, clique Clique aqui.

Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.