GitHub, a plataforma de hospedagem de código amplamente utilizada, revelou que mais de 4.000 pacotes de código estão vulneráveis a ataques de RepoJacking. Essa falha, descoberta pelos pesquisadores da Checkmarx, gerou preocupações na comunidade de código aberto e levou o GitHub a agir rapidamente.
O ataque RepoJacking explicado
RepoJacking, abreviação de sequestro de repositório (repository hijacking), é uma técnica usada por agentes maliciosos para assumir o controle de um repositório. Esse método de ataque consiste em explorar uma condição de corrida entre os processos de criação de repositório e alteração de nome de usuário do GitHub. Essencialmente, os atacantes reivindicam o nome de usuário antigo de um repositório depois que o criador legítimo alterou seu nome de usuário. Em seguida, eles publicam um repositório malicioso com o mesmo nome, enganando os usuários que baixam conteúdo malicioso.
As consequências dessa vulnerabilidade são consideráveis. Ela afeta mais de 4.000 pacotes de código em linguagens de programação como Go, PHP e Swift, bem como as GitHub Actions. Muitos desses pacotes ganharam popularidade significativa, com mais de 1.000 estrelas. Ainda não descobrimos o impacto potencial em milhões de usuários e diversas aplicações.
A resposta do GitHub
A Checkmarx divulgou de forma responsável essa vulnerabilidade ao GitHub em 1º de março de 2023, o que levou a plataforma a agir. O GitHub introduziu o mecanismo de 'retirada de namespaces de repositórios populares' para prevenir o RepoJacking. Com essa medida de segurança, os repositórios com mais de 100 clones no momento de uma alteração de nome de usuário são considerados 'retirados' e não podem ser usados por outros. A combinação do nome de usuário e do nome do repositório também é considerada 'retirada'.
No entanto, descobriu-se que a medida de segurança era facilmente contornada. A Checkmarx identificou mais de 4.000 pacotes em gerenciadores de pacotes que usavam nomes de usuário renomeados, expondo-os a risco de sequestro.
Como o ataque funciona
A Checkmarx descreveu as etapas envolvidas no ataque RepoJacking:
- A vítima possui o namespace «victim_user/repo».
- A vítima renomeia «victim_user» para «renamed_user».
- O repositório «victim_user/repo» se torna retirado.
- Um atacante com o nome de usuário «attacker_user» cria simultaneamente um repositório chamado «repo» e renomeia o nome de usuário «attacker_user» para «victim_user».
Isso é realizado por meio de uma requisição de API para criação de repositório e uma interceptação de requisição de renomeação para a alteração de nome de usuário.
Vulnerabilidades persistentes
Essa descoberta mostra os riscos persistentes associados ao mecanismo de 'retirada de namespaces de repositórios populares' do GitHub. Muitos usuários do GitHub, incluindo aqueles que controlam repositórios e pacotes populares, optam por usar o recurso 'Renomear usuário' oferecido pelo GitHub. Isso torna o contorno da 'retirada de namespaces de repositórios populares' um alvo atraente para atacantes da cadeia de suprimentos.
O GitHub toma medidas decisivas
O GitHub resolveu o problema a partir de 1º de setembro de 2023, após a divulgação responsável da Checkmarx. À luz dessa vulnerabilidade, é aconselhável que os usuários evitem usar namespaces retirados para minimizar a superfície de ataque. Além disso, auditorias de código aprofundadas são recomendadas para garantir que não haja dependências que possam levar ao sequestro de repositórios.
A vulnerabilidade do GitHub descoberta pela Checkmarx mostra as ameaças persistentes para projetos de código aberto. Os usuários devem permanecer vigilantes, pois os métodos de ataque continuam a evoluir.

