Nx「s1ngularity」攻撃でAIはどのように利用されたか
はじめに
2025年8月26日、「s1ngularity」攻撃と呼ばれる悪意のあるNxパッケージによって引き起こされた大規模なサプライチェーン攻撃が発生しました。
発端はGitHub Actionsワークフローの脆弱性を突いて悪意のあるNxパッケージが数時間にわたり公開されたことです。
この攻撃により、Nxビルドシステムを利用していた多くの開発者の機密情報が盗まれ、さらに一部のユーザーのプライベートGitHubリポジトリが強制的に公開されるという被害も発生したと報告されています。
今回の攻撃で特徴的な点は 開発者のマシンのAIコマンドラインツール(Claude、Gemini、Amazon Q 等)を悪用して機密情報の収集が試みられたことです。
今回の攻撃は
- 悪意のあるパッケージを利用した被害者の機密情報を
- 被害者が利用するAIコマンドラインツールを使って収集させた
ことによりAIが攻撃の一部として利用されたわけですが、これは従来のシグネチャベース型(特定のパターンに基づく検出)やルールベースの防御策では対処が難しくなる可能性を示しています。
その理由として、これら従来の防御策は既知のパターンに基づいた検出方法であるため、AIコマンドラインツールの動的な挙動や文脈に合わせた悪用を捉えにくいことが挙げられます。
事件の概要
「s1ngularity」攻撃は大きく2つの段階に分かれています。
第一段階:機密情報の窃取
GitHub Actionsの脆弱性を突いて公開された不正なパッケージにより、開発者のローカルマシンで悪意のあるスクリプトが実行されました。この過程で、機密情報を盗むためにAIコマンドラインツールが悪用されました。
第二段階:プライベートリポジトリの公開
第一段階で盗まれたGitHubトークンを使い、被害者のプライベートリポジトリが強制的に公開状態に変更されました。
以下でNxとは何か、今回の攻撃の影響、攻撃手法を説明しつつ、AIコマンドラインツールが実際にどのように悪用されたかについてお話しします。
Nxとは?
Nxは、JavaScript/TypeScriptベースのmonorepo(単一リポジトリ)プロジェクトを効率的にビルド・管理するためのオープンソースツールです。
何が盗まれたのか?
- ユーザーの暗号通貨ウォレットのファイル
- GitHubやnpmの認証トークン
- SSHの秘密鍵
- APIキー
- 環境変数
など、広範かつ大量の機密情報が盗まれたと報告されています。
誰が被害にあったのか?
- 悪意のあるNxパッケージをインストールした開発者
- VS Codeの拡張機能「Nx Console」を利用していたユーザー(Nxを直接使っていなくても自動更新によってマルウェアがインストールされ影響を受けた可能性がある)
攻撃手法
マルウェアが仕込まれたNxパッケージの公開
- NxのGitHub Actionsワークフローの脆弱性を突き、不正なプルリクエストのタイトルからコードインジェクションを実施
- 攻撃者が「Nx」のいくつかのバージョンに悪意のあるpostinstallスクリプトを仕込み、npmという公開レジストリに公開
- postinstallスクリプトはユーザーがパッケージをインストールした際に自動的に実行される
機密情報の収集(第一段階の攻撃)
ここでAIコマンドラインツールの存在が悪用されました。
しかし、多くのAIツールはセキュリティガードレールや設計上の理由から、この悪意のある要求に従わなかったとされています。
-
AIコマンドラインツールを利用した自動探索:悪意のあるスクリプトはClaudeやGeminiといったAIコマンドラインツールの存在をチェックし、機密ファイルの探索をAIに委任
-
--dangerously-skip-permissions
、--yolo
、--trust-all-tools
といった承認をスキップするオプションが利用された
-
- 盗まれたデータは検出を回避するために、二重または三重にBase64エンコードされた
盗んだ情報の流出と妨害行為
- 被害者のGitHubアカウントに「
s1ngularity-repository
」といった名前の新しい公開リポジトリが作成され、盗まれた情報がアップロードされた - マルウェアがユーザーのシェル起動ファイル(
~/.bashrc
や~/.zshrc
)を改ざんし、sudo shutdown -h 0
というシャットダウンコマンドを追記することで、新しいターミナルを開くたびにシステムがシャットダウンされるという妨害行為も実行された
プライベートリポジトリの公開(第二段階の攻撃)
- 第一段階で盗まれた有効なGitHubトークンを悪用し、被害者のプライベートなGitHubリポジトリを強制的に公開状態に変更
最後に
今回の「s1ngularity」攻撃で、AIコマンドラインツールが巧妙なデータ窃取(exfiltration)の媒介となり得ることが明らかになりました。
繰り返しになりますが、本質的な問題はAIツールの利用そのものではないことに注意が必要です。
根本原因への対策:セキュリティプラクティスの遵守
よくあるGitHub Actionsの脆弱性を突かれたことが発端ですので、改めてセキュリティプラクティスを見直し遵守することが重要です。
参考記事に具体的なセキュリティプラクティスが詳しく書いてあるので、ぜひ確認してみてください。
AIツール利用上の対策:最小権限の原則
また、AIツールに対しては機密情報へのアクセスを制限したり、最小権限の原則に則った設定を行った上で利用する必要があると再度認識しました。
私の場合はAIツールの利用開始時にallow/denyリストを設定し、権限を抑えた上で利用していますが、今回の攻撃への対策としても有効だと考えています。
適切なセキュリティ設定を行えばAIツールは開発効率を大きく高められるため、まだ設定をされていない方はぜひ対応を検討してみてください。
参考
Discussion