Aikido

S1ngularity/nx攻撃者が再び攻撃

執筆者
Charlie Eriksen

今朝、私たちはnpmに対する大規模な攻撃が報告されました。これは、2025年8月27日のNx攻撃の背後にいたのと同じ脅威アクターによるものと思われます。この情報は元々SocketStepSecurityによって公開され、彼らは40個のパッケージが侵害されたと指摘しました。それ以来、CrowdStrikeのパッケージを含むさらに147個のパッケージがマルウェアに感染しています。

この攻撃の規模、範囲、影響は甚大です。攻撃者は、元の攻撃とほぼ同じ手口(プレイブック)を使用していますが、手口をさらに巧妙化させています。彼らはこれを、以下のことを自動的に行う完全なワームに変えました。

  • シークレットを盗み、GitHubに公開する
  • trufflehogを実行し、クラウドメタデータエンドポイントをクエリしてシークレットを収集してください。
  • webhook[.]siteを介したデータ流出メカニズムを持つ新しいGitHubアクションを作成しようとします。
  • ユーザーがアクセスできるGitHub上のリポジトリを繰り返し処理し、それらを公開します。

今朝の最初の警告以来、私たちは以下の追加の動作と重要な詳細を確認しました。ご存じない方のために説明すると、Shai HuludはDuneシリーズに登場するワームの名前です。これは攻撃者の意図を明確に示しています。

Shai Hulud (Duneより)

このようなパッケージによる侵害を避けるには、Aikido safe-chain をご確認ください!

ワームの動作

  • Harvest: ホストおよびCI環境からシークレットをスキャンします。具体的には、process.env、TruffleHogによるスキャン、およびインスタンス/サービス認証情報を返すクラウドメタデータエンドポイント(AWS/GCP)を対象とします。
  • データ持ち出し (1) — GitHubリポジトリ: 侵害されたアカウントの下にShai-Huludという名前のリポジトリを作成し、システム情報、環境変数、収集されたシークレットを含むJSONダンプをコミットします。
  • データ流出 (2) — GitHub Actions → webhook: ワークフローをドロップします .github/workflows/shai-hulud-workflow.yml をシリアル化し ${{ toJSON(secrets) }}、それらを攻撃者にPOSTし webhook[.]site URLに送信し、ダブルbase64エンコードされたコピーをActionsログに書き込みます。
  • 伝播: 見つかった有効なnpmトークンを使用して、侵害されたメンテナーが管理するパッケージを列挙し、更新しようとします(サプライチェーン伝播)。
  • 増幅: 犠牲者がアクセスできるリポジトリを繰り返し処理し、それらを公開するか、さらなる実行と情報漏洩を引き起こすワークフロー/ブランチを追加します。

シークレットの漏洩

元のNx攻撃と同様に、攻撃者が「スマッシュ・アンド・グラブ」スタイルの攻撃を行っていることが確認されています。悪意のあるペイロードは、盗まれた認証情報/トークンを含む「Shai-Hulud」リポジトリを公開し、GitHubアカウントを介してプライベートリポジトリを公開に変更します。

盗まれた認証情報が公開されています

プライベートリポジトリが公開に変更されています

npmを介した自己伝播

この攻撃の最も顕著な特徴の一つは、真のワームのように振る舞うことです。単一の感染パッケージに依存して拡散するのではなく、このコードは、侵害されたメンテナーが所有する他のnpmパッケージに自身を再公開するように設計されています。

ワームのロジックは次のとおりです。

  • ターゲットのtarballをダウンロード – npmレジストリから既存のパッケージバージョンを取得します。
  • 変更 package.json – ワームがパッチバージョンを更新し(例: 1.2.3 → 1.2.4)新しいライフサイクル・フック(postinstall)
  • 自身のペイロードをコピー – 実行中のスクリプト(process.argv[1])がtarballに bundle.jsとして書き込まれます。これにより、あるパッケージを感染させたコードが次のパッケージ内に存在することが保証されます。
  • トロイの木馬化されたパッケージの再公開 – 変更されたtarballはgzip圧縮され、メンテナーの認証情報を使用してnpmにプッシュバックされます。

このサイクルにより、マルウェアはメンテナーがアクセスできるすべてのパッケージに継続的に感染することができます。公開された各パッケージは新しい配布ベクトルとなり、誰かがそれをインストールするとすぐに、ワームは実行され、複製し、エコシステムにさらに拡散します。

要するに、攻撃者は手動でパッケージを標的にする必要はありません。単一の環境が侵害されると、ワームはメンテナー自身の公開権限に便乗して拡散を自動化します。

マルウェアの詳細な分析については、getsafetyの投稿を確認することをお勧めします。

影響を受けたパッケージ

パッケージ バージョン
@ahmedhfarag/ngx-perfect-scrollbar 20.0.20
@ahmedhfarag/ngx-virtual-scroller 4.0.4
@art-ws/common 2.0.28
@art-ws/config-eslint 2.0.4, 2.0.5
@art-ws/config-ts 2.0.7, 2.0.8
@art-ws/db-context 2.0.24
@art-ws/di 2.0.28, 2.0.32
@art-ws/di-node 2.0.13
@art-ws/eslint 1.0.5, 1.0.6
@art-ws/fastify-http-server 2.0.24, 2.0.27
@art-ws/http-server 2.0.21, 2.0.25
@art-ws/openapi 0.1.9, 0.1.12
@art-ws/package-base 1.0.5, 1.0.6
@art-ws/prettier 1.0.5, 1.0.6
@art-ws/slf 2.0.15, 2.0.22
@art-ws/ssl-info 1.0.9, 1.0.10
@art-ws/web-app 1.0.3, 1.0.4
@crowdstrike/commitlint 8.1.1, 8.1.2
@crowdstrike/falcon-shoelace 0.4.1, 0.4.2
@crowdstrike/foundry-js 0.19.1, 0.19.2
@crowdstrike/glide-core 0.34.2, 0.34.3
@crowdstrike/logscale-dashboard 1.205.1, 1.205.2
@crowdstrike/logscale-file-editor 1.205.1, 1.205.2
@crowdstrike/logscale-parser-edit 1.205.1, 1.205.2
@crowdstrike/logscale-search 1.205.1, 1.205.2
@crowdstrike/tailwind-toucan-base 5.0.1, 5.0.2
@ctrl/deluge 7.2.1, 7.2.2
@ctrl/golang-template 1.4.2, 1.4.3
@ctrl/magnet-link 4.0.3, 4.0.4
@ctrl/ngx-codemirror 7.0.1, 7.0.2
@ctrl/ngx-csv 6.0.1, 6.0.2
@ctrl/ngx-emoji-mart 9.2.1, 9.2.2
@ctrl/ngx-rightclick 4.0.1, 4.0.2
@ctrl/qbittorrent 9.7.1, 9.7.2
@ctrl/react-adsense 2.0.1, 2.0.2
@ctrl/shared-torrent 6.3.1, 6.3.2
@ctrl/tinycolor 4.1.1, 4.1.2
@ctrl/torrent-file 4.1.1, 4.1.2
@ctrl/transmission 7.3.1
@ctrl/ts-base32 4.0.1, 4.0.2
@hestjs/core 0.2.1
@hestjs/cqrs 0.1.6
@hestjs/demo 0.1.2
@hestjs/eslint-config 0.1.2
@hestjs/logger 0.1.6
@hestjs/scalar 0.1.7
@hestjs/validation 0.1.6
@nativescript-community/arraybuffers 1.1.6, 1.1.7, 1.1.8
@nativescript-community/gesturehandler 2.0.35
@nativescript-community/perms 3.0.5, 3.0.6, 3.0.7, 3.0.8
@nativescript-community/sqlite 3.5.2, 3.5.3, 3.5.4, 3.5.5
@nativescript-community/text 1.6.9, 1.6.10, 1.6.11, 1.6.12
@nativescript-community/typeorm 0.2.30, 0.2.31, 0.2.32, 0.2.33
@nativescript-community/ui-collectionview 6.0.6
@nativescript-community/ui-document-picker 1.1.27, 1.1.28
@nativescript-community/ui-drawer 0.1.30
@nativescript-community/ui-image 4.5.6
@nativescript-community/ui-label 1.3.35, 1.3.36, 1.3.37
@nativescript-community/ui-material-bottom-navigation 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-bottomsheet 7.2.72
@nativescript-community/ui-material-core 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-core-tabs 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-ripple 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-material-tabs 7.2.72, 7.2.73, 7.2.74, 7.2.75
@nativescript-community/ui-pager 14.1.36, 14.1.37, 14.1.38
@nativescript-community/ui-pulltorefresh 2.5.4, 2.5.5, 2.5.6, 2.5.7
@nexe/config-manager 0.1.1
@nexe/eslint-config 0.1.1
@nexe/logger 0.1.3
@nstudio/angular 20.0.4, 20.0.5, 20.0.6
@nstudio/focus 20.0.4, 20.0.5, 20.0.6
@nstudio/nativescript-checkbox 2.0.6, 2.0.7, 2.0.8, 2.0.9
@nstudio/nativescript-loading-indicator 5.0.1, 5.0.2, 5.0.3, 5.0.4
@nstudio/ui-collectionview 5.1.11, 5.1.12, 5.1.13, 5.1.14
@nstudio/web 20.0.4
@nstudio/web-angular 20.0.4
@nstudio/xplat 20.0.5, 20.0.6, 20.0.7
@nstudio/xplat-utils 20.0.5, 20.0.6, 20.0.7
@operato/board 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/data-grist 9.0.29, 9.0.35, 9.0.36, 9.0.37
@operato/graphql 9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/headroom 9.0.2, 9.0.35, 9.0.36, 9.0.37
@operato/help 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/i18n 9.0.35, 9.0.36, 9.0.37
@operato/input 9.0.27, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/layout 9.0.35, 9.0.36, 9.0.37
@operato/popup 9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@operato/pull-to-refresh 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42
@operato/shell 9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39
@operato/styles 9.0.2, 9.0.35, 9.0.36, 9.0.37
@operato/utils 9.0.22, 9.0.35, 9.0.36, 9.0.37, 9.0.38, 9.0.39, 9.0.40, 9.0.41, 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46
@teselagen/bounce-loader 0.3.16, 0.3.17
@teselagen/liquibase-tools 0.4.1
@teselagen/range-utils 0.3.14, 0.3.15
@teselagen/react-list 0.8.19, 0.8.20
@teselagen/react-table 6.10.19
@thangved/callback-window 1.1.4
@things-factory/attachment-base 9.0.43, 9.0.44, 9.0.45, 9.0.46, 9.0.47, 9.0.48, 9.0.49, 9.0.50
@things-factory/auth-base 9.0.43, 9.0.44, 9.0.45
@things-factory/email-base 9.0.42, 9.0.43, 9.0.44, 9.0.45, 9.0.46, 9.0.47, 9.0.48, 9.0.49, 9.0.50, 9.0.51, 9.0.52, 9.0.53, 9.0.54
@things-factory/env 9.0.42, 9.0.43, 9.0.44, 9.0.45
@things-factory/integration-base 9.0.43, 9.0.44, 9.0.45
@things-factory/integration-marketplace 9.0.43, 9.0.44, 9.0.45
@things-factory/shell 9.0.43, 9.0.44, 9.0.45
@tnf-dev/api 1.0.8
@tnf-dev/core 1.0.8
@tnf-dev/js 1.0.8
@tnf-dev/mui 1.0.8
@tnf-dev/react 1.0.8
@ui-ux-gang/devextreme-angular-rpk 24.1.7
@yoobic/design-system 6.5.17
@yoobic/jpeg-camera-es6 1.0.13
@yoobic/yobi 8.7.53
airchief 0.3.1
airpilot 0.8.8
angulartics2 14.1.1, 14.1.2
browser-webdriver-downloader 3.0.8
capacitor-notificationhandler 0.0.2, 0.0.3
capacitor-plugin-healthapp 0.0.2, 0.0.3
capacitor-plugin-ihealth 1.1.8, 1.1.9
capacitor-plugin-vonage 1.0.2, 1.0.3
capacitorandroidpermissions 0.0.4, 0.0.5
config-cordova 0.8.5
cordova-plugin-voxeet2 1.0.24
cordova-voxeet 1.0.32
create-hest-app 0.1.9
db-evo 1.1.4, 1.1.5
devextreme-angular-rpk 21.2.8
ember-browser-services 5.0.2, 5.0.3
ember-headless-form 1.1.2, 1.1.3
ember-headless-form-yup 1.0.1
ember-headless-table 2.1.5, 2.1.6
ember-url-hash-polyfill 1.0.12, 1.0.13
ember-velcro 2.2.1, 2.2.2
encounter-playground 0.0.2, 0.0.3, 0.0.4, 0.0.5
eslint-config-crowdstrike 11.0.2, 11.0.3
eslint-config-crowdstrike-node 4.0.3, 4.0.4
eslint-config-teselagen 6.1.7
globalize-rpk 1.7.4
graphql-sequelize-teselagen 5.3.8
html-to-base64-image 1.0.2
json-rules-engine-simplified 0.2.1
jumpgate 0.0.2
koa2-swagger-ui 5.11.1, 5.11.2
mcfly-semantic-release 1.3.1
mcp-knowledge-base 0.0.2
mcp-knowledge-graph 1.2.1
mobioffice-cli 1.0.3
monorepo-next 13.0.1, 13.0.2
mstate-angular 0.4.4
mstate-cli 0.4.7
mstate-dev-react 1.1.1
mstate-react 1.6.5
ng2-file-upload 7.0.2, 7.0.3, 8.0.1, 8.0.2, 8.0.3, 9.0.1
ngx-bootstrap 18.1.4, 19.0.3, 19.0.4, 20.0.3, 20.0.4, 20.0.5
ngx-color 10.0.1, 10.0.2
ngx-toastr 19.0.1, 19.0.2
ngx-trend 8.0.1
ngx-ws 1.1.5, 1.1.6
oradm-to-gql 35.0.14, 35.0.15
oradm-to-sqlz 1.1.2
ove-auto-annotate 0.0.9
pm2-gelf-json 1.0.4, 1.0.5
printjs-rpk 1.6.1
react-complaint-image 0.0.32
react-jsonschema-form-conditionals 0.3.18
remark-preset-lint-crowdstrike 4.0.1, 4.0.2
rxnt-authentication 0.0.3, 0.0.4, 0.0.5, 0.0.6
rxnt-healthchecks-nestjs 1.0.2, 1.0.3, 1.0.4, 1.0.5
rxnt-kue 1.0.4, 1.0.5, 1.0.6, 1.0.7
swc-plugin-component-annotate 1.9.1, 1.9.2
tbssnch 1.0.2
teselagen-interval-tree 1.1.2
tg-client-query-builder 2.14.4, 2.14.5
tg-redbird 1.3.1
tg-seq-gen 1.0.9, 1.0.10
thangved-react-grid 1.0.3
ts-gaussian 3.0.5, 3.0.6
ts-imports 1.0.1, 1.0.2
tvi-cli 0.1.5
ve-bamreader 0.2.6
ve-editor 1.0.1
verror-extra 6.0.1
voip-callkit 1.0.2, 1.0.3
wdio-web-reporter 0.1.3
yargs-help-output 5.0.3
yoo-styles 6.0.326

続報…

修復の推奨事項

  • 使用しているバージョンを確認してください
  • npmキャッシュをクリーンアップしてください
  • リポジトリ内のすべてのパッケージを再インストールしてください
  • パッケージロックファイルを使用し、バージョンを固定してください

Aikidoを使用して影響を受けているかどうかを確認する方法:

Aikidoユーザーの方は、中央フィードでマルウェアの問題をフィルターして確認してください。この脆弱性は、フィード内で100/100のクリティカルな問題として表示されます。ヒント:Aikidoはリポジトリを毎晩再スキャンしますが、フル再スキャンもトリガーすることをお勧めします。

まだAikidoユーザーでない場合は、アカウントを設定し、リポジトリを接続してください。当社の独自のマルウェアカバレッジは無料プランに含まれています(クレジットカードは不要です)。

将来の保護のためにAikido SafeChain(オープンソース)の使用を検討してください。これはnpm、npx、yarnなどのためのセキュアなラッパーです。SafeChainは現在のワークフローに組み込まれ、npm、npx、yarn、pnpm、pnpxコマンドをインターセプトし、インストール前にパッケージをAikido Intel - Open Sources Threat Intelligenceに対してマルウェアがないか検証することで機能します。脅威がマシンに到達する前に阻止します。

共有:

https://www.aikido.dev/blog/s1ngularity-nx-attackers-strike-again

脅威ニュースをサブスクライブ

今日から無料で始めましょう。

無料で始める
今すぐスキャンします。
CC不要

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。