GitHub

数百万の GitHub リポジトリは、「RepoJacking」とも呼ばれる依存関係リポジトリ ハイジャックに対して脆弱である可能性があり、攻撃者が多数のユーザーに影響を与えるサプライ チェーン攻撃を展開するのに役立つ可能性があります。

この警告は、 AquaSec のセキュリティ チーム「Nautilus」からのもので、同チームは 125 万の GitHub リポジトリのサンプルを分析し、そのうちの約 2.95% が RepoJacking に対して脆弱であることを発見しました。

この割合を GitHub のリポジトリ ベース全体の 3 億以上に当てはめると、研究者らはこの問題が約 900 万のプロジェクトに影響を与えていると推定しています。

テスト図

リポジャッキングとは

GitHub ではユーザー名とリポジトリ名の変更が頻繁に行われます。これは、組織が買収や合併を通じて新しい管理者を獲得したり、新しいブランド名に切り替えることができるためです。

これが発生すると、名前が変更されたリポジトリのコードを使用するプロジェクトの依存関係が壊れることを避けるために、リダイレクトが作成されます。ただし、誰かが古い名前を登録すると、そのリダイレクトは無効になります。

RepoJacking は、悪意のある攻撃者がユーザー名を登録し、組織が以前使用していたが、その後名前が変更されたリポジトリを作成する攻撃です。

これを行うと、攻撃されたプロジェクトの依存関係に依存するプロジェクトやコードが、攻撃者が制御するリポジトリから依存関係やコードを取得することになり、マルウェアが含まれている可能性があります。

GIF

GitHub はこの可能性を認識しており、RepoJacking 攻撃に対するいくつかの防御策を実装しました。しかし、AquaSec の報告によると、これらのソリューションはこれまでのところ不完全で、簡単に回避されています。

たとえば、GitHub は非常に人気のあるプロジェクトのみを保護しますが、それらのプロジェクトは、カバーされていない人気の低い脆弱なリポジトリからの依存関係を使用する可能性があるため、サプライ チェーンの侵害はそれらにも影響を与えます。

また、GitHubは名前変更前の週に100以上のクローンでリポジトリを保護しており、悪意のある準備があったことを示している。この保護は、名前変更または所有権の譲渡後に人気になったプロジェクトには適用されません。

悪用の可能性

この問題の重要性を強調するために、AquaSec は有名な組織をスキャンして脆弱なリポジトリを探し、Google と Lyft が管理するリポジトリで悪用可能なケースを発見しました。

Google の場合、非常に人気のあるプロジェクト「Mathsteps」の構築手順を含む Readme ファイルは、Google が 2018 年に買収して吸収し、現在は存在しない企業である Socratic に属する GitHub リポジトリを指していました。

攻撃者はそのリポジトリのクローンを作成してリダイレクトを破壊できるため、readme の指示に従ってユーザーが不正なリポジトリから悪意のあるコードをダウンロードする可能性があります。

また、指示には依存関係に対する「npm install」コマンドが含まれていたため、攻撃者のコードは、何も疑っていないユーザーのデバイス上で任意のコードを実行する可能性があります。

Google の Readme ファイルの手順
Google の Readme ファイル(AquaSec)のビルド手順

Lyft の場合、AquaSec は会社のリポジトリ上で、RepoJacking に対して脆弱な別のリポジトリから ZIP アーカイブを取得するインストール スクリプトを発見したため、攻撃はより自動化されるでしょう。

攻撃者は、新しいユーザー名とリポジトリを正しい名前 (この場合は「YesGraph」と「Dominus」) で登録すると、Lyft の「install.sh」スクリプトを実行する人にコードを挿入する可能性があります。

RepoJacking に対して脆弱な外部リポジトリを指す Lyft スクリプト
RepoJacking (AquaSec)に対して脆弱な外部リポジトリを指す Lyft スクリプト

結論

残念ながら、RepoJacking のリスクは広範囲にわたっており、軽減するのが難しく、組織やユーザーに重大な影響を与える可能性があります。

プロジェクト所有者は、外部リポジトリから取得するリソースをできる限り最小限に抑える必要があります。

さらに、所有者は、自分自身とそのユーザーに対する依存関係ハイジャック攻撃を防ぐために、古いブランドまたは買収したエンティティのリポジトリの管理を維持することを検討する必要があります。