ブログ一覧に戻る
ベストプラクティス2026年7月14日5分で読めます

GitHub Actionsの脆弱性を悪用:AsyncAPI npmパッケージ5件にバックドアが埋め込まれた事案の詳細分析

AsyncAPI npm packages backdoored via GitHub Actions

ベストプラクティスnpm

この記事のポイント

【なぜ重要か】 週間ダウンロード数が合計約290万件(うち@asyncapi/specsだけで約270万件)に上るAsyncAPI関連のnpmパッケージ5件が、2025年7月14日にトロイの木馬化されたことが判明した。攻撃者はGitHub Actionsのpull_request_targetワークフローの既知の脆弱性を悪用してnpm公開トークンを窃取し、通常の実行モジュール内に難読化されたダウン...

【なぜ重要か】 週間ダウンロード数が合計約290万件(うち@asyncapi/specsだけで約270万件)に上るAsyncAPI関連のnpmパッケージ5件が、2025年7月14日にトロイの木馬化されたことが判明した。攻撃者はGitHub Actionsのpull_request_targetワークフローの既知の脆弱性を悪用してnpm公開トークンを窃取し、通常の実行モジュール内に難読化されたダウンローダーを埋め込んだ。影響を受けるパッケージをrequire()するだけでインプラントが起動するため、パッケージをインストールしたホストだけでなく、実際にimportしたすべてのホストが対象となる。

【ポイント】

  • 初期侵入の手口:asyncapi/generatorリポジトリのpull_request_targetワークフローは、外部PRのコードをチェックアウトしてもリポジトリのシークレットにアクセスできる設計だった。この脆弱性を修正するPR(#2092)は5月17日に提出されていたが、攻撃発生時点で約2か月間マージされていなかった。攻撃者は37件のPRを一斉に送りつけ、そのうちの1件(PR #2155)に仕込んだ難読化JavaScriptでnpm公開トークンをrentry[.]coに外部送信した。
  • マルウェアの動作:感染パッケージをrequire()するとIPFS上の暗号化されたNode.jsローダー(AES-256-GCM + HKDF-SHA256)をダウンロードし、sync.jsとしてディスクに書き込んで切り離されたプロセスとして起動する。インプラントはsecp256k1鍵ペアを生成し、macOS・Windows・Linux各プラットフォームに対応した永続化機構(.zshrc追記、レジストリRunキー、systemdユーザーサービス)を設置したうえ、C2サーバー(85[.]137[.]53[.]71:8080)に約30秒ごとにビーコンを送信する。
  • 設定値による「安全」の誤認に注意:設定ファイル中のsafeMode: true・actualPersist: false・canaryPercent: 5という値を根拠に「安全なカナリア」と評価した早期レポートがあったが、コールグラフ分析の結果これらの値はいずれも実際のコードパスで参照されておらず、永続化は実際に動作する。
  • 無効化されているが実装済みの危険機能:クラウド認証情報・パッケージマネージャートークン・SSH/GPGキー・ブラウザ・CI/CDシステム・AIツール・ウォレット等を対象とする完全なクレデンシャルハーベスターと、npm・PyPI・Cargo向けの自己拡散機能がコード内に実装されているが、現ビルドではトグルがfalseに設定されており動作しない。ただし有効なリモートシェル(ShellExec)を通じて攻撃者が手動で同等の操作を実行することは可能。
  • 帰属・ブランディング:初期侵入手法はprt-scanキャンペーンのパターンと一致し、ペイロードのコードコメントは自身を「M-RED-TEAM v6.4」と明記し、設定・ファイルパス等はMiasmaツールキットのブランディングを使用している。ただしこれらが同一オペレーターによるものか、コード流用・模倣・意図的な偽装かは判断できない。

【まとめ】 影響を受けた5パッケージ(@asyncapi/specs@6.11.2・6.11.2-alpha.1、@asyncapi/generator@3.3.1、@asyncapi/generator-helpers@1.1.1、@asyncapi/generator-components@0.7.1)を即座にダウングレードし、マニフェスト・ロックファイル・キャッシュ・内部ミラー・ビルドイメージから削除すること。インストールしたホストだけでなくimportしたすべてのホストを調査対象とし、sync.js・永続化ファイル・C2(ポート8080/8081/8091)への通信・不審なデタッチNodeプロセスを確認し、影響を受けた開発マシンやビルドホストからアクセス可能なすべての認証情報(npmトークン・クラウドクレデンシャル・SSHキー・CI/CDシークレット等)をクリーンな環境から速やかにローテーションすること。

原文を読む

Aikido Security Blog

英語で詳細な技術情報を確認

原文を読む

コメント・質問

この記事についてのコメントや質問を投稿できます

コメントを投稿するにはログインが必要です

ログインする

読み込み中...