Packagist

1 人の研究者が 10 を超える Packagist パッケージをハイジャックしました。一部のパッケージは、生涯にわたって何億回もインストールされています。

研究者は、これらのパッケージをハイジャックすることで仕事を得たいと述べました。そして、彼はこれがうまくいくとかなり自信を持っているようです.

少なくとも 14 個の Packagist パッケージがハイジャックされました

昨日、「neskafe3v1」というペンネームを持つ研究者が、Packagist の 14 個のパッケージを乗っ取り、そのうちの 1 つが 5 億回以上インストールされたと述べました。

Packagist は、依存関係管理ツールである Composer を介してインストール可能な PHP パッケージのプライマリ レジストリです。ただし、Packagist はこれらのパッケージをホストするというよりも、GitHub に公開されたオープン ソース パッケージを集約するメタデータ ディレクトリとして機能します。これらのパッケージは、開発者がcomposer installコマンドを実行して自分のマシンにインストールできます。

ハイジャックされたパッケージの名前は次のとおりです。

パッケージ名 総インストール数
acmephp/acmephp 124,860
acmephp/コア 419,258
acmephp/ssl 531,692
doctrine/doctrine-cache-bundle 73,490,057
教義/教義モジュール 5,516,721
doctrine/doctrine-mongo-odm-module 516,441
composer require doctrine/doctrine-orm-module 5,103,306
教義/インスタンス化者 526,809,061
グロースブック/グロースブック 97,568
jdorn/ファイル システム キャッシュ 32,660
jdorn/sql フォーマッター 94,593,846
khanamiryan/qrcode-detector-decoder 20,421,500
オブジェクト-体操/phpcs-体操-ルール 2,196,380
tga/simhash-php (別名 tgalopin/simhashphp) 30,555

研究者は、5 月 1 日月曜日に、これらのパッケージの Packagist ページが、各パッケージの正規の GitHub リポジトリではなく、研究者の (偽の) リポジトリを指すように変更されたことを示す証拠を提供しました。

例として、月曜日にacmephpパッケージの Packagist ページがどのように表示されたかを示します。その GitHub リンクは、本物のgithub.com/acmephp/acmephpではなく、研究者のリポジトリに変更されています。

acmephp のハイジャックされた Packagist ページ
acmephp」パッケージのハイジャックされた Packagist ページ()

これらの変更は、によってチェックされたように、Packagist チームによって元に戻されました。

Packagist での公開プロセスは、npm や PyPI などのオープン ソース リポジトリでの公開プロセスとは少し異なります。開発者がバイナリやソフトウェア リリースを Packagist.org に直接アップロードするのとは対照的に、単に Packagist.org アカウントを作成し、特定のパッケージの GitHub リポジトリへのリンクを「送信」します。次に、Packagist のクローラーが提供されたリポジトリにアクセスし、すべてのデータを集約して、そのパッケージの Packagist ページに表示します。

開発者が ‘install’ または ‘update’ コマンドを使用して Composer を実行すると、Composer インスタンスは最初にローカルでパッケージの存在を探しますが、失敗すると、デフォルトで Packagist でこのパッケージを検索し、そのパッケージにリストされている GitHub URL を取得します。 .パッケージのコンテンツは、パッケージの Packagist ページにリストされているこの GitHub リポジトリからダウンロードされます。

これは、npm や PyPI の仕組みとはまったく対照的です。つまり、これらのレジストリは、サーバーから直接ソフトウェア リリースをホストおよび配布します。

これらの各パッケージの Packagist ページを変更することで、研究者は Composer 環境内で使用されるインストール ワークフローを効果的にハイジャックしました。開発者は、プロジェクトのリポジトリではなく、 neskafe3v1の GitHub リポジトリからパッケージのコンテンツを取得するようになりました。

デモンストレーションを最小限に抑えるために、研究者は単にこれらのパッケージ内の composer.json ファイル (アプリケーション マニフェストに似たもの) を次のように変更しました。

「neskafe3v1 によって Pwned…. アプリケーション セキュリティ、ペネトレーション テスター、サイバー セキュリティ スペシャリストとしての仕事を探しています。」

研究者が Packagist パッケージのマニフェスト ファイルを変更する
研究者は composer.json ファイルを変更して、ハッキングを実証しました()

彼は、元のプロジェクト リポジトリをフォークし、composer.json 内の「説明」フィールドを変更し、フォークしたリポジトリに変更をコミットすることで、これを行いました。彼は変更を元のリポジトリにマージしませんでした (そうすると、追加のアクセスが必要になり、メンテナーの精査が必要になる可能性がありました)。

代わりに、研究者はどうやらメンテナーの Packagist アカウントへのアクセス権を取得し、GitHub の URL をリストされた packag に変更し、フォークされたリポジトリの URL に変更したようです。しかし、彼は へのハイジャックに使用された正確な方法を明らかにしませんでした。

研究者がこれらのパッケージをハイジャックするために使用した正確な手法を明らかにするよう求められたとき、これはゼロデイではなく、既知の手法であると言われました。しかし、これが、たとえば資格情報の侵害、 期限切れのドメインによるメンテナーの電子メールアドレスの乗っ取り、またはさらに別の手法によって行われたかどうかはわかりませんでした。

「ご覧のとおり、仕事を探しています(「Ищу работу на позиции…」というメッセージは「仕事を探しています…」という意味です)。ある会社に雇われた」と研究者は語り、ハイジャックキャンペーン全体を「従業員としての自分の宣伝」になぞらえた.

「成功するまでは、話すことは何もありません。」

資格情報の侵害によるハイジャック

への声明の中で、Packagist チームは、このアクションの結果として、これまでプラットフォームで悪意のある影響は観察されなかったと述べましたが、乗っ取りが実際にメンテナー アカウントの資格情報の侵害に起因することを確認しました。

「私たちの知る限り、これが悪意のある目的で使用されたことはなく、パスワードが安全ではなく、2 要素認証が行われていないいくつかの古いアカウントに限定されていました」と、Composer の最初の開発者の 1 人でもある Packagist.org の Nils Aderman 氏は語っています。

「4つのアカウントはすべて、他のプラットフォームでの以前の事件で漏洩した共有パスワードを使用していたようです. パスワードを再利用しないでください」と Packagist 管理者に警告します。

「5 月 2 日午前 7 時 21 分(UTC)、Juha Suni から URL が複数の Doctrine パッケージに変更されたことを通知されました」と、管理者は本日公開されたブログ投稿で詳しく説明しています。

Ocramius こと Marco Pivetta と協力して、Packagist の管理者は、アクセスされたすべてのアカウントを迅速に特定し、それらへのアクセスを無効にし、GitHub URL を以前の値に復元しました。復旧作業は火曜日の朝までに完了しました。

研究者はさらに、この手法を悪用してマルウェアを配布したことはないと述べたが、同時に、Packagist の管理者にもパッケージの所有者にもこの小さな実験について通知していないと述べた。この研究。

「私がした唯一のことは、 composer.jsonファイルの ‘description’ フィールドを変更したことです」と研究者は言い、Git コミットなどの証拠を示しました。

「リンクをgithub.com/acmephp/core (元の) から …私のフォークに変更しました。マルウェアはありません。元のファイルを私のものと比較できます。攻撃について誰にも通知していません。 Packagist の管理者でも、パッケージの所有者でもありません。」

ブログの投稿で、Packagist の管理者は、研究者がバグや脆弱性を責任ある方法で報告するように要求しています。

「あなたがセキュリティ研究者であり、Packagist.org の脆弱性を知っているか、Packagist.org で研究を行いたい場合は、ユーザーへの悪影響を避けるためにテストを調整し、 責任を持ってこれらの脆弱性を開示してください。」

「security@packagist.org までご連絡いただければ、すべてのリクエストやレポートに迅速に対応いたします。もちろん、クレジットを提供し、報告された脆弱性の詳細を公開しています…」