O Ataque MavenGate pode permitir que Hackers sequestrem Java e Android através de Bibliotecas Abandonadas
23 de Janeiro de 2024

Várias bibliotecas públicas e populares abandonadas, mas ainda utilizadas em aplicações Java e Android, foram identificadas como suscetíveis a um novo método de ataque à cadeia de suprimentos de software chamado MavenGate.

"O acesso aos projetos pode ser sequestrado por meio de compras de nomes de domínio e, como a maioria das configurações de construção padrão são vulneráveis, seria difícil ou até mesmo impossível saber se um ataque estava sendo realizado", disse a Oversecured em uma análise publicada na semana passada.

A exploração bem-sucedida dessas falhas poderia permitir que atores nefastos sequestrassem artefatos em dependências e injetassem código malicioso na aplicação, e pior, até comprometessem o processo de construção por meio de um plugin malicioso.

A firma de segurança móvel acrescentou que todas as tecnologias baseadas em Maven, incluindo o Gradle, são vulneráveis ao ataque, e que enviou relatórios para mais de 200 empresas, incluindo Google, Facebook, Signal, Amazon e outras.

O Apache Maven é usado principalmente para construção e gerenciamento de projetos baseados em Java, permitindo aos usuários baixar e gerenciar dependências (que são identificadas de forma única por seus groupIds), criar documentação e gerenciar releases.

Enquanto os repositórios que hospedam tais dependências podem ser privados ou públicos, um invasor poderia visar o último para conduzir ataques de envenenamento na cadeia de suprimentos, aproveitando bibliotecas abandonadas adicionadas a repositórios conhecidos.

Especificamente, envolve a compra do domínio reverso expirado controlado pelo proprietário da dependência e a obtenção de acesso ao groupId.

"Um atacante pode ganhar acesso a um groupId vulnerável afirmando seus direitos a ele via um registro DNS TXT em um repositório onde não existe conta gerenciando o groupId vulnerável", disse a empresa.

"Se um groupId já está registrado com o repositório, um atacante pode tentar ganhar acesso a esse groupId entrando em contato com a equipe de suporte do repositório."

Para testar o cenário de ataque, a Oversecured carregou sua própria biblioteca de teste Android (groupId: "com.oversecured"), que exibe a mensagem toast "Hello World!", para o Maven Central (versão 1.0), enquanto também carregou duas versões para o JitPack, onde a versão 1.0 é uma réplica da mesma biblioteca publicada no Maven Central.

Mas a versão 1.1 é uma cópia "não confiável" editada que também tem o mesmo groupId, mas que aponta para um repositório do GitHub sob seu controle e é reivindicada adicionando um registro DNS TXT para referenciar o nome de usuário do GitHub a fim de estabelecer prova de propriedade.

O ataque então funciona adicionando o Maven Central e o JitPack à lista de repositórios de dependência no script de construção do Gradle.

Vale notar neste estágio que a ordem de declaração determina como o Gradle vai verificar as dependências em tempo de execução.

"Quando movemos o repositório do JitPack acima do mavenCentral, a versão 1.0 foi baixada do JitPack", disseram os pesquisadores.

"Mudar a versão da biblioteca para 1.1 resultou no uso da versão do JitPack, independentemente da posição do JitPack na lista de repositórios."

Como resultado, um adversário procurando corromper a cadeia de suprimentos de software pode direcionar as versões existentes de uma biblioteca, publicando uma versão superior ou contra novas versões, empurrando uma versão que é inferior à de seu equivalente legítimo.

Essa é outra forma de um ataque de confusão de dependência onde um atacante publica um pacote vilão para um repositório de pacotes públicos com o mesmo nome de um pacote dentro do repositório privado pretendido.

"A maioria das aplicações não verifica a assinatura digital das dependências, e muitas bibliotecas nem mesmo a publicam", acrescentaram os pesquisadores.

"Se o atacante quiser permanecer indetectável pelo maior tempo possível, faz sentido lançar uma nova versão da biblioteca com o código malicioso embutido e esperar que o desenvolvedor faça o upgrade para ela."

Dos 33.938 domínios totais analisados, 6.170 (18.18%) deles foram encontrados vulneráveis ao MavenGate, permitindo que os atores de ameaças sequestrassem as dependências e injetassem seu próprio código.

A Sonatype, que possui o Maven Central, disse que a estratégia de ataque descrita "não é viável devido à automação em vigor", mas observou que "desativou todas as contas associadas a domínios expirados e projetos do GitHub" como uma medida de segurança.

Além disso, disse que endereçou uma "regressão no processo de validação da chave pública" que tornava possível carregar artefatos no repositório com uma chave não compartilhada publicamente.

Ela também anunciou planos de colaborar com a SigStore para assinar digitalmente os componentes.
"O desenvolvedor final é responsável pela segurança não apenas para as dependências diretas, mas também para as dependências transitivas", disse a Oversecured.

"Os desenvolvedores de bibliotecas devem ser responsáveis pelas dependências que declaram e também escrever hashes de chave pública para suas dependências, enquanto o desenvolvedor final deve ser responsável apenas por suas dependências diretas."

Publicidade

Curso gratuito de Python

O curso Python Básico da Solyd oferece uma rápida aproximação à linguagem Python com diversos projetos práticos. Indo do zero absoluto até a construção de suas primeiras ferramentas. Tenha também suporte e certificado gratuitos. Saiba mais...