
假面試 coding test 借 SVG 藏毒:撳 npm run dev 前要查咩
Elastic 發現經改動嘅 Next.js 專案,開發者一開 server 就會執行惡意程式,憑證亦可能外洩
收到陌生公司畀嘅 coding test,好多人第一個反應都係 clone repo、裝 dependency,再打句 npm run dev 睇吓個網站行唔行。Elastic Security Labs 追蹤嘅 REF9403 活動就捉住呢個習慣:一個功能正常嘅電商專案,背後已經加咗偷資料同遙控電腦嘅程式。iThome 報道整理咗事件重點,不過技術細節同歸因要以 Elastic 一手報告為準。暫時冇公開證據顯示呢批攻擊特別針對香港。
歸因去到邊,要講清楚
Elastic 將活動形容為 DPRK-aligned,又話程式碼、行為、通訊路徑同基建都同 Contagious Interview、OTTERCOOKIE 過往活動重疊。研究員據此認為樣本同相關威脅活動有關,但仍然證明唔到北韓政府直接下令發動今次攻擊。Microsoft 同 MITRE 記錄顯示,Contagious Interview 至少由 2022 年起已經用招聘接觸、技術面試同 coding assignment 引開發者執行惡意專案,今次就換咗更隱蔽嘅包裝方法。

圖片:Elastic Security Labs
SVG 點樣參與攻擊
就呢條感染鏈,單純預覽 SVG 唔等於已經中招。攻擊者先將經編碼嘅 JavaScript 拆成多段,塞入一批國旗 SVG 嘅 HTML comment。專案內嘅 serverValidation.js 會按檔名次序讀取每張圖、抽出 comment、重新組合內容,再用自訂 Base64 解碼方法處理,最後交畀 eval() 執行。server/index.js 每次啟動都會叫呢段程式,而 package.json 入面嘅 dev 同 start script 都會開呢個 server。
SVG 平時俾人當成靜態圖片,不過本質上仍然係文字檔;只要專案程式主動讀取,圖檔內容一樣可以變成輸入資料,甚至俾 eval() 當程式跑。呢個做法亦解釋咗點解淨係掃 JavaScript 檔未必夠。Elastic 發表報告嗰陣,多個相關壓縮檔喺 VirusTotal 都係零偵測,但零告警只代表掃描器當時未認到,唔代表個 repository 安全。
撳掣前先查啟動路線
第一輪檢查唔使安裝任何嘢。先直接打開 package.json,睇清楚 preinstall、install、postinstall、prepare、dev 同 start 實際會叫邊啲檔案。正常 Next.js 前端專案突然另開 Node server、執行 shell command、下載檔案,或者靜靜食晒 error,都值得追落去。再用 rg -n 'eval|new Function|child_process|execSync|spawn|serverValidation|readFileSync|base64' --glob '!node_modules/**' --glob '!package-lock.json' --glob '!pnpm-lock.yaml' --glob '!yarn.lock' . 搜全個 repo,逐個追返呼叫來源。
跟住檢查 asset。rg -n '<!--|[A-Za-z0-9+/]{120,}={0,2}' --glob '*.svg' . 可以快速搵出 SVG comment 同大段疑似 Base64 文字;檔案尺寸異常、幾十張圖各自多咗相似 comment、啟動檔會遍歷 asset directory,都係明顯警號。如果專案聲稱由公開 template 改出嚟,可以同原版逐檔比較。研究惡意 repository、IOC 或程式碼時,要留喺隔離環境,編採機同日常工作電腦都唔應該直接執行。
真係要跑,就清走工作身份
測試陌生專案最好用可還原 snapshot 嘅 disposable VM,關掉 shared clipboard 同共享 home folder,初段亦可以封住對外網絡。用 container 都要留神:唔好掛載 ~/.ssh、雲端設定、Git credential、SSH agent socket、Docker socket或者整個家目錄,只複製測試所需檔案入去。container 一旦攞到 host socket 或工作憑證,隔離效果會大幅縮水;disposable VM 嘅安全邊界通常清楚啲。
測試環境亦唔好登入日常 browser profile、GitHub、AWS、Azure、npm registry 或加密貨幣錢包。Elastic 今批樣本會搵 browser 登入資料、SSH key、shell history、.env、雲端設定同原始碼。值得補充係,今批樣本個排除清單避開咗 .claude、.cursor、.gemini 同 .windsurf;不過 JFrog 6 月披露嘅另一批 Lazarus-linked npm 惡意程式已經會搜尋相關 AI coding 工具目錄,所以呢啲設定、token 同 MCP 連線資料都應該隔開。
已經跑過點處理
如果陌生 coding test 已經喺工作電腦啟動,先斷開網絡同停止繼續測試,唔好只刪走個 repo 就當處理完。由另一部可信裝置撤銷同更換 GitHub、npm、雲端、SSH、browser session 同其他可能外洩嘅憑證;公司電腦就盡快交畀 IT 或 security team 查程序、對外連線同存取紀錄。呢類程式有遙控指令能力,確認清理唔到時,重建系統通常穩陣過繼續估仲有冇殘留。
參考來源
- iThome — 北韓駭客假面試攻擊,SVG圖檔藏惡意程式竊取開發者資料 — original report
- New North Korean campaign uses fake coding interviews to steal developer credentials — REF9403 一手技術報告,包含感染鏈、樣本分析、IOC 同歸因尺度。
- Contagious Interview: Malware delivered through fake developer job interviews — Microsoft 對假招聘流程、惡意 repository 同 OTTERCOOKIE 演變嘅研究。
- Lazarus-Linked npm Malware Masquerades as Rollup Polyfills — 補充相連 npm 攻擊點樣搜尋開發者憑證同 AI coding 工具設定。
- Contagious Interview — MITRE ATT&CK G1052 — MITRE 對 Contagious Interview 活動、已知手法同公開研究嘅整理。
本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。







