// 威脅簡報
nodejs-whisper 指令注入:特製的音訊檔名就能在伺服器上執行系統指令
- CVSS
- 9.3 CRITICAL
- CISA KEV
- 未列入
- 弱點類型
- CWE-78
- 主題
- Web 應用
AI 審稿 2026-10-15(未經人工)指令測試:未提供漏洞重現:未進行驗證紀錄 ↓
nodejs-whisper 0.3.1 以前(含)把音訊檔路徑直接放進 shell 指令執行,特製的檔名就能執行系統指令;目前未確認有修補版本。
| 誰會中 | 使用 npm 套件 nodejs-whisper 0.3.1 以前(含)版本,並把使用者能影響的檔名(例如保留上傳時的原始檔名)交給 nodewhisper() 轉錄的應用程式。 |
|---|---|
| 後果 | 如果條件成立,攻擊者可以用 Node.js 程序的權限在伺服器上執行任意系統指令,而且依研究者說明,指令在轉錄開始前就會執行。 |
| 現在該做什麼 | 目前沒有已確認的修補版本。不要把使用者可影響的檔名傳給 nodewhisper();上傳檔案改用伺服器自己產生的檔名儲存,並追蹤 PR #259 是否合併與發布。 |
| 受影響版本 | 0.3.1 以前(含)的所有版本;研究者已在 0.3.0 實際確認 |
| 修好的版本 | 未確認:目前資料中沒有任何已修補的發布版本 |
| 時間點 |
|
藍隊應對手冊
確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。
- 01確認專案是否用到 nodejs-whisper 及其版本
在自己專案的根目錄(有 package.json 的資料夾)的終端機執行;只讀取本機專案的相依樹,不會修改環境。0.3.1 以前(含)的版本都在受影響範圍內。直接與間接相依都要檢查,要看完整相依樹可以加 --all。
唯讀查詢npm ls nodejs-whisper - 02檢查檔名從哪裡來
在自己專案的根目錄的終端機執行;只搜尋本機原始碼,不會修改任何檔案。找出所有呼叫 nodewhisper() 的地方,確認傳入的路徑是否含有使用者可影響的部分,例如上傳時的原始檔名。這是研究者指出最實際的曝險情境。
唯讀查詢grep -rn "nodewhisper(" --include='*.js' --include='*.ts' --include='*.mjs' --include='*.cjs' --exclude-dir=node_modules .
- 01上傳檔案改用伺服器產生的檔名
目前沒有已確認的修補版本。讓傳給 nodewhisper() 的路徑完全由伺服器決定,就切斷了攻擊者控制檔名的途徑。這是 PlainCVE 依研究者描述的曝險條件整理的建議。
- 02追蹤 PR #259 是否合併與發布
PR #259 提出不經 shell 執行 ffmpeg 的修法(該頁含攻擊程式,本站不連結),但現有資料看不出是否已合併或發布。下面的指令在任何裝有 npm 的終端機都能執行,不需要在專案目錄;它只向公開的 npm registry 查詢版本清單,不會修改環境。版本號本身看不出新版本是否包含這個修正,有新版本時要另外看它的發布說明或原始碼,確認包含修正再升級。
唯讀查詢npm view nodejs-whisper versions
- 01懷疑遭利用時,把主機當成已被入侵處理
注入的指令以 Node.js 程序的權限執行,所以該程序能讀到的金鑰與憑證都應視為可能外洩並輪替。這是 PlainCVE 的建議;目前沒有任何來源回報實際遭利用。
完整修復步驟與說明
目前沒有已確認的修補版本,我們查閱的資料中也未見維護者的相關公告。處理順序建議如下(PlainCVE 整理):
- 先用
npm ls nodejs-whisper找出使用處,包括間接相依。 - 立即讓檔名脫離使用者控制:上傳時改用伺服器產生的名稱儲存,原始檔名只存進資料庫當顯示用。這一步不需要等上游修補。
- 第三方彙整網站 OffSeq 也建議,在修補出現前不要把不受信任的輸入放進傳給
convertToWavType()的路徑,並驗證或清理輸入。注意:這不是維護者的建議;而且單靠過濾字元容易漏掉,改名比過濾可靠。 - 有新版本發布時,先確認它包含 PR #259 的修正(不經 shell 執行 ffmpeg),再升級。
攻擊流程
從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
由上到下是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
- 攻擊者
上傳一個檔名經過特製的音訊檔
只有當應用程式保留使用者提供的原始檔名時,這一步才有意義。
防禦: 上傳的檔案一律改用伺服器產生的檔名(例如隨機 ID)儲存。
- 你的系統
應用程式把這個檔案路徑交給 nodewhisper()
nodewhisper(filePath, options) 是套件的公開 API;套件只檢查檔案是否存在,不會清理檔名。
防禦: 不要把使用者可影響的字串傳進檔案路徑;第三方彙整網站也建議先驗證或清理輸入。
- 你的系統
convertToWavType() 把路徑拼進 ffmpeg 指令字串
0.3.1 的程式碼沒有跳脫路徑,直接透過 shelljs 的 exec() 交給 shell 執行。
防禦: PR #259 提出的修法:改用 execFileSync 搭配參數陣列,不經過 shell。
- 你的系統
shell 把檔名的一部分當成指令執行
依研究者說明,注入的指令在轉錄前就執行,無論 ffmpeg 成功與否;權限等同 Node.js 程序。
防禦: 用最小權限的帳號或容器執行轉錄服務,限制被入侵後的影響(PlainCVE 建議)。
影響範圍
nodejs-whisper 是 npm(Node.js 的套件庫)上的語音轉錄套件,作者為 ChetanXpro。
| 條件 | 是否受影響 |
|---|---|
nodejs-whisper 0.3.1 以前(含)+ 傳給 nodewhisper() 的檔名可受使用者影響 | 受影響 |
| 研究者實際測試的 0.3.0 | 已確認可觸發 |
| 檔名完全由伺服器產生(例如隨機 ID) | 攻擊者無法控制檔名,PlainCVE 判斷風險大幅降低,但仍屬受影響版本 |
| 修補版本 | 未確認:沒有任何來源指出已修補的版本 |
研究者指出,最實際的曝險情境是:應用程式把使用者上傳的音訊以原始檔名存下,再把路徑交給 nodewhisper()。而且這個檔案必須真的存在,因為套件只檢查檔案是否存在。
關於「不需登入」:CNA 的 CVSS 評分把所需權限列為「無」、攻擊途徑列為「網路」。PlainCVE 的判斷是:nodejs-whisper 是程式庫,攻擊者需不需要登入,取決於使用它的應用程式怎麼接收檔名,因此「不需認證」是評分上的假設,不代表每個部署都如此。
原理
轉錄前,套件的 convertToWavType() 會呼叫 ffmpeg(常見的影音轉檔工具)把音訊轉成 WAV。在 0.3.1 的程式碼中,檔案路徑被直接拼進一段指令字串,沒有跳脫,再透過 shelljs 的 exec() 交給 shell(解讀文字指令的程式)執行。
shell 會把某些特殊字元當成語法。如果檔名裡藏了這類字元,檔名的一部分就會被當成另一道指令執行,權限等同 Node.js 程序。依研究者說明,這道指令在轉錄開始前就會執行,而且無論 ffmpeg 本身成功與否都會執行。這類弱點對應 CWE-78(作業系統指令注入)。
有問題的思路(概念示意,不是原始程式碼):
展開程式碼範例(js)
// 路徑被拼進字串,再整段交給 shell 解讀
const command = `ffmpeg -i "${filePath}" ... output.wav`
shell.exec(command)PR #259 提出的思路(概念示意;PR #259 頁面含攻擊程式,本站不連結):
展開程式碼範例(js)
// 不經過 shell,檔名只是參數陣列中的一個值,永遠被當成資料
execFileSync('ffmpeg', ['-i', filePath, /* ... */ 'output.wav'])時間軸
| 日期 | 事件 |
|---|---|
| 2026-06-23 | 研究者開啟 PR #259,公開描述問題並提出修法(該頁含攻擊程式,本站不連結);CNA 在 CVE 紀錄中也以此日為公開日期 |
| 2026-10-14 | VulnCheck 發布 CVE 紀錄;CISA SSVC 評估遭利用狀態為「無」、可自動化 |
| 2026-10-15 | 尚未列入 CISA KEV |
延伸閱讀
- 評分:CNA 給出 CVSS 3.1 9.8 分與 CVSS 4.0 9.3 分,都屬「嚴重」,差異來自評分版本不同。
- 遭利用狀態:截至 2026-10-15 未列入 CISA KEV,也沒有實際遭利用的報告;是否曾在修補前遭利用沒有證據。不過 PR #259 是公開的,其中包含研究者用來確認問題的檔名範例(該頁含攻擊程式,本站不連結),CISA 也評估這個問題可被自動化利用。
- PR #259 是否已合併或發布,現有資料無法確認。
- 發現者:Zachariah Mithani(VulnCheck 公告列名)。
- 相關弱點類型:CWE-78。
驗證紀錄 AI 依審稿規則逐項核對來源,全部通過;未經人工審稿,也尚未在我們的環境重現
| AI 審稿 | 2026-10-15 · 審稿規則 |
|---|
驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.
來源
- CVE / NVD / OSVCVE-2026-110644 Record (CVE Services API) · CVE Program / VulnCheck (CNA), 2026-10-14 · 查閱 2026-10-15
- 安全公告nodejs-whisper through 0.3.1 OS Command Injection via convertToWavType · VulnCheck, 2026-10-14 · 查閱 2026-10-15
- 廠商說明nodejs-whisper v0.3.1 src/utils.ts · ChetanXpro (GitHub) · 查閱 2026-10-15
- 其他CVE-2026-110644: Improper Neutralization of Special Elements used in an OS Command · OffSeq Radar · 查閱 2026-10-15
媒體簡報
一句話
nodejs-whisper 是一個用於語音轉錄的 npm 套件。它的 0.3.1 以前(含)版本在轉換音訊格式時,會把檔案路徑直接放進交給 shell 執行的指令;如果應用程式把使用者可影響的檔名(例如保留上傳時的原始檔名)交給這個套件,特製的檔名就可能在伺服器上執行任意系統指令。CNA 給出 CVSS 4.0 9.3 分的評分;截至 2026 年 10 月 15 日,這個漏洞未列入 CISA 已知遭利用漏洞清單,也沒有實際遭利用的報告。目前沒有確認的修補版本。
關鍵數字
- 嚴重度
- CVSS 4.0 9.3 / CVSS 3.1 9.8(CNA) cveawg.mitre.org
- 受影響版本
- 0.3.1 以前(含) cveawg.mitre.org
- 首次公開
- 2026-06-23(CVE 紀錄的公開日;研究者在專案 PR 公開回報,該頁含攻擊程式,本站不連結) cveawg.mitre.org
- CVE 發布
- 2026-10-14,由 VulnCheck 發布 cveawg.mitre.org
- 發現者
- Zachariah Mithani vulncheck.com
已確認
- 0.3.1 的程式碼把檔案路徑未經跳脫就拼進 ffmpeg 指令,並透過 shelljs exec() 執行。
- 研究者在已發布的 0.3.0 版本上實際確認了指令注入。
- 截至 2026-10-15 未列入 CISA KEV;CISA 的 SSVC 評估把遭利用狀態列為「無」。
尚未確認 / 說法不一
- 是否已有修補版本:沒有任何來源指出修補版本,PR #259 是否合併或發布也無法確認。
- 在我們查閱的資料中,未見維護者(ChetanXpro)發布關於這個 CVE 的公告、變更紀錄或發布說明。
- 是否曾在修補前遭利用(零時差):沒有證據。
可引用的一句話
一個檔名本該只是一個名字,但在這個漏洞裡,它變成了一道會被執行的指令。
圖片
引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.
nodejs-whisper 指令注入:特製的音訊檔名就能在伺服器上執行系統指令 nodejs-whisper 是一個用於語音轉錄的 npm 套件。它的 0.3.1 以前(含)版本在轉換音訊格式時,會把檔案路徑直接放進交給 shell 執行的指令;如果應用程式把使用者可影響的檔名(例如保留上傳時的原始檔名)交給這個套件,特製的檔名就可能在伺服器上執行任意系統指令。CNA 給出 CVSS 4.0 9.3 分的評分;截至 2026 年 10 月 15 日,這個漏洞未列入 CISA 已知遭利用漏洞清單,也沒有實際遭利用的報告。目前沒有確認的修補版本。 關鍵數字: - 嚴重度:CVSS 4.0 9.3 / CVSS 3.1 9.8(CNA)(https://cveawg.mitre.org/api/cve/CVE-2026-110644) - 受影響版本:0.3.1 以前(含)(https://cveawg.mitre.org/api/cve/CVE-2026-110644) - 首次公開:2026-06-23(CVE 紀錄的公開日;研究者在專案 PR 公開回報,該頁含攻擊程式,本站不連結)(https://cveawg.mitre.org/api/cve/CVE-2026-110644) - CVE 發布:2026-10-14,由 VulnCheck 發布(https://cveawg.mitre.org/api/cve/CVE-2026-110644) - 發現者:Zachariah Mithani(https://www.vulncheck.com/advisories/nodejs-whisper-through-0.3.1-os-command-injection-via-converttowavtype) 已確認: - 0.3.1 的程式碼把檔案路徑未經跳脫就拼進 ffmpeg 指令,並透過 shelljs exec() 執行。 - 研究者在已發布的 0.3.0 版本上實際確認了指令注入。 - 截至 2026-10-15 未列入 CISA KEV;CISA 的 SSVC 評估把遭利用狀態列為「無」。 尚未確認 / 說法不一: - 是否已有修補版本:沒有任何來源指出修補版本,PR #259 是否合併或發布也無法確認。 - 在我們查閱的資料中,未見維護者(ChetanXpro)發布關於這個 CVE 的公告、變更紀錄或發布說明。 - 是否曾在修補前遭利用(零時差):沒有證據。 「一個檔名本該只是一個名字,但在這個漏洞裡,它變成了一道會被執行的指令。」— PlainCVE https://plaincve.date/vulns/cve-2026-110644-nodejs-whisper-command-injection
如何引用本頁
本文採 CC BY 4.0,轉載請保留署名與連結。
PlainCVE 團隊(2026)。《nodejs-whisper 指令注入:特製的音訊檔名就能在伺服器上執行系統指令》。PlainCVE。https://plaincve.date/vulns/cve-2026-110644-nodejs-whisper-command-injection(查閱日期:YYYY-MM-DD)BibTeX
@misc{cve2026110644nodejswhispercommandinjection2026,
title = {nodejs-whisper 指令注入:特製的音訊檔名就能在伺服器上執行系統指令},
author = {PlainCVE 團隊},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/vulns/cve-2026-110644-nodejs-whisper-command-injection},
note = {更新於 2026-10-15}
}