のうち、9,000以上のリポジトリがGitHubのユーザー名変更に脆弱で、6,000以上のリポジトリがアカウント削除に脆弱だという。

VulnCheckはこのほど、「Hijackable Go Module Repositories - Blog - VulnCheck」において、1万5,000を超えるGitHubのGoモジュールリポジトリがリポジャッキング(リポジトリのハイジャック)攻撃に脆弱な状態であることが判明したとして、注意を喚起した。これらのうち、9,000以上のリポジトリがGitHubのユーザ名変更に脆弱で、6,000以上のリポジトリがアカウント削除に脆弱だという。

  • Hijackable Go Module Repositories - Blog - VulnCheck

    Hijackable Go Module Repositories - Blog - VulnCheck

VulnCheckによると、Goモジュールは特にリポジャッキング攻撃に脆弱とのこと。PyPIやnpmなどのパッケージ管理システムではパッケージの登録にユーザーアカウントを作成する必要があるが、Goモジュールの場合はGitHubなどのバージョン管理システムにプログラムをプッシュするだけでモジュールを公開できる。このため、Goモジュールの開発者がGitHubのユーザーアカウントの名前を変更したり削除した場合、攻撃者が同じユーザー名でアカウントを取得してリポジトリのコピーを作成するだけで、モジュールを利用するユーザーを直接攻撃することが可能となる。

このようなリポジャッキング攻撃に対抗するため、GitHubには保護機能が存在する。具体的にはユーザー名の変更や削除が行われる直前の1週間に、100回を超えるcloneが行われたリポジトリのユーザー名は再利用できなくなる。この機能により、利用者が多く、リポジャッキング攻撃の標的となる可能性が高いリポジトリのユーザー名は保護され、リポジャッキング攻撃の影響を回避可能。しかしながら、Goモジュールの場合はこの機能で保護されない可能性が高いとみられている。

Goモジュールは通常、モジュールのミラー(proxy.golang.org)によってサーバ側でキャッシュされるため、Goモジュールを利用してもGitHubからモジュールを取得したりcloneしたりすることはない。このため、多くの開発者が利用するGoモジュールにおいてもclone回数が100回に満たないケースは多く存在し、GitHubの保護機能は機能しない可能性が高いとされる。

VulnCheckはリポジャッキング攻撃を軽減するには、GoまたはGitHubが対策に取り組む必要があると指摘している。これはGoモジュールの開発者にアカウントの再登録などの対策を求めても、実施してもらえない可能性が高いことがその理由とみられる。VulnCheckはGoまたはGitHubによる対策が実現するまでの間、Goモジュールを利用するユーザに対し、リポジトリの状態を確認するなどしてリポジャッキング攻撃に注意するよう呼びかけている。