Windows狙うnpmパッケージ「imgdecode」が判明、ネイティブアドオンにローダーを隠蔽
要点
-
サプライチェーン攻撃キャンペーン「MALFEX」に関連する悪意あるnpmパッケージ「imgdecode」の存在が明らかになった。
-
本パッケージはコンパイル済みのNode.jsネイティブアドオンを悪用し、外部から取得した暗号化シェルコードをWindowsの正規プロセスへ注入する。
-
攻撃者はnpmによる過去パッケージの削除措置に対抗し、数時間から数日のうちに代替モジュールを投入する更新を繰り返していた。
-
当初は複数パッケージの連携による多段攻撃だったが、最新版では外部依存を排除し、単独で攻撃処理を完結させる設計へと変化している。
-
セキュリティ企業SafeDepなどの調査により、Windows環境を標的とするサイバー攻撃キャンペーン「MALFEX」の一環として、悪意あるnpmパッケージ「imgdecode」が配布されていたことが判明した。本パッケージは2026年9月30日に登録され、Node.jsのネイティブ拡張を利用して悪意あるコードを正規プロセスに注入する機能を備えている。公表時点で979回のダウンロードが記録されており、プラットフォームによる削除と攻撃者による再投入の攻防が続くなかで、最新版が依然として入手可能な状態にあったという。
長期キャンペーン「MALFEX」の概要
CheckmarxやCloudSEKが以前より報告している「MALFEX」は、Windows環境の侵害を狙い2023年8月6日から展開されている長期的な攻撃活動の名称だ。正体不明の攻撃者が「malfexkkj」や「malfexteste2」など複数の公開者アカウントを使い分け、npm(Node.jsのパッケージ管理システム)上で不正パッケージを継続して配布している。
これまでに確認された8種類のパッケージでは、遠隔操作を行うOverlord RAT(遠隔操作用トロイの木馬)のローダーや、3つのモジュールが連携して情報窃盗プログラムを動作させる手口が確認されていた。また、パッケージ導入時にスクリプトを自動実行する「postinstall」フックを悪用し、外部サーバーからバイナリを取得する経路も存在していたという。今回の「imgdecode」は、アカウント「malfexteste8」によって2026年9月30日に公開された最新のモジュールである。
ネイティブアドオン内部にローダーを隠す手口
SafeDepの分析によると、「imgdecode」はコンパイル済みのNode.jsネイティブアドオン(C/C++などで書かれたバイナリ拡張機能)内部にローダーを隠蔽している点が特徴となっている。
パッケージに含まれるJavaScriptコード自体は9行のみで構成され、WindowsのDLL(動的リンクライブラリ)を読み込む処理だけを担当する。コンソールから require('imgdecode') が呼び出されると、このDLLがGitHub上のリポジトリから暗号化されたシェルコード(標的上で直接実行される機械語コード)をダウンロードする。その後データを復号し、Windowsの正規プロセスである「dllhost.exe」を新規起動して内部へ注入する仕組みだ。
初期版のDLLには開発者のターミナル環境で動いているかを判定する機能が含まれており、外部リポジトリ「cavecrew/proj」から画像ファイル「banner.jpg」を取得し、暗号鍵「nif-runtime-2027」を用いて復号を実行していたという。
削除措置に対する攻撃者の迅速な再編
この脅威アクターは、公開された調査報告やnpm運営側による削除措置に対して極めて機敏に対処していることが時系列の分析から明らかになっている。
2026年9月26日に公開された連携パッケージのうち2つ(「native-runner」と「img-to-native」)が9月28日にnpmによって削除されると、攻撃者は2日後の9月30日未明に代替となる「imgbundle」と「runhelper」を相次いで公開した。同日16時13分に「runhelper」が非公開化されると、約6時間後の22時32分には「imgdecode」の初期版が登録された。
さらに同日23時7分にバージョン1.0.1、翌10月1日には1.0.2を公開。npmが10月7日と8日に代替パッケージ群を順次削除した際も、攻撃者は10月11日に修正版「imgdecode」1.0.3を投入するなど、公開を維持する動きを執拗に繰り返していた。
複数モジュール連携から単独完結型への変化
攻撃手口の変遷を見ると、複数パッケージの連携から単体完結型へと洗練されている。
初期のチェーンでは、「cdn-img-fetch」がGitHubから画像を落として暗号データを抽出し、「img-to-native」が暗号鍵「malfexteam2027」で復号してGo言語実行ファイルを出力、それを「native-runner」が起動して外部IPアドレス(104.234.65[.]75:700)から情報窃盗ツール「setup.exe」を取得する多段階構成だった。代替の「runhelper」では、FFI(異なる言語間で関数を呼び出す仕組み)モジュール「Koffi」を用いて画像内のシェルコードを実行する手法が試みられた。
そして「imgdecode」では、バージョン1.0.1以降でDLL単体が取得と復号を行うよう改編され、最新の1.0.3では他パッケージへの依存が完全に排除された。他のMALFEXパッケージを介さず、単独で攻撃処理を完結させる仕様に進化したとSafeDepは説明している。
背景
オープンソースのパッケージレジストリでは、不正モジュールが削除されても、攻撃者が構成や手法をわずかに変えて即座に再公開を試みる事例が継続して確認されている。