MALFEX npm 惡意套件攻擊:三條感染路徑,攻擊者還「署名」留記號
資安研究
2026-10-05 by 高田鑑識
本文整理自 Checkmarx Zero 研究團隊發表的〈MALFEX npm Malware Campaign: Three Payloads And An Adversary That Signs Their Work〉,內容涵蓋攻擊手法、受影響套件、入侵指標(IoC)與處置建議。
Checkmarx Zero 揭露一起名為 MALFEX 的 npm 供應鏈攻擊活動。研究人員判斷背後是同一名攻擊者,自 2023 年 8 月 6 日起持續在 npm 發佈套件,目前已知 12 個,其中 8 個含惡意程式碼,另外 4 個(function-ascii、malfapi、malfex-webhook-node、centralizemiddle)不含惡意程式碼,用途是掩護。惡意套件累計下載 40,767 次,僅 2026 年 10 月 1 日前一週就有 3,017 次,攻擊目標為 Windows 系統。
重點摘要
- 三種惡意酬載:Overlord 遠端存取木馬(RAT,以 Go 撰寫的開源木馬)、movinlike 竊密程式(鎖定 Discord、瀏覽器、Telegram 與加密貨幣錢包),以及 function-flag 下載的尚未取得之 node.exe。
- 執行方式:npm 的 preinstall/postinstall 腳本,以及套件被載入時就執行的程式碼。
- 仍可安裝:截至 2026 年 10 月 1 日,function-flag、function-color、cdn-img-fetch 仍可從 npm 安裝。
- 公告不完整:function-flag、function-color 完全沒有惡意套件公告;cdn-img-fetch 的公告只涵蓋 1.0.0 與 1.0.1,漏掉同樣惡意的 1.0.2 與 1.0.3。只依賴公告資料庫的工具會漏掉這些套件。
- 立即行動:封鎖全部 8 個惡意套件;若曾在 Windows 上安裝,應隔離主機、移除持久化機制,並從乾淨的裝置更換外洩的帳密。
受影響套件與公告狀態
8 個惡意套件中,有 6 個在 2026 年 9 月 22 日至 30 日之間取得開源漏洞資料庫(OSV)的惡意套件公告。下表整理各套件的惡意版本、角色、公告與下載數(下載數為 npm 公開統計,截至 2026 年 10 月 1 日):
| 套件 | 惡意版本 | 角色 | 惡意套件公告 | 狀態(2026/9/29) | 累計下載 | 近一週下載 |
|---|---|---|---|---|---|---|
| function-flag | 1.7.3、4.0.0、3.0.0、2.3.5–2.3.9 | 安裝後執行的下載器 | 無 | 仍可安裝 | 37,419 | 533 |
| function-color | 1.7.3、1.0.0 | 引入 function-flag 的外層套件 | 無 | 仍可安裝 | 300 | 2 |
| cdn-img-fetch | 1.0.0–1.0.3 | 竊密鏈:下載惡意圖片 | MAL-2026-17320(僅涵蓋 1.0.0、1.0.1) | 仍可安裝 | 643 | 643 |
| img-to-native | 1.0.0–1.0.3 | 竊密鏈:解密並落地執行檔 | MAL-2026-17216 | 已被 npm 接管 | 967 | 967 |
| native-runner | 1.0.0–1.0.3 | 引入 img-to-native 的外層套件 | MAL-2026-17218 | 已被 npm 接管 | 872 | 872 |
| tlxbnhd | 0.0.1 | Overlord RAT 載入器 | MAL-2026-16385 | 已下架 | 139 | 0 |
| tldriver | 0.0.1 | Overlord RAT 載入器 | MAL-2026-16384 | 已下架 | 138 | 0 |
| mxdriver | 0.0.1、0.0.2 | Overlord RAT 載入器 | MAL-2026-16383 | 已下架 | 289 | 0 |
| 合計 | 40,767 | 3,017 |
要注意的是,下載數代表套件在公開套件庫的觸及範圍,不等於受感染主機數。function-flag 的部分下載來自 function-color 的相依引入,而且下載也不代表套件一定裝在 Windows 上。目前沒有任何正常或廣泛使用的套件相依於這些套件,因此風險僅限於直接安裝這些套件名稱的系統;研究人員也未發現針對特定地區或組織的跡象。
攻擊者在作品上「簽名」
這起攻擊活動的名稱,直接取自攻擊者自己的品牌。MALFEX 字樣出現在:
- 5 個 npm 發佈者帳號:malfexkkj、malfex_user、malfexteste2、malfexteste3、malfexteste4
- 惡意程式碼儲存庫的 git 作者信箱:corpmalfex[@]gmail.com
- [email protected] 的 README,其中將作品歸功於 MALFEX 團隊,並列出擁有者名稱 Murizada
- 竊密鏈的 AES 解密金鑰:malfexteam2027
對鑑識人員而言,這類重複使用的識別特徵,是把不同套件串連起來、歸因到同一攻擊者的重要線索。
路徑一:Overlord RAT 載入器(tlxbnhd、tldriver、mxdriver)
這三個套件各自都能獨立運作。經混淆的 preinstall.js 與 postinstall.js 會在每次執行 npm install 時觸發,從 api.imghippo.com 下載惡意檔案,存成 gldriver_pre_core.exe 或 gldriver_pre_asset.exe 後執行,接著刪除自身。腳本雖然也寫了 macOS 與 Linux 的啟動指令,但酬載是 Windows 執行檔,因此只有 Windows 會受影響。
這個檔案雖然以 PNG 圖片的形式提供,實際上是 Microsoft IExpress 自解壓縮檔,內含一個具合法簽章的 AutoIt3 直譯器與加密的 AutoIt 腳本(Oxygen.a3x)。腳本經過多層解碼——XOR 編碼字串、RC4 加密與 LZNT1 壓縮——取出 Overlord RAT。根據研究人員對腳本的靜態分析,它接著會以程序挖空(process hollowing)手法,將 Overlord 注入 Windows 內建的已簽章程式 TapiUnattend.exe,並把父程序偽裝成 explorer.exe(這一步是從程式碼推斷,並未在實際執行時觀察到)。
路徑二:Discord 與瀏覽器竊密程式(native-runner → img-to-native → cdn-img-fetch)
這條鏈的套件都沒有安裝腳本,惡意程式碼在套件被 require 載入時才執行:
- native-runner 只是外層,用來引入 img-to-native。
- img-to-native 引入 cdn-img-fetch 的唯一目的就是觸發它;cdn-img-fetch 一被載入,就從 GitHub 儲存庫 cavecrew/proj 下載 banner.png。
- img-to-native 最多等待 120 秒讓圖片下載完成,找出附加在 PNG 結尾標記之後的資料,以 AES 搭配金鑰 malfexteam2027 解密,寫入 %APPDATA%\Microsoft\Windows\node_runtime_helper.exe。
- 這支 Go 撰寫的下載器再從 104[.]234.65.75:700 下載 setup.exe,也就是包裝成 Windows 執行檔、約 64 MB 的 Node.js 竊密程式 movinlike。
路徑三:function-flag 下載器(function-color → function-flag)
function-flag 是獨立運作的下載器,也是整起攻擊中存在最久的部分,自 2025 年 7 月起就帶有惡意程式碼。每個惡意版本的 index.js 都內含下載程序,且各自從不同網址下載酬載。
以目前最新的 1.7.3 為例:postinstall 腳本執行 example.js,以「Bloody」字型呼叫套件的 ASCII 藝術字函式;這個字型參數會觸發隱藏程序,從巴西應用程式託管服務上的 cdnzona.discloud.app 下載 node.exe,存到 %APPDATA%\node.exe 並以隱藏視窗執行。
各惡意版本的下載來源如下(2.3.4 不含惡意程式碼;3.0.0 的網址在現有資料中不完整):
| 版本 | 惡意檔案下載網址 | 檔名 |
|---|---|---|
| 1.7.3 | hxxps[:]//cdnzona.discloud.app/node.exe |
node.exe |
| 4.0.0 | hxxps[:]//apicdn.squareweb.app/attachments/1392577835742265576/1395570372077682768/svchost.exe |
svchost.exe |
| 3.0.0 | hxxps[:]//bypasscdn.onrender.com/hxxps[:]//cdn[.]discordapp[.]com/attachments/1392577835742265576/1395570372077682768/svchost.exe |
svchost.exe |
| 2.3.9 | hxxp[:]//45.89.30.194/attachments/1242231519943069778/1270557692171128915/nocry.exe |
nocry.exe |
| 2.3.8 | hxxp[:]//45.89.30.194/attachments/1255944996503158885/1263421457598386237/malfex.exe |
malfex.exe |
| 2.3.7 | hxxp[:]//191.96.81.101/attachments/1255944996503158885/1259416184265244682/malfex.exe |
malfex.exe |
| 2.3.6 | hxxps[:]//apizona.onrender.com/attachments/1255944996503158885/1259416184265244682/malfex.exe |
malfex.exe |
| 2.3.5 | hxxp[:]//51.137.158.178/download |
(網址未顯示) |
程式碼中還有幾個值得注意的細節:
- 整段下載程序包在空的 catch 區塊裡,下載失敗(例如主機離線)時,安裝過程仍會正常完成、不會出現任何錯誤。
- 非 Windows 環境沒有 process.env.APPDATA 變數,程序會無聲失敗,這也是只有 Windows 受影響的原因。
- 惡意程式碼前方塞了大量空白,讓它落在一般程式碼編輯器的可視範圍之外。
- 攻擊者在發佈惡意的 4.0.0 之後,又以較低的版本號 1.7.3 推出新的惡意版本。
- function-color 本身不含酬載,只是把 function-flag 列為相依套件。
1.7.3 的下載主機目前沒有回應,因此研究人員尚未取得其酬載,也還沒有證據顯示 function-flag 與 movinlike 有關。不過 postinstall 腳本在每次安裝時仍會嘗試下載,主機隨時可能恢復提供惡意檔案。
持久化機制
Overlord RAT 載入器會把自己複製到一個假廠商目錄,並註冊排程工作:
- 安裝目錄:%LOCALAPPDATA%\ScopeSmart Technologies Inc\,內含 AutoIt3.exe、h.a3x、SmartScope.vbs(ScopeSmart Technologies Inc 並非真實公司)
- 排程名稱:\Maiden,執行 AutoIt3.exe h.a3x,每 5 分鐘重複一次、無結束時間
- 開始日期回溯為 2020/1/1,作者欄位為「Welcome」,備註欄位為「Wichita」
回溯日期是為了避開「近期新增排程」的檢查;由於完全沒有使用登錄檔 Run 機碼,只掃描 Run 機碼也會漏掉這個感染。SmartScope.vbs 則以字串拼接的方式組出 Wscript.Shell,規避搜尋 CreateObject(“Wscript.Shell”) 的掃描規則。
命令與控制(C2)及資料竊取
Overlord RAT 從 Solana 區塊鏈讀取 C2 位址
Overlord 沒有寫死的 C2 位址,而是讀取攻擊者在 Solana 交易中發佈的加密備註,解密後作為伺服器清單。更換伺服器只需要發一筆新交易,因此單純關閉伺服器無法瓦解這套定址機制。研究人員分析的版本尚未設定 Solana 位址或伺服器清單,測試期間也未觀察到 C2 流量。
Overlord 著重於監控與控制,而非大量竊取帳密,功能包括螢幕擷取、鍵盤側錄、剪貼簿擷取、作用中視窗監控、檔案搜尋、遠端 Shell,以及透過虛擬顯示驅動程式建立的隱藏桌面,讓攻擊者在使用者看不見的情況下操作電腦。
movinlike 透過 Discord Webhook 外傳資料
movinlike 鎖定 8 種 Discord 用戶端:Discord、Discord Canary、Discord PTB、Discord Development、Lightcord、Vesktop、Nightcord 與 Bluecord。它會在用戶端的啟動腳本中注入程式碼竊取驗證權杖,再利用權杖收集個人資料、已儲存的付款方式、訂閱、伺服器、好友與連結帳號。
此外,它也會竊取 Chrome、Edge、Brave、Opera、Opera GX、Vivaldi 與 Yandex 瀏覽器的 Cookie 與已儲存登入資料,複製 %APPDATA%\Telegram Desktop\tdata 中的 Telegram 桌面版工作階段,以及 MetaMask、Phantom、Coinbase Wallet 等錢包擴充功能與桌面錢包的資料。所有資料壓縮後切成 25 MB 的分段,傳送到寫死的 Discord Webhook。研究人員確認該 Webhook 仍在運作,建立於 2026 年 9 月 26 日,位於一個新建立的 Discord 伺服器中。
function-flag 持續輪換酬載主機
每個惡意版本都指向不同網址,檔名包括 node.exe、svchost.exe、nocry.exe 與 malfex.exe,其中多個網址沿用 Discord 附件路徑格式,3.0.0 更透過代理轉送 Discord CDN 的附件連結。
研究人員確認的事實包括:8 個含惡意程式碼的套件曾發佈至 npm;截至 2026 年 9 月 29 日仍有 3 個可安裝,其中 2 個沒有公告;查證時酬載基礎設施仍在運作,包括 Overlord 酬載網址、GitHub 上的惡意圖片、setup.exe 伺服器與 Discord Webhook。
入侵指標(IoC)
網址與主機(網址已改為不可點擊的格式)
| 指標 | 用途 |
|---|---|
hxxps[:]//api.imghippo.com/files/hOG8244hc.png |
Overlord RAT 惡意檔案(以 image/png 提供) |
www.image[.]com |
mxdriver 使用的第二個 Overlord RAT 投遞網域 |
hxxps[:]//raw.githubusercontent.com/cavecrew/proj/main/banner.png |
竊密鏈惡意圖片(cdn-img-fetch 1.0.0–1.0.2) |
hxxps[:]//raw.githubusercontent.com/cavecrew/proj/main/banner.jpg |
竊密鏈惡意圖片(cdn-img-fetch 1.0.3) |
hxxp[:]//104.234.65.75:700/setup.exe |
movinlike 下載點 |
hxxp[:]//104.234.65.75/setup.exe |
movinlike 備用下載點 |
discord.com/api/webhooks/1553545982975811594/… |
movinlike 資料外傳用 Webhook |
| function-flag 各版本網址 | 見上方 function-flag 表格 |
api.imghippo.com、raw.githubusercontent.com、discord.com、onrender.com 都是共用服務,請封鎖特定路徑,而非整個網域。
檔案雜湊值(SHA256)
| 檔案 | SHA256 |
|---|---|
| Overlord RAT 載入器(偽裝為 PNG) | 9aba4685af072231aee049e1a5e294965580001b364d7d00152d84fcec1ce793 |
| AutoIt3.exe(已簽章,取自壓縮檔) | 5d69a932a077fee044b193c28e84564143f5c7e51079ab48e88fef74ab0b77b7 |
| Oxygen.a3x/h.a3x(加密腳本) | fd199d3977e1a2945b6031fc8696660a980e4f4617899baa045efe7ccbc8de67 |
| Overlord RAT(解碼後) | 2989244eac2a4bc7a13a09dec003e5c05ef7c80b2afe0958ce25042d5b804210 |
| banner.png(目前版本) | 4f4f7d64139bde6d458a061c7fb7dd247f70f60a1ab47d87fd3634656586c106 |
| 竊密鏈下載器(9/25) | 889e13e227bc2b762178b88c35c691db3256e72be64d92ff1f381d29a2789849 |
| 竊密鏈下載器(9/25) | e7f86f6cc4380db66d333eaf6f7dfc2c12d232c2bcd526434681245dea25efa4 |
| 竊密鏈下載器(9/25) | ff826d2778ea1d40ce8ebfd9d66ecc86d4c811f5654b8a466a7e220ebbbc6807 |
| 竊密鏈下載器(9/26) | 2f268ca76ab27971d8b16bd4ded26e1f9cd3d4460b894af2d4bdf89f0ab7ec4b |
| tlxbnhd/scripts/postinstall.js | 7acf331117900179b483142f216fdcb22c671eb0b1971abd57f01bc036248a6e |
| movinlike | c9c374afba4658dff15f71801e88c4d199c91dd2622d72c7b0c55577c8f73437 |
| [email protected]/index.js | c7cf2323e4923428984297db7715d75fec5b964fe65c325b53e3fa360f3b8d86 |
| [email protected]、1.0.1/index.js | 430300450f5acbd69c29f02d8c2e243f7d1d6202d1826f6e4d7715f95c47299b |
| [email protected]/index.js | 4cba0c785e66d517eabd0164f34a9c2d04549da93b5ee3eebdce5558daa2f47c |
| [email protected]/index.js | 5c933aa533721fa293b284170dd4611a4d88f88cc89f2d9c28ea4e22305b1f75 |
| [email protected] banner.jpg | 8f7ed69fb5505b57f06e673826779d459f7735739756de73a6d3347a9c8ea0cc |
| [email protected]/index.js | d54853d6be467567d9f22d7f22ac48214df52c1f9c7a503930e901286423044a |
| [email protected]/example.js | 886b84f83a0f760e664046ba40d8c800b7d0cf72190e13ca031ee5cf50f45bee |
movinlike 很容易重新編譯而改變雜湊值,建議搭配下方的主機行為指標一併比對。
主機跡證
| 路徑或識別項 | 說明 |
|---|---|
%LOCALAPPDATA%\ScopeSmart Technologies Inc\\ |
Overlord RAT 載入器安裝目錄(內含 AutoIt3.exe、h.a3x、SmartScope.vbs) |
排程工作 \Maiden |
Overlord RAT 持久化機制 |
<套件目錄>\gldriver_pre_core.exe、gldriver_pre_asset.exe |
Overlord RAT 落地檔案(執行後自刪) |
%APPDATA%\Microsoft\Windows\node_runtime_helper.exe |
竊密鏈解密後的下載器 |
%TEMP%\._cif_data |
竊密鏈中繼檔案 |
%APPDATA%\node.exe |
function-flag 1.7.3 下載的惡意檔案 |
如何檢查是否受影響
1. 檢查完整相依樹(含間接相依)
npm ls function-flag function-color cdn-img-fetch img-to-native native-runner tlxbnhd tldriver mxdriver --all
2. 搜尋鎖定檔:套件即使已從 npm 下架,舊版本仍可能被鎖在專案的鎖定檔中。
grep -nE 'function-flag|function-color|cdn-img-fetch|img-to-native|native-runner|tlxbnhd|tldriver|mxdriver' \
package-lock.json npm-shrinkwrap.json pnpm-lock.yaml yarn.lock 2>/dev/null
3. 在 Windows 主機上檢查跡證(PowerShell)
$paths = @(
"$env:LOCALAPPDATA\ScopeSmart Technologies Inc",
"$env:APPDATA\Microsoft\Windows\node_runtime_helper.exe",
"$env:APPDATA\node.exe"
)
$paths | ForEach-Object
Get-ScheduledTask -TaskName "Maiden" -ErrorAction SilentlyContinue | Format-List *
只要有任何一項為 True,或找到 Maiden 排程工作,都應視為可能已遭感染。另外也請檢視代理伺服器與 DNS 紀錄,確認是否曾連線到上方 IoC 表中的網址與主機。
處置與封鎖建議
若曾在 Windows 上安裝受影響套件
- 即使 node_modules 已刪除,仍應視為主機已遭入侵。
- 將主機隔離於網路之外,並保全日誌與檔案系統證據以供調查。
- 刪除 \Maiden 排程工作,移除 ScopeSmart Technologies Inc 目錄、node_runtime_helper.exe 與 %APPDATA%\node.exe(如存在),移除前先保留鑑識副本。
- 從已知乾淨的裝置,更換 Discord、瀏覽器中儲存的帳號,以及在該主機上使用過的所有帳號密碼;終止 Telegram 的作用中工作階段,並將加密貨幣資產移轉到新錢包。
- 檢查 Discord 帳號是否有異常付款,並檢查其他帳號是否有來自陌生地點的登入紀錄。
- 從私有套件庫、代理與快取中清除受影響套件。公開套件庫下架,不會移除已存在內部的副本。
封鎖這起攻擊活動
- 在套件庫代理上封鎖全部 8 個惡意套件,包含外層套件。只封鎖 function-flag 擋不住 function-color,只封鎖 img-to-native 也擋不住 cdn-img-fetch。
- 封鎖對 IoC 表中特定網址的對外連線,並將 104.234.65.75 設為黑洞路由;但不要整個封鎖 discord.com 或 raw.githubusercontent.com。
- 不要只依賴 –ignore-scripts。它能擋下 Overlord RAT 載入器與 function-flag,但竊密鏈沒有安裝腳本,在套件被載入時就會執行。
- 套件從套件庫下架時,也要一併檢視它宣告的相依套件。例如 img-to-native 被接管後,它所相依的 cdn-img-fetch 仍可安裝。
套件庫的狀態可能隨時變動,採取行動前請重新確認各套件的狀態與公告。
高田觀點
MALFEX 集結了近年供應鏈攻擊的典型特徵:用正常套件做掩護、以外層套件間接引入、把惡意內容藏在圖片中,以及回溯排程日期等反鑑識手法。對事件調查而言,這提醒我們不能只看 package.json 的直接相依,也不能只依賴公告資料庫或單一偵測規則;鎖定檔、排程工作的實際內容與對外連線紀錄,往往才是還原感染路徑的關鍵證據。




