ハッカーが盗まれたGitHubアカウント4,837件を悪用、61,764件のリポジトリを標的に

ハッカーは「wfx-loot」キャンペーンで、侵害した4,837件のGitHubアカウントを使ってリポジトリを狙い、開発者の認証情報やクラウドキー、トークンを盗み出しました。

ハッカーは、侵害した数千件のGitHubアカウントを悪用し、認証情報を窃取するコードを公開リポジトリに仕掛けています。研究者は、少なくとも1,835件のリポジトリでマルウェアが実行され、シークレットが盗まれたことを確認しました。

Aikido  Securityはこのキャンペーンをwfx-lootと名付けました。当初の調査では、侵害された4,837件のアカウントが、61,764件のリポジトリに探査用のプルリクエストを送っていたことが判明しています。その後の調査では、活動が続いていることや、マルウェアが変化していること、さらにFly.io上にデプロイされたアプリケーション経由で一部のGitHubトークンが露出していたことが明らかになりました。

標的となったリポジトリの数は、すべてのリポジトリでマルウェアが実行されたことを意味しません。多くは探査用のプルリクエストを受けただけで、実際に実行されるかどうかは、盗まれたアカウントの権限とリポジトリの設定次第でした。

日常的な作業を装ったプルリクエストで、盗んだアクセス権を検証

Aikidoの研究者Oliver Smith氏によると、このキャンペーンは11月10日に始まりました。攻撃者はwfx-docsという名前のブランチから、docs: dependency audit notesというタイトルのプルリクエストを送り、盗んだ認証情報でリポジトリに書き込めるかどうかを試していました。

この探査用プルリクエスト自体には、認証情報窃取コードは含まれていません。アクセスが可能だった場合、攻撃者は続けて、定期メンテナンスを装った悪意あるコミットを送り込みました。

Aikidoは当初、配布手法として3種類を確認しています。既存のGitHub Actionsワークフローの改変、npmのインストールフック、一時ブランチ上の新規ワークフローです。

その後、StepSecurityが別の手法を報告しました。自動化されたワークフローがすでに実行しているシェルスクリプトにペイロードを埋め込む手法で、この場合はワークフローファイル自体が変更されないこともあります。

実行されると、約1,500行のシェルスクリプトが、GitHubシークレット、ワークフロートークン、クラウドの認証情報、SSH鍵とGPG鍵、環境ファイル、Kubernetes設定、開発ツールの認証情報を探索します。OpenAI、Anthropic、Google Geminiといった、AIサービス関連の認証情報も標的です。

LearnAI Tools

攻撃者はその後、変更内容を元に戻し、ワークフローの実行履歴とログを削除します。1分以内に完了することもあります。

Fly.io、一部のGitHubトークンの露出を確認

Fly.ioは11月12日のセキュリティ通知で、第三者が同社のGitHub Appに発行されたトークンを使い、顧客のリポジトリに不正にアクセスしたことを認めました。

同社のデプロイ処理では、ビルドディレクトリの.git/configファイルにGitHubアクセストークンが残っていました。一部のアプリケーションはそのディレクトリをデプロイ用イメージに含めたまま公開しており、攻撃者がこのファイルを取得できる状態でした。

Fly.ioは、少数のアカウントで悪用があったことを確認しています。同社はGitHub Appに発行したすべてのユーザートークンの失効手続きを開始し、影響を受けた顧客に通知しました。また、露出が再発しないようデプロイ処理も変更しています。

同社は、自社のシステムが侵害されたわけではないと説明しています。flyctlを使ったデプロイとFly.ioのAPIトークンに影響はありませんでした。

この開示により、wfxの活動で使われた認証情報の一部がどのように入手されたのかは説明できます。ただし、キャンペーン全体で侵害されたすべてのアカウントの入手経路が明らかになったわけではありません。

新たなペイロードはTelegramで盗んだデータを送信

最初に確認されたサンプルは、盗んだ情報を外部の収集サーバーに送信していました。一方、StepSecurityは、11月12日の協定世界時(UTC)午前5時30分ごろから、Telegramのみを使う新しいサンプルを観測しています。このため、当初公表された収集サーバーのIPアドレスをブロックしても、新しい亜種は止められません。

StepSecurityはさらに、nextcloud/dockerとwebdriverio/webdriverioで悪意あるコミットを確認しました。このうちNextcloudでは、ワークフロー内で実行されたことも確認されています。ただし、WebdriverIOのパッケージリリースに影響はなかったとしています。

これらは特定のリポジトリで活動があったことを示すものであり、各組織が運用するすべてのシステムが侵害されたことを意味するものではありません。

リポジトリへのアクセスがクラウドへの侵入につながる恐れ

このペイロードは、盗んだ認証情報とGitHubのOpenID Connect認証を使い、連携先のクラウドサービスへのアクセス取得も試みます。

利用できる権限や信頼設定によっては、クラウドセッションの要求、AWSアクセスキーの作成、AWSロールの信頼ポリシーの変更、AzureアプリケーションへのフェデレーテッドID資格情報の追加が可能です。Google Cloudのサービスアカウント、Kubernetes、HashiCorp Vaultも標的にしています。

これらはあくまでスクリプトが備える機能であり、影響を受けたすべてのリポジトリで実際に起きた結果ではありません。攻撃者がどこまで進めるかは、各ワークフローが持つ認証情報と権限で決まります。

悪意あるコードを削除しても、すでに盗まれた認証情報が無効になるわけではありません。同様に、露出したシークレットをローテーションしても、攻撃者が新たに作成したアクセスキーやフェデレーテッドID資格情報は消えません。

その後の調査で活動の継続を確認

OX Securityは11月12日のレポートで、探査用プルリクエストと悪意あるコミットを合わせて6万6,200件以上、公開リポジトリ8,093件で確認したと報告しました。このうち4,100件以上の探査は、11月12日に実行されています。

CompareSecurity

これらの数値は、攻撃の異なる段階を測定したものです。探査用プルリクエスト、悪意あるコミットを受けたリポジトリ、認証情報が盗まれたリポジトリは、互いに置き換えられる件数として扱うべきではありません。

Aikidoの概要レポートでは、少なくとも1,835件のリポジトリで実行と認証情報の窃取が確認されたとしています。

このキャンペーンは、自動化されたリリースプロセスを通じて、公開済みパッケージにも及びました。Aikidoは、Packagistのパッケージdigitalelvis/neuronai-studioのバージョン3.14.3と、Goモジュールgithub.com/onuragtas/docker-envの各バージョンに含まれるワークフローファイルで、悪意あるコンテンツを確認しています。

Aikidoのレポートに記載されたGoのバージョンでは、ソースコードとリリースバイナリに変更はありませんでした。Goモジュールをインストールまたはコンパイルしても、そのGitHub Actionsワークフローファイルは実行されません。したがって、ファイルが含まれていたからといって、一般のモジュール利用者がスティーラーを実行したことにはなりません。

影響を受けたチームが確認すべきこと

リポジトリの所有者は、11月10日以降の履歴を調べ、見覚えのないwfx-docsブランチや、依存関係監査を名目としたプルリクエスト、CIメンテナンスを装ったコミットがないか確認する必要があります。

確認の対象は、ワークフローファイルだけではありません。既存のシェルスクリプトやnpmフックも調べてください。変更が元に戻され、実行履歴も削除されている場合があるため、現在のブランチにペイロードが残っていなくても、調査は必要です。

マルウェアが実行された場合、そのワークフローで利用できたシークレットとクラウドアクセスは、侵害されたものとして扱うべきです。復旧には、露出したトークンの失効、認証情報のローテーション、連携先クラウドアカウントでの不正アクセスや永続化の有無の確認が必要です。

Aikidoは、以前GhostActionの被害を受けたリポジトリとも重複があることを確認しました。その中には、先行する悪意あるワークフローにwfx-lootが挿入されていた事例が100件以上含まれます。Aikidoは、両キャンペーンの背後にいる攻撃者は別である可能性が高いとみています。

今回報告された攻撃は、GitHubソフトウェアの既知の脆弱性を突いたものではなく、盗んだ認証情報を使っています。影響を受けたチームは、侵害されたアカウント、リポジトリの自動化処理、そしてワークフローがアクセスできた外部サービスのすべてを対象に、復旧を進める必要があります。

StudySecurity

翻訳元: https://hackread.com/hackers-stolen-github-accounts-target-repositories/

本記事は hackread.com の記事を翻訳・要約したものです。