本文へスキップ

npmマルウェア「MALFEX」、14か月間検知されず稼働

1人の攻撃者によるnpmのサプライチェーン攻撃「MALFEX」は、2023年以降に12個のパッケージを公開し、ダウンロード数は40,767回に達した。一部は今もアドバイザリーなしで公開されている。

著者 Tech AI Wire Team

4 分で読めます

CloudSEKのブログ記事「MALFEX - A malicious npm postinstall no advisory has caught for fourteen months」のスクリーンショット。レポートのヘッダー画像の上に表示されている。

数字で見る

npm packages published by one operator
12
total downloads, per Checkmarx
40,767
downloads of function-flag alone
37,419
when the first package appeared
Aug 2023

1人の攻撃者が2023年8月からnpmにマルウェアを公開し続けており、その一部は2026年9月末の時点でもインストールできる状態だった。セキュリティ企業のCloudSEKは9月30日にこのキャンペーンをMALFEXと名付けた。同社は、14か月間どのセキュリティアドバイザリーにも指摘されなかった悪意あるパッケージを1つ見つけた。Checkmarxは10月5日、このキャンペーンのパッケージ全体で40,767回のダウンロードがあったと続報を出した。依存関係ツリーにこれらのパッケージが1つでもあれば、それをインストールしたWindowsマシンでリモートアクセスツールが動いている可能性がある。

攻撃の仕組み

npmはJavaScriptのパッケージレジストリだ。パッケージをインストールすると、npmは「postinstall」スクリプトを実行できる。これはパッケージの作者が選んだコマンドである。MALFEXはこのスクリプトを使い、開発者がnpm installを実行した瞬間にWindows向けマルウェアをダウンロードして起動する。

ペイロードは目立たない形で隠されている。CloudSEKによると、スクリプトはPNG画像に偽装したWindowsプログラムをダウンロードする。Checkmarxは3つの別々の配布経路をたどった。

  1. Overlord RAT。 パッケージtlxbnhd、tldriver、mxdriverは、api.imghippo.comから偽のPNGを取得する。中には署名付きのAutoIt3プログラムと、Overlordを読み込む暗号化スクリプトが入っている。OverlordはGoで書かれたオープンソースのリモートアクセスツールだ。リモートアクセスツール、つまりRATは、攻撃者が離れた場所からマシンを操作できるようにする。
  2. 情報窃取型マルウェア。 native-runner、img-to-native、cdn-img-fetchの連鎖が、「cavecrew」というGitHubアカウントから暗号化されたプログラムを取得する。続いて、Checkmarxが「movinlike」と呼ぶ64MBのNode.js製スティーラーをダウンロードする。
  3. 長期稼働のダウンローダー。 function-flagは、discloud.app、squareweb.app、render.com、Discord CDNプロキシなど、入れ替わるホストから新しいペイロードを取得し続ける。

3つの経路はいずれもWindowsを狙っている。Checkmarxによると、ダウンローダーはmacOSとLinuxでは失敗する。頼っているWindows専用の設定が、そこには存在しないためだ。

何を盗み、どう隠れるか

Overlordには固定のサーバーアドレスがない。Checkmarxは「運営者がSolanaのトランザクションに投稿する暗号化されたメモを読み取り、復号し、その結果をサーバーリストとして使える」と書いている。Solanaは公開ブロックチェーンなので、運営者はマルウェアを変更せずにサーバーを移せる。

スティーラーが狙うのは、8種類のDiscordクライアントと、Chrome、Edge、Brave、Opera、Vivaldi、YandexのCookieだ。Telegram Desktopと、MetaMask、Phantom、Coinbaseの暗号資産ウォレットも狙う。盗んだデータはDiscordのWebhook経由で外に出る。CheckmarxはこのWebhookが2026年9月26日に作成されたとしている。

永続化の手口も目立たない。Checkmarxは、5分ごとに実行される\Maidenというスケジュールタスクを見つけた。その日付は2020年1月1日に書き換えられている。運営者はさらに、悪意あるコードをスペースで右へ大きく押しやり、通常のエディタ画面の端より先に置いている。

CloudSEKによると、運営者はmalfexkkj、malfex_user、cavecrewなど複数のハンドルで、自分の仕事に「Murizada」と署名している。

確認すべきパッケージ

パッケージ役割ダウンロード数(Checkmarx調べ)状況
function-flagダウンローダー37,419公開中、アドバイザリーなし
function-color記載なし300公開中、アドバイザリーなし
cdn-img-fetchスティーラーの連鎖643アドバイザリーの対象は1.0.0-1.0.1のみ
img-to-nativeスティーラーの連鎖967アドバイザリーあり
native-runnerスティーラーの連鎖872Checkmarxが掲載
tlxbnhdOverlord RAT139押収済み
tldriverOverlord RAT138押収済み
mxdriverOverlord RAT289押収済み

2社の数え方はわずかに異なる。CloudSEKは、function-flag、cdn-img-fetch、function-colorがまだインストール可能だとしている。同社は「アドバイザリーのない3つのパッケージが、防御側が今日対処できる唯一の現役の脅威だ」と書いている。cdn-img-fetchの食い違いについては、Checkmarxが理由を説明している。アドバイザリーMAL-2026-17320の対象はバージョン1.0.0と1.0.1だが、悪意あるバージョンは1.0.2と1.0.3だという。

Checkmarxによると、運営者が公開したパッケージは全部で12個で、悪意あるものが8個、無害なおとりが4個だ。10月1日までの1週間でも、これらのパッケージは3,017回ダウンロードされた。

今月は開発者が頻繁に標的にされている。10月初めには、別のキャンペーンが偽の採用担当者のリポジトリの中で、Gitのpost-checkoutフックにマルウェアを隠していると報じられた。

開発者にとっての意味

  • 今すぐロックファイルを検索する。 package-lock.json、yarn.lock、pnpm-lock.yamlで、表にあるすべてのパッケージ名を探す。推移的依存関係も含める。npm ls <name>を使うと、パッケージの入手元がわかる。
  • アドバイザリーだけを信用しない。 cdn-img-fetchのアドバイザリーは誤ったバージョンを対象にしており、公開中の2つのパッケージにはアドバイザリーがなかった。npm auditが問題なしでも、このキャンペーンに対して安全だとは言えない。
  • 可能な場所ではインストールスクリプトを無効にする。 npm install --ignore-scripts、または.npmrcのignore-scripts=trueで、postinstallのコードは実行されなくなる。スクリプトを許可するのは、必要なパッケージだけにする。
  • 一覧のパッケージを入れたWindowsマシンを調べる。 \Maidenというスケジュールタスクと、%APPDATA%\Microsoft\Windows\の下にあるnode_runtime_helper.exeというファイルを探す。Checkmarxは、ポート700のアドレス104.234.65.75もダウンロードサーバーとして挙げている。
  • スティーラーに盗まれるものを更新する。 マシンが被害を受けた場合は、DiscordとTelegramからサインアウトし、ブラウザーのセッションを消去し、保存したパスワードを変更し、ブラウザーのウォレットから資金を移す。

覚えておくべき数字は、function-flagの37,419回というダウンロード数だ。平凡な名前の小さなユーティリティ1つが、キャンペーンのほぼ全体を運んでいた。

出典

  1. MALFEX - A malicious npm postinstall no advisory has caught for fourteen months - CloudSEK
  2. MALFEX npm Malware Campaign: Three Payloads And An Adversary That Signs Their Work - Checkmarx

関連記事

GitHub Changelogの記事「Opt-in dist-tag permissions for npm trusted publishing」のスクリーンショット。下にGitHubの青いOctocatのアートワークがある。
開発ツール

npmのtrusted publishing、OIDCでdist-tagの移動に対応

npmのtrusted publishingで、短期間だけ有効なOIDCトークンを使い、latestなどのdist-tag(ディストタグ)を追加、移動、削除できるようになりました。初期設定ではオフで、npm 11.21.0が必要です。

Node.js 22.23.3のリリースノートにあるNotable Changesの一覧。OpenSSL 3.5.8への更新と2つのNode-APIの変更が含まれている。
開発ツール

Node.js 22.23.3 LTS、HTTP/2のuse-after-freeバグを修正

9月23日公開のNode.js 22.23.3 LTSは、HTTP/2のuse-after-free(ユースアフターフリー)バグを修正し、Node-APIにSharedArrayBufferのサポートを追加し、OpenSSL 3.5.8に移行しました。

HFS 3.2.1のGitHubリリースページ。7月13日にリリースされたもので、セキュリティ修正についてHorizon3.aiのZach Hanley氏とAnthropic Researchの貢献が記されています。
プログラミング

Rejetto HFS CVE-2026-61500、解説公開の翌日に悪用が始まる

HFS(HTTPファイルサーバー)3.0.0から3.2.0は、ログインの署名にMath.random()を使っています。AnthropicのMythosが見つけた欠陥です。攻撃は解説公開の翌日、10月3日に始まりました。3.2.1で修正されています。