Apesar dos esforços do GitHub para evitar o sequestro de repositórios, os pesquisadores de segurança cibernética continuam encontrando novos métodos de ataque, e milhares de pacotes de código e milhões de usuários podem estar em risco.
Repojacking é um método de sequestro de repositório que envolve nomes de usuários renomeados do GitHub. Se um usuário renomear sua conta, seu nome de usuário antigo poderá ser registrado por outra pessoa, incluindo agentes mal-intencionados, e potencialmente abusado em ataques à cadeia de suprimentos.
Os atores da ameaça podem registrar um nome de usuário antigo e criar repositórios que foram previamente associados ao nome de usuário antigo, o que pode permitir que eles direcionem o tráfego destinado ao repositório legítimo para seu repositório malicioso.
Para evitar tais ataques, o GitHub implementou um mecanismo de proteção de namespace desativado e alertou os usuários sobre os riscos potenciais associados à alteração de nomes de usuário.
O namespace é a combinação entre o nome de usuário e um nome de repositório específico — por exemplo, github.com/nome de usuário/repo_name. Se um usuário alterar o nome de usuário, o novo proprietário do nome de usuário antigo não poderá criar um repositório chamado ‘repo_name’ se o repositório tiver sido clonado anteriormente 100 vezes. Isso significa que o GitHub retirou o namespace.
O problema é que os pesquisadores continuam encontrando maneiras de ignorar o mecanismo de retirada de namespace do GitHub e realizar repojacking.
O método de ataque divulgado mais recentemente foi descoberto por pesquisadores da empresa de segurança cibernética Checkmarx em março e foi recentemente corrigido pelo GitHub.
Esse novo método aproveitou uma condição de corrida, com uma solicitação de API sendo usada para criar quase simultaneamente um novo repositório e alterar o nome de usuário da conta.
Se o invasor renomear sua conta para o nome de usuário alvo e posteriormente tentar criar um repositório que resultaria na criação de um namespace retirado, sua tentativa seria bloqueada.
No entanto – antes do GitHub lançar uma correção – se a renomeação da conta e a criação do repositório fossem feitas ao mesmo tempo, a tentativa seria bem-sucedida, permitindo ao invasor obter um namespace que permitiria redirecionar o tráfego para seu repositório malicioso.
A análise da Checkmarx mostrou que cerca de 4.000 pacotes de código em Go, PHP, Swift, bem como GitHub Actions foram afetados, incluindo centenas de pacotes com mais de 1.000 estrelas.
“Envenenar uma ação popular do GitHub pode levar a grandes ataques à cadeia de suprimentos com repercussões significativas”, alertou Checkmarx.
O problema é que esses pacotes continuarão vulneráveis ao repojacking se um novo método de bypass for descoberto no futuro.
“A descoberta desta nova vulnerabilidade nas operações de criação de repositório e renomeação de nome de usuário do GitHub sublinha os riscos persistentes associados ao mecanismo de ‘retirada do namespace de repositório popular’”, disse Checkmarx em um post no blog.
Ele acrescentou: “Muitos usuários do GitHub, incluindo usuários que controlam repositórios e pacotes populares, optam por usar o recurso ‘Renomear usuário’ que o GitHub oferece. Por esse motivo, a tentativa de contornar a ‘retirada do namespace do repositório popular’ continua sendo um ponto de ataque atraente para invasores da cadeia de suprimentos com potencial para causar danos substanciais.”
A empresa de segurança lançou uma ferramenta de código aberto chamada ChainJacking que pode ser usado para identificar pacotes vulneráveis.