GitHub の深刻な脆弱性が FIX:ユーザー名変更にともなうレポハイジャックの問題

Critical GitHub Vulnerability Exposes 4,000+ Repositories to Repojacking Attack

2023/09/12 TheHackerNews — GitHub に新たな脆弱性が発見され、何千ものリポジトリがレポジャッキング攻撃の危険にさらされている可能性があると判明した。Checkmarx のセキュリティ研究者である Elad Rapoport は、「GitHub のリポジトリ作成とユーザー名の変更操作における、競合状態を悪用できる。この脆弱性の悪用に成功した攻撃者は、Go/PHP/Swift などによる 4,000 以上のコード・パッケージや GitHub Actions を乗っ取ることが可能となり、このオープンソース・コミュニティに深刻な影響が生じる恐れがある。2023年3月1日の情報公開に続いて、2023年9月1日付けで GitHub は、この問題に対処した」と、The Hacker News と共有した技術レポートの中で述べている。


レポジャッキング (Repojacking) とは、リポジトリ・ハイジャッキング (Repository hijacking) の略である。そして、Checkmarx が指摘しているのは、ポピュラー・リポジトリ・ネームスペース・リタイアメント (Popular repository namespace retirement) と呼ばれるセキュリティ機構を迂回した脅威アクターが、最終的にリポジトリをコントロールするという問題である。

この保護措置で実施されるのは、ユーザー・アカウントの名前が変更された時点で、古いアカウント名の使用に制限がかかり、同じ名前のリポジトリとの組み合わせが禁止されることだ。言い換えると、ユーザー名とリポジトリ名の組み合わせは “リタイア” とみなされる。

つまり、この安全策が回避された場合において、脅威アクターは同じユーザー名で新しいアカウントを作成し、悪意のリポジトリをアップロードすることが可能になり、ソフトウェア・サプライチェーン攻撃にいたることになる。

Repojacking Attack

Checkmarx が解明した新たな方法は、リポジトリの作成とユーザー名の変更の間に起こりうる競合状態を悪用して、レポジャッキングを実現するものだ。具体的には、次のような手順を踏む。

  1. 被害者が名前空間 “victim_user/repo”を所有する。
  2. 被害者が “victim_user”を”renamed_user” にリネームする。
  3. “victim_user/repo”リポジトリが削除される。
  4. ユーザー名 “attacker_user “を持つ脅威行為者は、同時に “repo “という名前のリポジトリを作成し、ユーザー名 “attacker_user “を “victim_user “にリネームする。

最後のステップは、リポジトリ作成のための API リクエストと、ユーザー名変更のためのリネーム・リクエストの横取りを使って達成される。この方法は、同様のバイパスの欠陥にパッチが当てられてから、約9カ月を経て証明された。つまり、この欠陥により、GitHub がレポジャッキング攻撃への扉を開く可能性があったということだ。

Elad Rapoport は、「GitHub のリポジトリ作成とユーザー名変更操作で、この新しい脆弱性が発見されたことで、”popular repository namespace retirement “メカニズムに関連する永続的なリスクが浮かび上がってきた」と述べている。