假面試 coding test 借 SVG 藏毒:撳 npm run dev 前要查咩
Tech News

假面試 coding test 借 SVG 藏毒:撳 npm run dev 前要查咩

圖片:via iThome — https://www.ithome.com.tw/news/177743
TechLab 編輯部(譯)·

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 引開發者執行惡意專案,今次就換咗更隱蔽嘅包裝方法。

兩名開發者坐喺多個屏幕前檢查 SVG 程式碼,畫面以數據碎片表達隱藏惡意內容

圖片:Elastic Security Labs

SVG 點樣參與攻擊

就呢條感染鏈,單純預覽 SVG 唔等於已經中招。攻擊者先將經編碼嘅 JavaScript 拆成多段,塞入一批國旗 SVG 嘅 HTML comment。專案內嘅 serverValidation.js 會按檔名次序讀取每張圖、抽出 comment、重新組合內容,再用自訂 Base64 解碼方法處理,最後交畀 eval() 執行。server/index.js 每次啟動都會叫呢段程式,而 package.json 入面嘅 devstart script 都會開呢個 server。

SVG 平時俾人當成靜態圖片,不過本質上仍然係文字檔;只要專案程式主動讀取,圖檔內容一樣可以變成輸入資料,甚至俾 eval() 當程式跑。呢個做法亦解釋咗點解淨係掃 JavaScript 檔未必夠。Elastic 發表報告嗰陣,多個相關壓縮檔喺 VirusTotal 都係零偵測,但零告警只代表掃描器當時未認到,唔代表個 repository 安全。

撳掣前先查啟動路線

第一輪檢查唔使安裝任何嘢。先直接打開 package.json,睇清楚 preinstallinstallpostinstallpreparedevstart 實際會叫邊啲檔案。正常 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 查程序、對外連線同存取紀錄。呢類程式有遙控指令能力,確認清理唔到時,重建系統通常穩陣過繼續估仲有冇殘留。


參考來源

本文根據原文及公開資料整理;資料有出入時,以原文及官方資料為準。

分享:WhatsAppThreadsTelegramFacebook