Milhões de repositórios de software corporativo no GitHub são vulneráveis ao repojacking, um tipo relativamente simples de ataque à cadeia de suprimentos de software em que um agente de ameaça redireciona projetos que dependem de um repositório específico para um mal-intencionado.
A questão tem a ver com como o GitHub lida com dependências quando um usuário ou organização do GitHub altera o nome de um projeto ou transfere sua propriedade para outra entidade, disseram pesquisadores da Aqua Security em um relatório esta semana.
Riscos de mudança de nome
Para evitar a quebra de dependências de código, o GitHub cria um link entre o nome do repositório original e o novo para que todos os projetos que dependem do repositório original sejam automaticamente redirecionados para o nome recém-renomeado. No entanto, se uma organização não conseguir proteger adequadamente o nome de usuário antigo, um invasor poderá simplesmente reutilizá-lo para criar uma versão trojanizada do repositório original para que todos os projetos que dependiam do repositório voltem a baixar dependências dele.
“Quando um proprietário de repositório altera seu nome de usuário, um link é criado entre o nome antigo e o novo nome para qualquer pessoa que baixe dependências do repositório antigo”, disseram os pesquisadores do Aqua em um blog esta semana. “No entanto, é possível que qualquer pessoa crie o nome de usuário antigo e quebre esse link.”
Pesquisadores do Aqua decidiram recentemente investigar a prevalência de repositórios no GitHub que são vulneráveis a esse tipo de repojacking, ou sequestro de repositório de dependência, como alguns pesquisadores de segurança se referem à ameaça.
Problema amplamente prevalente
O que a Aqua descobriu foi duplo: milhões desses repositórios – incluindo aqueles pertencentes a empresas como Google e Lyft – estão presentes no GitHub; e ferramentas estão facilmente disponíveis para os invasores encontrarem esses repositórios e sequestrá-los. Uma dessas ferramentas é o GHTorrent, um projeto que mantém um registro quase completo de todos os eventos públicos, como commits e pull requests, no GitHub. Os invasores podem usar o GHTorrent para coletar os nomes do GitHub dos repositórios que a organização usou anteriormente. Eles podem então registrar o repositório sob esse nome de usuário antigo, recriar o repositório e entregar malware a qualquer projeto que o use.
Qualquer projeto que faça referência direta a um repositório do GitHub estará vulnerável se o proprietário do repositório alterar ou excluir o nome de usuário do repositório.
“Apresentamos um conjunto de dados significativo que os invasores podem utilizar para coletar os nomes de repositórios anteriores pertencentes a organizações”, diz Yakir Kadkoda, pesquisador de segurança do Aqua Nautilus.
“As organizações não devem assumir que seus nomes de organizações antigas permanecerão não divulgados”, alerta Kadkoda. “É crucial que eles reivindiquem e mantenham seus nomes de usuário antigos no GitHub e examinem URLs e referências do GitHub em seu código para identificar quaisquer repositórios que possam ser reivindicados por um invasor.”
Ignorando proteções
Kadkoda diz que o GitHub tentou resolver esse problema impedindo a criação de nomes de usuário e repositórios que anteriormente pertenciam e agora redirecionam para outros projetos. O GitHub também implementou um mecanismo há vários anos para aposentar namespaces de repositório populares como um meio de mitigar essa ameaça. “No entanto, vários desvios foram descobertos nos últimos anos”, diz ele. Durante o estudo do Aqua, seus pesquisadores encontraram vários exemplos de repositórios onde a proteção implementada pelo GitHub não se aplicava. “Portanto, os usuários não podem confiar totalmente nessas defesas neste momento”, diz ele.
O blog do Aqua apontou uma vulnerabilidade do GitHub que a Checkmarx descobriu no ano passado como um exemplo das maneiras disponíveis para os invasores ignorarem as tentativas do GitHub de se proteger contra o repojacking. A falha envolveu um mecanismo chamado “popular repository namespace retirement” e afetou todos os nomes de usuário renomeados no GitHub, incluindo mais de 10.000 pacotes em gerenciadores de pacotes, como Swift, Packagist e Go. “O repojacking é uma técnica para sequestrar o tráfego de URLs de repositório renomeado e roteá-lo para o repositório do invasor, explorando uma falha lógica que quebra o redirecionamento original”, disse a Checkmarx em um relatório sobre a vulnerabilidade. “Um repositório do GitHub é vulnerável a repojacking quando seu criador decidiu renomear seu nome de usuário enquanto o nome de usuário antigo está disponível para registro.”
As organizações podem mitigar sua exposição à ameaça de repojacking examinando seu código, repositórios e dependências em busca de links do GitHub, diz Kadkoda: “Eles devem verificar se esses links se referem diretamente a projetos do GitHub ou se há redirecionamentos apontando para repositórios sob outros nomes de usuário ou nomes de repositório que não os links originais.” Nesses casos, as organizações devem tentar reivindicar o nome de usuário disponível para impedir que invasores façam isso. “Além disso, as organizações devem sempre manter seus nomes de usuário antigos no GitHub”, diz ele.
FONTE: DARK READING