close search bar

Sorry, not available in this language yet

close language selection

[CyRC脆弱性解析]ソフトウェアサプライチェーンにおけるリポジトリジャック

Synopsys Editorial Team

Aug 08, 2022 / 1 min read

いままで、オープンソース・リポジトリに対する脅威がますます蔓延しつつあるのは、リポジトリハイジャック (略してリポジャッキング) の増加によって明らかです。

リポジャッキングについて

リポジャッキングは意図的に、オーナーやメンテナのアカウントでホストされているリポジトリを、悪意ある攻撃者が強制的に奪うものです。攻撃者に対して、アカウントへのアクセスを許諾し、悪意あるコードをプロジェクトに実装するか、プロジェクトが依存するようにします。

この手のサプライチェーン攻撃は、通常、GitHub などのホスティングプラットフォームでの再登録検証の有無を悪用する 2 つの方法のいずれかによって実行されます。

  • 名前の変更:ホスティングプラットフォームのユーザーがユーザー名を変更すると、攻撃者が元のユーザー名でリポジトリを再登録できる可能性があり、リポジトリを再作成できますが、元のリポジトリ URL は、攻撃対象のユーザーのパッケージによって依存関係として使用され、更新の度に継続してアクセスされる可能性があります。
  • アカウントの削除:名前の変更と同様に、攻撃者は削除されたアカウントを再登録し、リポジトリを再作成できます。 この方法では、プロジェクトが URL を介してリポジトリを取得しようとするとエラーが発生する可能性が高くなります。これはリンクが壊れるためで、リポジトリを取得しようとするプロジェクトの削除と更新の間に、削除されたユーザー名を再登録することで正常に回避できてしまうためです。

どちらの場合も、攻撃者は効果的かつ完全にリポジトリを制御できるようになり、さまざまな特権に基づく操作を実行できるようになります。 これらには、他の悪意のあるユーザーまたは自分で作成したアカウントを管理者/メンテナとして任命することが含まれる場合があり、これを使用して、リポジトリへのプッシュおよびプルリクエストを承認することができます。 このようにして、悪意のあるコードや不要なコードがプロジェクトの新しいバージョンに強制される可能性があります。 逆に、バージョンと機能コードをリポジトリから削除したり、意図的にコミットを壊したりして、既存の機能の妨害や破損を許してしまう可能性があります。

セキュリティへの悪影響

リポジトリハイジャック攻撃が成功すると、特に影響を受けるパッケージが依存関係として使用されている場合に、パッケージまたは製品のユーザーに深刻なセキュリティ上の影響を与える可能性があります。 これは多くの場合、既存のバージョンの再リリースまたは新しいバージョンのリリースにより、悪意のあるコードの無制限のアップロードを可能にする攻撃の性質によるものです。 これらは、影響を受けるパッケージの新しいバージョンに自動的にバンプするか、手動で設定された最近リリースされたバージョンを使用する外部プロジェクトに悪意のあるコードを直接供給するために使用されます。

攻撃は数日から数週間も検出されない可能性があり、通常、用心深い研究者、タカ目のユーザー、またはハイジャックされたことに気付いた元の所有者 (UAParser.js の場合など) によってのみ開示されます。 通常、この問題に対処する責任はホスティングプラットフォームにあり、悪意のあるパッケージバージョンを削除するか、侵害されたアカウントを一時停止することで、悪意のあるパッケージバージョンを軽減するための措置を講じることができます。

これらの攻撃は、悪用可能性という点では比較的単純ですが、特に頻繁に更新されるプロジェクトなど、人気のあるプロジェクトオーナーのアカウントには通常見られない条件に大きく依存しています。このような場合、攻撃者は、フィッシングまたはより正確な「ホエーリング」手法を使用してアクティブなアカウント所有者を標的にし、アカウントへのアクセスを試みます。
または、何らかの形のクロスサイト・スクリプティング攻撃でアクションを実行するように強制しますが、多くのブラウザーやサイトにはこれに対する組み込みの保護機能があります。

リポジャッキングの実例

CTX

リポジトリのハイジャックの最近の例は、2022 年 5 月に Python パッケージ CTX の形で発生し、人気のある Python パッケージ ホスティング サイト PyPI でそのリポジトリがハイジャックされました。 この場合、所有者アカウントの元のドメイン・ホスティング・メールの有効期限が切れており、第三者によるパスワードのリセットとドメインの再登録にさらされています。 アカウントの有効期限が切れてからハイジャックの試みが成功するまでにどれくらいの時間が経過したかは不明ですが、ハイジャックが開始されてから、攻撃者がパッケージの悪意のあるバージョンのアップロードを開始し、元のバージョンを置き換えるのにわずか 40 分しかかかりませんでした。

この乗っ取りは 10 日間発見されず、悪意のあるバージョンの CTX が 27,000 回以上ダウンロードされました。

悪意のあるコードについては、ctx.py ファイルにコードのセクションが追加され、ユーザーの環境変数を盗み出し、データを外部エンドポイント (この場合はホストされた Heroku サーバー) に送信しました。 盗み出されたデータには、API キーやパスワードなどの機密ユーザー情報が含まれている可能性があり、これらは環境変数として保存され、簡単にアクセスできるようになっていました。

PyPI 管理者は、ハイジャックされたアカウントを一時停止し、CTX の悪意のあるバージョンとオリジナルのバージョンをすべて削除しましたが、この記事の執筆時点では復元されていません。

この脆弱性は、Black Duck® Security Advisory BDSA-2022-1523 でカバーされています。
 

PhPass

同様に、Packagist PHPホスティングプラットフォームと GitHub でホストされている PHP パッケージ PhPass も、2022 年 5 月に同じ方法で悪用されました。元の所有者のアカウントが削除され、悪意のある人物によって再登録され、元のリポジトリへのアクセスが許可されました。 このアクセスを使用して、元のパッケージバージョンが悪意のあるバージョンに置き換えられました。

これらの代替バージョンに含まれる悪意のあるコードは、CTX の乗っ取りと同じアクションを実行し、まったく同じエンドポイントに環境変数を抽出しました。

この問題の解決策として、元の無害なバージョンを含むフォークされたリポジトリが作成されました。 悪意のあるリポのバージョンがそれ以上ダウンロードされないようにするために、Packagist は元のダウンロード URL を新しいフォークに再ルーティングしました。

この脆弱性は、Black Duck Security Advisory BDSA-2022-1526 でカバーされています。
 

UAParser.js

2021 年 10 月には、作成者の npm アカウントが乗っ取られ、人気のある JavaScript ライブラリ UAParser.js が武器化され、さらに極端なレポジトリハイジャックが発生しました。攻撃者は、0.7.29、0.8.0、および 1.0.0 の 3 つの悪意のあるバージョンを公開しました。パッケージは毎週 800 万から 900 万回ダウンロードされ、プロジェクト全体で広く使用されているため、これはすぐに大規模な攻撃になりました。

これらの悪意のあるバージョンで導入されたコードは、特に有害な影響を及ぼしました。特に、インストール時に、コードはリモートサーバーからバイナリをダウンロードして実行します。そのようなバイナリの 1 つが暗号通貨マイニングソフトウェアで、リモートの攻撃者が被害者のシステムを制御できることを示しています。 Windows システムにのみ導入された別のバイナリは、システムから機密情報を盗み出すトロイの木馬でした。

UAParser.js 攻撃の数時間後、パッケージの作成者は侵害されたバージョンを npm から削除し、3 つの新しいバージョン (0.7.30、0.8.1、および 1.0.1) をリリースして、悪意のあるバージョンが保持されないように自動的に計画されたアップグレードを緩和しました。

この脆弱性は、Black Duck Security Advisory BDSA-2021-3228 でカバーされています。

リポジャッキングから組織を守る方法

サプライチェーン攻撃が増加しているため、リポジャッキングのケースも増加しています。これは、サプライチェーン攻撃の最初のステップであることが多いためです。リポジトリの乗っ取りは簡単なプロセスですが、深刻で有害な影響をもたらす可能性があります。この種の攻撃の増加に対処するための軽減策が現在利用可能であり、パイプラインにあります。

一般に 2 要素認証 (2FA) として実装される多要素認証は、アカウントへのアクセスに 2 番目のセキュリティレイヤーを提供します。理論的には、悪意のある人物が期限切れまたは削除されたアカウントにアクセスするのを防ぐ必要があります。最大のホストの 1 つである GitHub は、2023 年以降、すべてのメンテナーアカウントで 2FA が必須になると発表しました。これは、2FA の採用が大幅に増加したことを示しており、現在、アクティブな GitHub ユーザーの 16.5% のみが 2FA を使用しています。一方、人気のある JavaScript パッケージマネージャーである npm は、2FA を実施しておらず、2FA を実施する意向も発表していません。それも、上位 35 の npm パッケージの 32% が 2FA の欠如によりアカウント乗っ取りのリスクにさらされているにもかかわらずです。

ドメインの乗っ取りは、悪意のある人物がメールの期限切れのドメインを再登録し、そのドメインを使用してパスワードのリセットを要求する場合など、リポジトリのハイジャックにおけるサプライチェーンの一般的な部分です。リポジトリ・ホスティング・プラットフォームは、有効期限が近づいているドメインや有効期限が切れているドメインを持つアカウントを先制的に削除または一時停止することで、これを防ぐことができます。チェーン内のリンクを切断することは、侵害される可能性のあるアカウントへのアクセスをブロックするための重要なステップです。ただし、これには、ホスティングプラットフォームのメンテナンスと監視の責任が大きくなります。

今後数年から数か月にわたって、オープンソース・プロジェクトは拡大と量の増加を続け、依存関係がさらに強まり、ハイジャックに対して脆弱になるでしょう。この拡張と並行して、より多くの所有者と作成者のアカウントが非アクティブになり、削除されるため、悪意のある人物がリポジトリをハイジャックする機会がさらに開かれます。

これらの脆弱性の多くを防止するための軽減策は可能ですが、現在の業界の状況では、MFA などの防止技術にオプトインしているユーザーの数は限られています。リポジトリの所有者が 2FA の採用に消極的であることが、リポジトリのハイジャックの影響を軽減する取り組みを妨げている可能性があるため、2FA などの方法を強制的に実施することが今後の道筋となる可能性があります。

Synopsys Black Duck セキュリティアドバイザリがどのように役立つか?

Black Duck セキュリティアドバイザリ (BDSA) は、Black Duck のお客様に、脆弱性が公開された際に詳細な情報を提供し、脆弱なコードの概要と使用済みパッケージの軽減策を示す警告を伴います。 お客様は BDSA を使用して新しい脆弱性を迅速に軽減し、リポジャッキングなどのパッケージ内の悪意のある開発について通知を受けることができます。 ハイジャックされたパッケージの BDSA には、脆弱なバージョン、重要な情報、フォークされたリポジトリなどの新しい開発が詳述されています。

Continue Reading

トピックを探索する