Checkmarxは9月12日(米国時間)、「New Exploit Puts Thousands of GitHub Repositories and Millions of Users at Risk」において、GitHubのリポジトリ作成とユーザー名変更のプロセス間の競合状態を悪用する新しい脆弱性を発見したと報じた。この脆弱性はすでにGitHubに報告され、修正されている。
今回発見された脆弱性は、リポジャッキング攻撃(ユーザー名変更前のリポジトリを乗っ取る攻撃)に悪用することが可能とされる。この手法の具体的な手順は次のとおり。
- 被害者のリポジトリを「victim_user/repo」とする
- 被害者がユーザー名を変更し、「victim_user/repo」が新しいリポジトリにリダイレクトされるようになる
- 攻撃者はリポジトリ「repo」の作成とユーザー名の変更を次の画像のようにほぼ同時に行う
上記の手順で攻撃者が所有する「victim_user/repo」が作成され、cloneを所有するユーザーが被害を受けることになる。本来であれば、ユーザーアカウント名が変更された時点で100回以上cloneされたリポジトリは引退したとみなされ、他のユーザーは使用できなくなる。だが、この手法を使うと、こうした制限を回避することが可能だったことがわかったという。
Checkmarxはこの攻撃の対象領域を最小化するために、廃止した名前空間の使用を避け、リポジャッキングに脆弱なGitHubリポジトリにつながる依存関係がコードにないことを確認するよう推奨している。
また、Go言語のパッケージの一部に影響を受けやすいパッケージがあるとしてこれを検出するツール「Checkmarx/chainjacking: Find which of your direct GitHub dependencies is susceptible to RepoJacking attacks」の利用も勧めている。