画像: PixaBay

広く利用されているコードホスティングプラットフォーム GitHub は、4,000 以上のコードパッケージが RepoJacking 攻撃に対して脆弱であることを明らかにした。Checkmarx の研究者によって発見されたこの脆弱性は、オープンソースコミュニティに懸念を引き起こし、GitHub に迅速な対応を促した。

RepoJacking 攻撃の説明

RepoJacking(リポジトリハイジャックの略)は、悪意のあるアクターがリポジトリを乗っ取るために使用する手法です。この攻撃手法は、GitHub のリポジトリ作成プロセスとユーザー名変更プロセスの間の競合状態を悪用します。基本的に、攻撃者は正当な作成者がユーザー名を変更した後、そのリポジトリの古いユーザー名を要求します。そして、同じ名前で悪意のあるリポジトリを公開し、悪意のあるコンテンツをダウンロードするユーザーを欺きます。

この脆弱性の影響は甚大です。Go、PHP、Swift などのプログラミング言語や GitHub Actions において、4,000 以上のコードパッケージに影響を及ぼします。これらのパッケージの多くは 1,000 以上のスターを獲得するなど、かなりの人気を得ています。数百万人のユーザーや様々なアプリケーションへの潜在的な影響はまだ完全には解明されていません。

GitHub の対応

Checkmarx は 2023 年 3 月 1 日にこの脆弱性を責任を持って GitHub に開示し、プラットフォームに対応を促しました。GitHub は RepoJacking を防ぐために「人気リポジトリ名前空間の取り消し」メカニズムを導入しました。このセキュリティ対策により、ユーザー名変更時に 100 クローンを超えるリポジトリは「取り消し」と見なされ、他者が使用できなくなります。ユーザー名とリポジトリ名の組み合わせも「取り消し」と見なされます。

しかし、このセキュリティ対策は容易に回避できることが判明しました。Checkmarx は、パッケージマネージャー内で名前が変更されたユーザー名を使用している 4,000 以上のパッケージを特定し、それらが乗っ取りのリスクにさらされていることを明らかにしました。

攻撃の仕組み

Checkmarx は RepoJacking 攻撃の手順を次のように説明しています:

  1. 被害者が「victim_user/repo」という名前空間を所有しています。
  2. 被害者が「victim_user」を「renamed_user」に変更します。
  3. 「victim_user/repo」リポジトリが取り消されます。
  4. 「attacker_user」というユーザー名を持つ攻撃者が、「repo」というリポジトリを作成すると同時に、「attacker_user」を「victim_user」に変更します。

これは、リポジトリ作成のための API リクエストと、ユーザー名変更のための名前変更リクエストの傍受によって実行されます。

永続的な脆弱性

この発見は、GitHub の「人気リポジトリ名前空間の取り消し」メカニズムに関連する持続的なリスクを示しています。人気のあるリポジトリやパッケージを管理しているユーザーを含む多くの GitHub ユーザーが、GitHub が提供する「ユーザー名変更」機能を利用しています。これにより、「人気リポジトリ名前空間の取り消し」の回避がサプライチェーン攻撃者にとって格好の標的となります。

GitHub が断固たる措置を講じる

GitHub は Checkmarx の責任ある開示を受けて、2023 年 9 月 1 日までに問題を解決しました。この脆弱性を踏まえ、攻撃対象を最小化するために、ユーザーは取り消された名前空間の使用を避けることが推奨されます。さらに、リポジトリの乗っ取りにつながる可能性のある依存関係がないことを確認するために、徹底的なコード監査が推奨されます。

Checkmarx によって発見された GitHub の脆弱性は、オープンソースプロジェクトに対する持続的な脅威を示しています。攻撃手法が進化し続ける中、ユーザーは警戒を怠らないようにする必要があります。