JFrogは9月4日(米国時間)、「Revival Hijack - PyPI hijack technique exploited in the wild, puts 22K packages at risk|JFrog」において、正常な手続きにより削除されたPyPI(Python Package Index:Python のパッケージを公開するためのリポジトリ)プロジェクトを再登録するリバイバルハイジャック(Revival Hijack)に注意を喚起した。22,000件以上の削除済みパッケージに乗っ取りの可能性があると指摘している。

  • Revival Hijack - PyPI hijack technique exploited in the wild、puts 22K packages at risk|JFrog

    Revival Hijack - PyPI hijack technique exploited in the wild, puts 22K packages at risk|JFrog

リバイバルハイジャックの概要

リバイバルハイジャックはプロジェクトの削除後に、攻撃者が同じ名前でプロジェクトを再登録する攻撃手法。プロジェクトから配布されていたパッケージの利用者は、所有者が切り替わったことを認識できず、悪意のあるパッケージにアップデートする可能性がある。

  • リバイバルハイジャックの攻撃手順 - 引用:JFrog

    リバイバルハイジャックの攻撃手順 引用:JFrog

オンライン上にはさまざまなプロジェクト管理プラットフォームが存在するが、削除したプロジェクト名の取り扱いに統一性はなく、再登録に制限を設けているプラットフォームも存在する。PyPIではプロジェクトがブラックリストに載っていなければ、削除した直後に再登録が可能なため、リバイバルハイジャック可能とされる。

また、PyPIパッケージの管理に使用される「pip」コマンドは、管理者が切り替わったことを認識せず、再登録されたプロジェクトのパッケージを「新しいバージョン」として認識する。そのため、プロジェクトを検査せずに「pip install --upgrade」コマンドを使用するユーザーは被害に遭う可能性がある。

影響と対策

JFrogの調査によると、削除されたPyPIパッケージの単純な総数は約12万件とされる。これらのうち、ダウンロード数が10万回を超えるか、または6カ月以上アクティブだった正常なパッケージは2万2,000件以上とされる。

これらパッケージは潜在的にリバイバルハイジャックの可能性がある。JFrogは攻撃を防止するため「security_holding」という名前のアカウントを作成し、削除されたパッケージの一部を安全にハイジャックしたという。そのため、現在は保護対象のパッケージをハイジャックして攻撃することはできない。

なお、上記の策を講じてから3カ月後に影響を調査したところ、ハイジャックしたパッケージ(アップデートを避けるためバージョンは0.0.0.1)のダウンロード数が約20万回に達したという。これはパッケージを自動的にダウンロードする何かしらの処理が動作しているか、または誤ってダウンロードしたものと推測されている。

JFrogはリバイバルハイジャックを防止するため、PyPIに対しプロジェクト(パッケージ)名の再登録を完全に禁止する厳格なポリシーを採用するように求めている。また、PyPIの利用者にはパッケージのアップデート前に、プロジェクトの管理者に変更がないかどうか、毎回確認することを推奨している。