Milhões de repositórios do GitHub podem estar vulneráveis a sequestro de repositórios de dependência, também conhecido como "RepoJacking", o que poderia ajudar os atacantes a implementar ataques de cadeia de suprimentos afetando um grande número de usuários.
O aviso vem da equipe de segurança da AquaSec, 'Nautilus', que analisou uma amostra de 1,25 milhão de repositórios do GitHub e descobriu que cerca de 2,95% deles estão vulneráveis ao RepoJacking.
Ao extrapolar esse percentual para a base completa de repositórios do GitHub, com mais de 300 milhões, os pesquisadores estimam que o problema afeta aproximadamente 9 milhões de projetos.
As mudanças nos nomes de usuários e de repositórios são frequentes no GitHub, já que as organizações podem mudar de gerenciamento por meio de aquisição ou fusão, ou podem mudar para um novo nome de marca.
Quando isso acontece, uma redireção é criada para evitar quebra de dependências para projetos que usam código de repositórios que mudaram de nome; no entanto, se alguém registrar o nome antigo, essa redireção se torna inválida.
RepoJacking é um ataque em que um ator malicioso registra um nome de usuário e cria um repositório usado por uma organização no passado, mas que mudou de nome desde então.
Ao fazer isso, qualquer projeto ou código que dependa das dependências do projeto atacado para buscar dependências e código do repositório controlado pelo atacante, que pode conter malware.
O GitHub sabe dessa possibilidade e implementou algumas defesas para ataques de RepoJacking.
No entanto, a AquaSec relata que as soluções até agora têm sido incompletas e facilmente contornáveis.
Por exemplo, o GitHub protege apenas projetos muito populares, mas esses projetos podem usar uma dependência de um repositório vulnerável e menos popular que não é coberto, então a cadeia de suprimentos comprometida também os afeta.
Além disso, o GitHub protege repositórios com mais de 100 clones na semana anterior à mudança de nome, indicando preparações maliciosas.
Essa proteção não cobre projetos que se tornaram populares após sua renomeação ou transferência de propriedade.
Para destacar a importância do problema, a AquaSec analisou organizações renomadas em busca de repositórios vulneráveis e encontrou casos exploráveis em repositórios gerenciados pelo Google e Lyft.
No caso do Google, um arquivo readme contendo instruções sobre como criar o projeto "Mathsteps", bastante popular, apontava para um repositório do GitHub pertencente à Socratic, uma empresa que o Google adquiriu e assimilou em 2018 e que não existe mais.
Como um atacante pode clonar esse repositório para quebrar a redireção, os usuários que seguem as instruções do readme podem ter baixado código malicioso do repositório fraudulento.
Além disso, como as instruções incluíam um comando "npm install" para a dependência, o código do atacante poderia executar código arbitrário nos dispositivos dos usuários sem que eles soubessem.
No caso da Lyft, o ataque seria mais automatizado, já que a AquaSec encontrou um script de instalação no repositório da empresa que busca um arquivo ZIP de outro repositório, que é vulnerável ao RepoJacking.
Um atacante registrando um novo nome de usuário e repositório com os nomes corretos ("YesGraph" e "Dominus" neste caso) poderia injetar seu código em qualquer pessoa que executasse o script "install.sh" da Lyft.
Infelizmente, o risco de RepoJacking é generalizado, difícil de mitigar e pode ter graves repercussões para organizações e usuários.
Os proprietários do projeto devem minimizar os recursos que buscam em repositórios externos o máximo possível.
Além disso, os proprietários devem considerar manter o controle dos repositórios de marcas antigas ou de entidades adquiridas, apenas para evitar ataques de sequestro de dependência em si e em seus usuários.
Publicidade
Em 14 de janeiro a Solyd irá revolucionar a forma como pentest e hacking deve ser ensinado. Se inscreva para ser o primeiro a saber das novidades. Saiba mais...