PolinRider 伸入 npm、Composer 同 Go:裝包前真係要望清楚
Tech News

PolinRider 伸入 npm、Composer 同 Go:裝包前真係要望清楚

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

求職 coding task、VS Code task 同 package install 都變成入口

唔止係另一單有毒 package

iThome 報道引用 Socket 研究,北韓相關 Contagious Interview / Famous Chollima 攻擊者,將 PolinRider 由 npm 擴到 Packagist、Go module 同 Chrome Web Store。Socket 話今次見到 162 個惡意 release artifact,分散喺 108 個 package 或 extension,入面包括 80 個 Go module、10 個 Packagist package 同 1 個 Chrome extension;北韓歸因呢點,TechLab 跟 Socket、MITRE 呢類 source 嘅講法,唔會寫到似法庭已經定案。

呢件事值得睇,唔係因為 npm 又出事咁簡單,而係攻擊者打中開發者最鬆嗰一刻:搵工時收到 coding task、開人哋俾你嘅 repo、跑 package install、用 VS Code 或 Cursor 開 folder。本地 startup、agency、SaaS team 同 freelancer 好多都係咁做嘢,尤其交貨急、客戶 repo 又多,未必每次都會開乾淨環境。PolinRider 麻煩在於,問題可以早過 deploy 出現:一裝、一開、一 build,惡意 payload 已經有機會喺開發機或者 CI runner 落腳。

Socket blog 入面展示 PolinRider 供應鏈攻擊嘅主圖

圖片:Socket

佢點樣入你部機

OpenSourceMalware 早前追 PolinRider,已經見到超過 1,951 個 public GitHub repo、1,047 個 owner 受影響。佢哋形容,攻擊者會用求職同假 interview 做包裝,例如 ShoeVista 呢類 MERN take-home task,client/package.json 入面夾住 tailwindcss-style-animate;另一個 StakingGame 就靠 .vscode/tasks.json,一開 project 就觸發隱藏任務。呢啲唔係高深 zero-day,反而係好貼地嘅社交工程:你以為自己喺做 test,其實已經俾人拉咗入感染鏈。

Socket 同 OSM 見到嘅手法好一致:惡意 JavaScript loader 會塞入 postcss.config.mjstailwind.config.jseslint.config.mjsvite.config.js 呢類 build config,甚至扮成 .woff2 font file。之後 payload 會搵 TRON、Aptos、BNB Smart Chain 呢類 public blockchain 基建攞第二階段內容,再解密執行;Socket 見到 DEV#POPPER 同 OmniStealer,功能包括 remote command、偷 credential、偷 browser data 同 crypto wallet。換句話講,呢類攻擊最想攞嘅,多數係開發機入面嘅 token、SSH key、cloud key 同 package registry 權限,唔係個前端 app 本身。

下架咗唔代表乾淨晒

npm registry 而家顯示,幾個 OSM 點名嘅 Tailwind-adjacent package 已經只剩 0.0.1-security placeholder:tailwindcss-typography-style 喺 2025-12-30 轉走,tailwind-autoanimation 喺 2026-01-07 轉走,tailwindcss-style-animate 喺 2026-03-10 轉走,tailwind-mainanimation 喺 2026-03-13 轉走;OSM 對應標記過嘅惡意版本包括 0.8.22.3.61.1.62.3.3。但呢點只係代表 npm 公開 registry 而家唔再直接派嗰啲舊 tarball,唔代表 lockfile、公司內部 mirror、CI cache、舊 Docker image 同 clone 落嚟嘅 repo 已經冇事。

Packagist、Go module 同 Chrome extension 嘅逐個下架時間,公開資料暫時未見到穩定清單,[待確認]。已知 Socket 點名 sevenspan namespace、7span organization、Xpos587/git2mdXpos587/markfetchArtiffusion-Inc/mirofish 呢啲 indicator,亦話 campaign 仲有新樣本冒出。實務上唔好靠一張二手 list 當完結,因為 PolinRider 其中一個惡位係改 Git history:main page 望落似幾個月冇改,Activity tab 先見到 force push 同舊 commit 俾人重寫過。

工程 team 而家應該點查

第一步先用乾淨機做排查,唔好急住 panic delete repo。先搵近期 clone 過嘅求職 task、freelance test、陌生 recruiter 俾嘅 repo,再查 package-lock.jsonpnpm-lock.yamlyarn.lockcomposer.lockgo.sum 有冇上述 package、sevenspan / Xpos587 呢類 indicator,Chrome extension inventory 都要過一次。跟住查 repo 入面嘅 .vscode/tasks.jsonpostcss.config.*tailwind.config.*eslint.config.*vite.config.*next.config.*,特別留意正常 config 後面突然多咗長到睇唔晒嘅 obfuscated code、temp_auto_push.bat、奇怪 .woff2,同埋 GitHub Activity 入面嘅 force push。

如果真係中過,移除 package 只係最低限度。開發機、CI runner、serverless deploy secret、npm / Packagist / GitHub token、SSH key、cloud credential、Vault token、Docker registry credential 都要當暴露處理,用乾淨機 rotate。公司有自家 package proxy 或 artifact cache,就要追返有冇 cache 住舊版;有 monorepo 就唔好只掃 root,apps/client/frontend/web/ 呢啲深層 path 都要睇。呢類攻擊最怕半清理,表面刪咗 fake font,config file 入面個 loader 仲喺度。

真正要改嘅習慣

今次最值得記住嘅位係,供應鏈安全已經唔可以淨係等 Dependabot 報 CVE。搵工 task、freelance client repo、Chrome extension、Composer package、Go module,全部都可能係同一條攻擊鏈嘅入口。之後開陌生 repo,最好用 disposable VM、冇登入主力 GitHub、冇 mount SSH key、冇帶 .env,package install 前先望 lockfile 同 install script;團隊層面就應該將 developer machine 當成高價值資產,而唔係只保護 production server。PolinRider 呢次畀人嘅提醒好直接:開發者部機一中,後面成條 software supply chain 都會跟住受牽連。


參考來源

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

分享:WhatsAppThreadsTelegramFacebook