本文へ移動
情シスのミカタ
ニュース約7分で読めます

npmの「imgdecode」に不正な仕掛け 読み込むだけで動き、まだ公開中

npmのパッケージ「imgdecode」に、Windowsの開発端末で読み込まれると、外から取ってきたプログラムを動かす仕掛けがあるとSafeDepが報告しました。10月19日朝の時点でnpmに残り、GitHubの告知もありません。版・痕跡・確かめ方と、入れていたときの対応をまとめます。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
npmの「imgdecode」に不正な仕掛け 読み込むだけで動き、まだ公開中

この記事のまとめ

  • npmの「imgdecode」1.0.0〜1.0.3は、Windowsで読み込むと外からプログラムを取って動かす仕掛けです。
  • インストール時の仕掛けを使わないため、--ignore-scriptsだけでは止まりません。10月19日朝もnpmに残っています。
  • ロックファイルとnpm lsで名前を探し、見つかったWindows端末は切り離して、別の端末から認証情報を替えます。
こんな方に#30代#40代#50代実務

npmは、JavaScriptの実行環境Node.jsで使う部品(パッケージ)の配布先です。ここで公開されている「imgdecode」に、Windowsの端末で読み込まれると、外からプログラムを取ってきて動かす仕掛けがあると、部品の安全を調べる会社のSafeDepが10月13日に報告しました。

編集部が10月19日6時49分(日本時間)にnpmのレジストリを確かめたところ、imgdecodeはまだ公開されたままでした。GitHubの脆弱性のデータベースにも、告知は出ていません。

imgdecodeとは何か

imgdecodeは「Node.jsのビルドの仕組みで使う画像の読み取りの部品」とうたうパッケージです。版は1.0.0〜1.0.3の4つで、最初の版は10月1日(日本時間)に出ました。公開したのはmalfexteste8というアカウントです。

SafeDepは、これをMALFEXと呼ばれる攻撃の一部としています。MALFEXは、Windowsで開発する人を狙ってnpmに不正なパッケージを出す攻撃で、Checkmarxが10月5日に分析を公表しました。その報告にimgdecodeの名前はありませんが、SafeDepはデータの置き場などが同じことから、つながりの「確度が高い」としています。

SafeDepのブログの記事の上の部分。題はMALFEX Moves Its npm Loader into a Native Windows DLLで、SafeDep Team、2026年10月13日とある。本文の最初の段落に、npmのパッケージimgdecodeがコンパイル済みのNode.jsのアドオンに不正な読み込みの仕組みを隠していること、9行のJavaScriptがWindowsのDLLを読み込むこと、Windowsのコンソールからrequire('imgdecode')を呼ぶと、DLLがGitHubから暗号化したシェルコードを取ってきて、元に戻し、新しいdllhost.exeのプロセスに流し込むこと、インストールの仕掛けは要らないこと、10月13日の時点でnpmでまだ入手できたことが書かれている
SafeDepのimgdecodeの報告。読み込むとDLLが外からデータを取って動かすと書く出典: SafeDep(引用)

読み込んだだけで動く仕組み

SafeDepの報告によると、imgdecodeはWindowsの64ビット向けのDLL(プログラムの部品のファイル)を同梱しています。アプリが require('imgdecode') で読み込むと、このDLLも読み込まれます。

1.0.1以降は、その時点でGitHubから暗号化したデータを取ってきて元に戻し、Windowsの正規のプログラム(dllhost.exe)の中に流し込んで動かします。

インストールのときに動く仕掛け(install script)を使わないため、npmの --ignore-scripts(その仕掛けを止める設定)だけでは止まりません。Checkmarxも、この設定だけに頼らないよう書いています。

一方で、画面(コンソール)に出力しているときだけ動きます。出力をファイルなどに流すCI(自動でビルドする仕組み)では動かず、開発者が自分の端末で動かしたときを狙った作り、というのがSafeDepの見立てです。

最後に何が動くかは確かめきれていない

imgdecodeが取ってくるファイルそのものは、SafeDepも手に入れられていません。同じ置き場の別のファイルをたどると、情報を盗み、遠隔で操る不正なプログラムに行き着きました。imgdecodeも同じものを動かすというのは、SafeDepの推定です。このプログラムは、ブラウザーのパスワードとクッキー、Discordのトークン、.envや.pemなどのファイルを狙う作りと読み取られています。

削除されたか(10月19日朝の状態)

項目 10月19日6時49分の状態
npmのimgdecode 公開中。1.0.0〜1.0.3が残り、最新は1.0.3
GitHub Advisory Database imgdecodeのmalwareの告知なし
OSV(脆弱性のデータベース) imgdecodeの記録なし
関係するimgbundleなど4つ npmが中身のない版(security holding)に置き換え済み

MALFEXでは、npmが不正なパッケージを消すと、同じ役目の別のパッケージがすぐに出てきました。imgdecodeもその1つで、10月12日の1.0.3はほかの部品なしで動きます(SafeDep)。

図解。左は年表で、9月26日にcdn-img-fetchなど3つが公開、9月29日にnpmがimg-to-nativeとnative-runnerを削除、9月30日に代わりのimgbundleとrunhelperが公開、10月1日にrunhelperが取り下げ、10月1日にimgdecode 1.0.0と1.0.1、10月2日に1.0.2が公開、10月5日にCheckmarxが分析を公表、10月8日にnpmがimgbundleとcdn-img-fetchを削除、10月12日にimgdecode 1.0.3が公開、10月13日にSafeDepが分析を公表。右上はimgdecodeの4つの版の違い、右中は動く条件として、読み込んだとき、Windowsの64ビット、画面に出力しているとき、インストールの仕掛けは不要の4つ。右下は10月19日6時49分の状態で、npmでは公開中、GitHubの告知とOSVの記録はなし、関係するimgbundleなど4つはnpmの空の版に置き換え済み、runhelperは取り下げ済み。下の帯に、告知が出ていないので名前で探すとある
MALFEXのnpmパッケージの年表と、imgdecodeの版・動く条件・10月19日の状態作成: 編集部 / もとの資料: SafeDep・npm・GitHub・OSV

告知が無いため、告知の一覧と照らして知らせる道具(Dependabotなど)では見つかりません。Checkmarxも、告知だけに頼る道具はMALFEXの一部を見落とすと書いています。

npmの集計では、9月30日から10月18日に1,088回ダウンロードされています(日は協定世界時)。SafeDepは、レジストリの写し(ミラー)や検査の道具の取得も含まれうるとしています。

公表された痕跡(IoC)

SafeDepの報告に載った痕跡のうち、社内で探すのに使うものです。URLなどは、誤って開かないよう一部を書き換えています。

種類 値
パッケージ imgdecode 1.0.0〜1.0.3、imgbundle 1.0.0〜1.0.2、runhelper 1.0.0
公開したアカウント malfexteste8
取ってくる先 hxxps://raw.githubusercontent[.]com/cavecrew/proj/main/banner.jpg
次の段の配布元 hxxp://104.234.65[.]75:700/setup.exe
送り先・遠隔操作 104.234.65[.]75 の7007番
端末に残る跡 %TEMP%\svc_update.exe、%APPDATA%\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe、タスクと自動起動の値 MicrosoftEdgeUpdateService

同梱のDLL(imgdecode.node)のSHA-256は次の3つです。

  • 1.0.0: d7b2f6d7da81301e7f76d6812d78f4a453439141d419831522ebf7cf5bf1c714
  • 1.0.1: 54d995c5be97408e96db72ecc27af1dd65716f96371df085c4ce681dca623d85
  • 1.0.2と1.0.3: a53946269ffcd25c7fe1fad358c189f144dcca4d736f2b5a8ebc517a8d929dd1

端末に残る跡は、SafeDepが盗むプログラムの中の文字から読み取ったものです。raw.githubusercontent.comはふつうの開発でも使うため、Checkmarxはドメインごと止めず、決まったURLだけを止めるよう勧めています。

使っていたかの確かめ方

  1. ソースのリポジトリで、ロックファイルを名前で探します。
grep -rnE "imgdecode|imgbundle|runhelper" --include=package-lock.json --include=npm-shrinkwrap.json --include=pnpm-lock.yaml --include=yarn.lock .
  1. 各プロジェクトで npm ls imgdecode --all を動かします。端末全体に入れたものは npm ls -g imgdecode で見ます。--allを付けると、ほかの部品を通して入ったものまで出ます。
  2. 社内のnpmの写し(Nexus、Artifactory、Verdaccioなど)に、取り込まれていないかを見ます。

npmから消えても、ロックファイルに書いた版は残ります(Checkmarx)。node_modulesを消していても、一度読み込んだ端末は調べます。

入れていたときにやること

SafeDepは、imgdecodeを読み込んだWindowsの端末を「侵害されたかもしれない」と扱うよう勧めています。

  1. 端末をネットワークから切り離します。不正な処理はメモリーの上で動くため、再起動の前にメモリーを保全します(SafeDep)。
  2. 別のきれいな端末から、その端末に保存した、または使った認証情報を替えます。ブラウザーのパスワードとクッキー、クラウドのキー、SSHの鍵、npmとGitHubのトークンなどです(SafeDep・Checkmarx)。
  3. SafeDepは、盗むプログラムにイベントログを書き換える働きがあると見ています。端末の中のログだけでなく、外に集めたログと照らします。
  4. 社内のnpmの写しやキャッシュから消し、取り込みを止めます。npmで消されても、社内に取り込んだ写しは残ります(Checkmarx)。

影響する会社・しない会社

  • 影響する: 開発部門や委託先が、Windowsの端末でimgdecodeを入れて動かした会社。とくに、開発者がコマンドの画面から動かした場合です
  • 影響する: imgdecodeを社内のnpmの写しに取り込んだ会社。消さないかぎり、ほかの開発者も入れられます
  • 確認が要る: Node.jsの開発を委託している会社。委託先の端末とロックファイルも、名前で探してもらいます
  • 確認が要る: MacやLinux、出力を流すCIだけで入れた会社。動かない条件ですが、不正なパッケージなので外します
  • 影響しない: ロックファイルにも社内の写しにも、imgdecode・imgbundle・runhelperの名前が無い会社

情シスが今日やること

  1. 開発部門と委託先に、名前で探すよう頼みます。 通知を待たずに上の方法で探してもらい、今日中に結果をもらいます。
  2. 社内のnpmの写しで、imgdecodeを止めます。 取り込み済みなら消します。
  3. EDR(端末を見張る道具)で、node.exeがdllhost.exeを起動した記録を探します。 上の跡のファイルとタスクも探します。
  4. 見つかった端末は切り離し、別の端末から認証情報を替えます。 npmとGitHubのトークン、クラウドのキーから先に替えます。
  5. 新しい部品を入れる前の決まりを見直します。 公開から日が浅く、使う人がほとんどいない部品を入れるときに、誰が確かめるかを決めておきます(編集部の補足)。

開発用の端末の権限は、開発者に管理者権限を渡す?開発部門と情シスが折り合う決め方で扱っています。

よくある質問

Q社内でimgdecodeを使っているか、すぐ分かる方法はありますか?

Aロックファイル(package-lock.json、pnpm-lock.yaml、yarn.lockなど)を名前で探し、各プロジェクトで npm ls imgdecode --all を動かします。--allを付けると、ほかの部品を通して入ったものまで出ます。社内のnpmの写し(Nexusなど)も名前で探します。

QDependabotなどの警告が出ていません。安心してよいですか?

Aいいえ。10月19日朝の時点で、GitHub Advisory DatabaseとOSVにimgdecodeの告知はありません。告知の一覧と照らして知らせる道具では見つからないため、名前で探します。

QMacやLinux、CIのサーバーで入れていた場合はどうなりますか?

ASafeDepの報告では、同梱のDLLはWindowsの64ビット向けで、出力をファイルなどに流すCIでは動かないとしています。それでも不正なパッケージなので、依存から外し、社内の写しやキャッシュからも消します。

Q見つかった端末は、再起動してから調べればいいですか?

ASafeDepは、不正な処理がメモリーの上で動くため、再起動の前に端末を切り離し、メモリーを保全するよう勧めています。認証情報は、その端末ではなく別のきれいな端末から替えます。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月19日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします