A new Repojacking attack exposed over 4,000 GitHub repositories to hack

Pierluigi Paganini September 12, 2023

A critical vulnerability in GitHub could have exposed more than 4,000 code packages to Repojacking attack.

Checkmarx researchers discovered a new vulnerability in GitHub could have exposed over 4,000 packages to repojacking attacks.

In the RepoJacking attack, attackers claim the old username of a repository after the legitimate creator changed the username, then publish a rogue repository with the same name to trick users into downloading its content

Checkmarx discovered than an attacker can exploit a race condition between the processes of creating a repository and renaming a username on GitHub.

“Successful exploitation of this vulnerability impacts the open-source community by enabling the hijacking of over 4,000 code packages in languages such as Go, PHP, and Swift, as well as GitHub actions. Notably, hundreds of these packages have garnered over 1,000 stars, amplifying the potential impact on millions of users and a myriad of applications.” reads the post published Checkmarx.

The researchers have responsibly disclosed the vulnerability to GitHub on March 1, 2023.

RepoJacking attack

The “popular repository namespace retirement” mechanism was introduced by Github to prevent RepoJacking. According to the security measure, any repository with more than 100 clones at the time its user account is renamed is considered “retired” and cannot be used by others.  

The combination of the username and the repository name is considered “retired.”

Unfortunately, this security measure can be easily circumvented. The researchers have identified over 4,000 packages in those package managers using renamed usernames that are at risk of hijacking.

Below is the attack technique devised by Checkmarx:

  • Victim owns the namespace “victim_user/repo”
  • Victim renames “victim_user” to “renamed_user.”
  • The “victim_user/repo” repository is now retired.
  • An attacker who owned the username “attacker_user” prepares a command which practically simultaneously creates a repo called “repo” and renames the username “attacker_user” to the victims also username, “victim_user”. This is done using an API request for repository creation and a renamed request interception for the username change.

The researchers pointed out that this is the fourth time that an alternate method has been identified for performing Repojacking.

The researchers recommend to avoid using retired namespaces to minimize the attack surface and ensuring that there are no dependencies in your code that lead to the hijacking of the repository.

“The discovery of this novel vulnerability in GitHub’s repository creation and username renaming operations underlines the persistent risks associated with the “Popular repository namespace retirement” mechanism.” concludes the report. “Many GitHub users, including users that control popular repositories and packages, choose to use the “User rename” feature GitHub offers. For that reason, the attempt to bypass the “Popular repository namespace retirement” remains an attractive attack point for supply chain attackers with the potential to cause substantial damages.”

Follow me on Twitter: @securityaffairs and Facebook and Mastodon

Pierluigi Paganini

(SecurityAffairs – hacking, Repojacking attack)

you might also like

leave a comment