
盗まれたGitHubアカウントを使い、ソフトウェアの保管場所であるリポジトリに不正な処理を送り込む攻撃が11月10日から始まりました。セキュリティ企業Aikidoの調査では、4,837アカウントが6万1764件のリポジトリにアクセス権を調べるためのプルリクエストを作成しました。攻撃は開発作業の自動化に使う秘密情報やクラウドの認証情報を狙い、収集後に実行記録を削除する仕組みでした。
書き込み権限を持つアカウントを悪用
攻撃者は、盗んだGitHubの認証情報を使い、各アカウントが書き込めるリポジトリを調べました。変更を提案するプルリクエストには「docs: dependency audit notes」という題名が使われました。「wfx-docs」というブランチから作成し、書き込み権限の有無を確かめる手口です。
Aikidoの調査では、調査用のプルリクエストのうち1万431件は、そのアカウントが所有していないリポジトリに向けられていました。これらには共同作業者や組織の権限を通じてアクセスしていました。調査時点でプルリクエストの92%は開いたままでした。
侵害されたアカウントには、米連邦政府の調達などを担う一般調達局やフランス政府、Nextcloud、WebdriverIOに属するものが含まれていました。少なくとも50アカウントは、npmやPyPIなど、ソフトウェア部品を公開する仕組みへの公開権限を持つとみられています。Aikidoは、この攻撃を「wfx-loot」と呼んでいます。
不正な処理を送り込み記録を削除
攻撃者は権限を調べた後、約1,500行のシェルスクリプトを送り込みました。方法には、既存のGitHub Actionsワークフローへの追加、新しいワークフローの作成、npmのインストール時に実行される処理への組み込みがありました。GitHub Actionsは、リポジトリ内の作業をワークフローとして自動実行する仕組みです。
新しいワークフローを使う場合、攻撃者は短期間だけ存在するブランチにファイルを追加しました。npmを使う方法では、パッケージのインストール後にスクリプトが動くよう設定しました。既存のワークフローを変更する方法も含め、同じスクリプトが使われていました。
攻撃者は変更を最大1分以内に元に戻し、ワークフローの実行履歴とログを削除していました。実行番号の欠落が痕跡として残る場合があります。Aikidoは、調査用のプルリクエストを作成したアカウントは、その後の不正な処理が動かなかった場合でも侵害されたと判断しています。
クラウドや開発ツールの認証情報を収集
スクリプトは、ワークフローが使えるシークレットと変数、GitHubの認証用トークンなどを収集対象にしていました。AWS、Azure、Google Cloudの認証情報に加え、SSHやDocker、Kubernetesなどの開発・運用ツールの認証情報も対象です。OpenAIやAnthropic、GeminiなどのAIサービスに関する認証情報も探していました。
スクリプトは環境変数や秘密鍵、コマンドの履歴、実行中のプロセスのメモリーも調べます。自前で用意した実行環境では、クラウドのインスタンス情報から得られる認証情報も対象でした。収集したデータは圧縮され、今回の設定ではHTTP POSTを使って攻撃者側の送信先へ送られました。
スクリプトには、GitHubのOIDCトークンをAWS、Azure、Google Cloudの一時的なクラウド接続に交換する機能もあります。OIDCは、保存済みの秘密情報を使わずに外部サービスへ認証するために利用できる仕組みです。AWSでは権限がある場合に長期間有効なアクセスキーを作り、Google Cloudではサービスアカウントになりすます機能も備えていました。
公開パッケージにも不正な処理が混入
自動公開を通じ、Packagistの「digitalelvis/neuronai-studio」バージョン3.14.3にも不正な処理が入りました。Packagistはソフトウェア部品の公開先です。
Go言語のモジュール「github.com/onuragtas/docker-env」では、v1.0.278とv1.0.280に不正な処理が混入しました。これらでは不正な処理はGitHub Actionsのワークフローファイルに含まれています。Goのソースコードとリリース済みバイナリーは変更されていませんでした。
Aikidoは、攻撃者の主な狙いは継続的インテグレーション(CI)の秘密情報を盗むことだったとみています。CIは、ソフトウェアの変更に伴う作業を自動化する仕組みです。パッケージへの混入は、自動公開によって生じたものと評価しています。
認証情報の更新後も残り得るアクセス
スクリプトには、AWSのロールの信頼ポリシーを変更し、任意のAWSアカウントから利用できる状態にする機能があります。また、侵害されたリポジトリにひも付く連携認証情報をAzureのアプリケーションに追加する機能も備えています。こうした設定は、認証情報を更新した後もアクセスを残す目的で使われます。
実行履歴とログは通常削除されていました。不審なコミット直後の実行番号の欠落は、不正な処理が動いたかを調べる際の手掛かりになります。










