
セキュリティ研究者は、現在進行中のサプライチェーン攻撃で侵害された少なくとも187のnpmパッケージを特定した。
Shai-Hulud」と名付けられたこのワーム型キャンペーンは、昨日、毎週200万以上のダウンロードを受けるnpmパッケージ「@ctrl/tinycolor」の侵害から始まりました。
それ以来、キャンペーンは大幅に拡大し、現在ではCrowdStrikeのnpmネームスペースで公開されているパッケージも含まれている。
tinycolorからCrowdStrikeへ
昨日、シニアバックエンドソフトウェアエンジニアの Daniel Pereira が、世界最大の JavaScript レジストリ npmjs.com に影響を及ぼす大規模なソフトウェアサプライチェーン攻撃についてコミュニティに警告を発した。
「あなたがこれを読んでいる間にも、npmでマルウェアが蔓延しています」とエンジニアは書き、@ctrl/tinycolorプロジェクトの最新バージョンのインストールを控えるよう注意を促した。

Pereira氏はこの24時間、GitHubの注意を引こうと、より慎重なチャンネルを通じて現在進行中の攻撃について話し合おうとしていた。
「しかし、GitHubに連絡するのはあまりにも難しい。例えば、レポで秘密が暴露されています。これは深刻だ」とエンジニアは書いている。
ソフトウェア・サプライチェーンのセキュリティ会社であるSocketは、この侵害の調査を開始し、このキャンペーンで侵害されたパッケージを少なくとも40個特定した。今日、SocketとAikidoの両方の研究者は、追加のパッケージを特定し、その数は少なくとも187に達した。
StepSecurityはまた、難読化解除されたスニペットと攻撃フロー図を含む技術的な内訳を公表しており、Socketの最初の調査結果をほぼ裏付けている。
影響を受けるパッケージには、CrowdStrikeのnpmjsアカウントであるcrowdstrike-publisherによって公開されているものがいくつか含まれている。
サイバーセキュリティ・ソリューション・プロバイダーにコメントを求めた:
「CrowdStrikeの広報担当者は、「サードパーティのオープンソースリポジトリである公開NPMレジストリで複数の悪意のあるNPM(Node Package Manager)パッケージを検出した後、それらを迅速に削除し、公開レジストリのキーを積極的にローテーションしました。
「これらのパッケージはFalconセンサーでは使用されておらず、プラットフォームに影響はなく、顧客は保護されたままです。私たちは NPM と協力し、徹底的な調査を行っています。
自己増殖型ワームがTruffleHogを使って機密を盗む
侵害されたバージョンには、同じメンテナによる他のパッケージを標的とする自己増殖メカニズムが含まれています。
このマルウェアは、あるメンテナによる各パッケージをダウンロードし、そのpackage.jsonを変更し、bundle.jsスクリプト(下図)を注入してアーカイブを再パッケージ化し、再公開することで、「下流のパッケージの自動トロイの木馬化を可能にする」とSocketの研究者は説明している。

bundle.jsスクリプトは、開発者やセキュリティ専門家がコードリポジトリやその他のデータソース内でAPIキー、パスワード、トークンなどの誤って流出した機密情報を見つけるために使用できる、正規のシークレットスキャナーであるTruffleHogを利用している。
しかし、悪意のあるスクリプトはこのツールを悪用し、トークンやクラウドの認証情報をホスト上で検索します。
「開発者とCIの認証情報を検証して使用し、リポジトリ内にGitHub Actionsワークフローを作成し、ハードコードされたWebhook(hxxps://webhook[.]site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7)に結果を流出させます」とSocketは説明する。
Shai-Hulud』という名前は、侵害されたバージョンで見つかったマルウェアが使用するshai-hulud.yaml ワークフロー ファイルに由来し、フランク・ハーバートの『デューン』シリーズに登場する巨大なサンドワームにちなんでいる。
これは、フランク・ハーバートの『デューン』シリーズに登場する巨大なサンドワームへの言及です。「ユニークな言及ではありませんが、この存在は、攻撃者が意図的にキャンペーンを『Shai-Hulud』と名付けたことを補強するものです」とSocketの研究者Kush PandyaとPeter van derZeeは述べています。
本日確認された追加パッケージで見つかったマルウェアは、bundle.jsを使用した以前のものと同一です:
- 正規の秘密スキャンツールTruffleHogをダウンロードして実行する。
- トークンやクラウド認証情報のような秘密をホストから検索する。
- 発見された開発者と CI の認証情報が有効かどうかをチェックする。
- リポジトリ内に不正なGitHub Actionsワークフローを作成する。
- ハードコードされたウェブフックエンドポイントに機密データを流出させる
nx ‘s1ngularity’ のような現在進行中の大規模攻撃に続くインシデント
このサプライチェーン攻撃が際立っているのは、人気のあるパッケージが攻撃されたこと以上に、そのタイミングにある。
この攻撃は、同じ月に発生した2つの注目度の高いサプライチェーン攻撃に続くものだ。
9月の第1週には、AIを搭載したマルウェアが「s1ngularity」と呼ばれる攻撃で2,180のGitHubアカウントを攻撃した。
今日の攻撃の根本的な原因はまだ調査中だが、ペレイラを含む実務者は、今日の攻撃は「s1ngularity」の背後にいる攻撃者によって仕組まれたものではないかと仮説を立てている。
今月初めには、人気の高いchalkとdebugのnpmパッケージのメンテナも、別の攻撃でフィッシングの被害に遭い、プロジェクトが危険にさらされた。
これらの攻撃の波及効果は依存関係の連鎖の奥深くにまで及び、週末に声明を発表したGoogle Gemini CLIのような広く使われているプロジェクトにも影響を及ぼす可能性がある:
「我々は明確にしたい:Gemini CLIのソースコード自体は漏洩しておらず、我々のサーバーは安全なままである。
「しかし、このインシデントは、NPMインストールメソッドを使用して攻撃ウィンドウの間にGemini CLIをインストールまたはアップデートしたユーザーに影響を与えた可能性があります。私たちは、インシデントの詳細を提供し、誰が影響を受けたかを明らかにし、ユーザーがシステムの安全を確保するために取るべき手順を概説しています。
これらの継続的な攻撃は、悪意のあるプルリクエストや侵害されたメンテナアカウントが1つでもあれば、何百ものプロジェクトに波及しかねない現代のソフトウェアサプライチェーンの脆弱性を示している。
GoogleやCrowdStrikeのようなベンダーは、自社のコアプラットフォームが安全であることを強調しているが、今回の事件は、開発者がソフトウェアのビルドとパイプラインを保護する緊急の必要性を強調している。
影響を受けたユーザーは、環境やログに侵害の兆候がないか監査し、すべてのシークレットとCI/CDトークンをローテーションし、依存関係のツリーに悪意のあるバージョンがないか確認する必要がある。依存関係を信頼できるリリースに固定し、クレデンシャルの公開範囲を制限することは、パッケージレベルの侵害にさらされる機会を減らすために引き続き重要なステップです。
.ia_ad { background-color:#width: 95%; max-width: 800px; margin: 15px auto; border-radius: 8px; border:1px solid #d6ddee; display: flex; align-items: stretch; padding: 0; overflow: hidden; }:0; overflow: hidden; } .ia_lef { flex: 1; max-width: 200px; height: auto; display: flex; align-items: stretch; } .ia_lef a { display: flex; width: 100%; height: 100%; } .ia_lef a img { width: 100%; height: 100%; object-fit: cover; border-radius: 8px 0 0 8px; margin: 0; display: block; } .ia_rig { flex: 2; padding:display: flex; flex-direction: column; justify-content: center; } .ia_rig h2 { font-size: 17px !important; font-weight: 700; color:#line-height: 1.4; font-family:margin: 0 0 14px 0; } .ia_rig p { font-weight: bold; font-size: 14px; margin: 0 0 clamp(6px, 2vw, 14px) 0; } .ia_button { background-color:#border:1px solid #3b59aa; color: black; text-align: center; text-decoration: none; border-radius: 8px; display: inline-block; font-size: 16px; font-weight: bold; cursor: pointer; padding:width: fit-content; } .ia_button a { text-decoration: none; color: inherit; display: block; } @media (max-width: 600px) { .ia_ad { flex-direction: column; align-items: center; } .ia_lef { max-width: 100%; } .ia_lef a img { border-radius: 8px 8px 0 0; } .ia_rig { padding:15px;
width: 100%;
}
.ia_button {
width: 100%;
margin: 0px auto;
}
}




Comments