JavaScript 函式庫安全性對當代應用的衝擊
在現代網頁開發與後端自動化流程中,動態產生 PDF 文件已成為電子商務、報告生成及公文系統的核心功能。然而,隨著開源組件的依賴程度加深,單一庫的安全性缺陷往往會演變成大規模的供應鏈威脅。本次針對 jsPDF 函式庫的研究顯示,即使是處理靜態文件的工具,一旦涉及伺服器端的檔案系統操作,若缺乏嚴格的輸入過濾,將可能成為攻擊者入侵內網、竊取機密憑證的跳板。這類漏洞不僅影響單一應用,更因其極高的下載量與集成度,對全球軟體生態系構成重大風險。
漏洞核心機理與受影響範疇剖析
用於在 JavaScript 應用程式中產生 PDF 文件的 jsPDF 庫存在一個嚴重漏洞,攻擊者可以透過將敏感資料包含在生成的檔案中,從本機檔案系統中竊取這些資料。該漏洞是本機檔案包含(Local File Inclusion, LFI)和路徑遍歷(Path Traversal)漏洞,允許在 jsPDF 4.0 之前的版本中將未經清理的路徑傳遞給檔案載入機制 (loadFile)。此漏洞的編號為 CVE-2025-68428,嚴重性評分為 9.2。鑑於 jsPDF 在眾多專案中的廣泛部署,這是一個容易被積極利用的漏洞。
jsPDF 庫是一個廣泛採用的軟體包,在 npm 註冊表中每週下載量超過 350 萬次。在 jsPDF 的 Node.js 建置版本中,'loadFile' 函數用於讀取本機檔案系統。問題在於,當使用者可控的輸入被當作檔案路徑傳遞時,jsPDF 會將檔案內容合併到產生的 PDF 輸出中。其他檔案載入方法也會受到影響,包括「addImage」、「html」和「addFont」,因為它們都可以呼叫 loadFile 函數。
攻擊路徑演練與資訊洩露情境
攻擊者在實務上可以透過構造特殊的請求參數,誘導伺服器端的 Node.js 環境讀取敏感路徑。例如,當應用程式允許使用者上傳圖片網址或自定義 HTML 標籤以生成報告時,攻擊者可以輸入類似 ../../../../etc/passwd 或 Windows 環境下的敏感系統路徑。由於受影響版本的 loadFile 缺乏路徑規範化處理,系統會誤將這些檔案內容視為合法資源進行讀取,並將其二進位或文字內容嵌入到最終生成的 PDF 檔案中。
最終,攻擊者只需下載該 PDF,便能獲取原本儲存在伺服器本機的環境變數、資料庫密鑰、SSH 私鑰或其他關鍵設定檔。這種攻擊方式具有高度隱蔽性,因為對外部安全設備而言,這僅僅是一個正常的 PDF 請求與下載行為,難以透過傳統的 WAF(網頁應用防火牆)規則完全攔截。
架構性缺陷與環境差異分析
根據 jsPDF 安全性公告,該問題僅影響庫的 Node.js 版本,即 dist/jspdf.node.js 和 dist/jspdf.node.min.js 檔案。這意味著在純瀏覽器端運行的 jsPDF 實例由於受限於瀏覽器的同源政策(SOP)與沙箱機制,無法直接訪問客戶端的檔案系統,因此風險較低。然而,對於使用 Node.js 進行後端渲染或批次處理 PDF 的企業應用而言,此漏洞等同於向攻擊者開放了伺服器檔案系統的讀取權限。
此漏洞的存在凸現了 Node.js 函式庫在處理本機資源時,若過度依賴底層檔案系統 API 而未實施細粒度的權限控管,將導致嚴重的安全性崩潰。尤其在微服務架構中,一旦一個節點被突破,攻擊者可能藉此獲取橫向移動所需的關鍵憑證。
漏洞修復方案與版本更迭建議
CVE-2025-68428 已在 jsPDF 的 4.0.0 版本中修復,預設限制檔案系統訪問,轉而依賴 Node.js 權限模式。在最新版本中,開發團隊引入了更為嚴格的預設安全設定,禁用了不安全的本機檔案自動加載行為。對於無法立即升級至 4.0.0 的舊版本用戶,強烈建議實施手動的輸入清理邏輯。
具體的緩解措施包括:嚴格驗證所有傳遞給 addImage、html 及 addFont 的 URL 或路徑參數,確保其不包含路徑遍歷字符(如 ..);使用白名單機制限制僅能加載特定的受信任目錄;或是在 Node.js 執行環境中使用實驗性的 Permission Model 來限制該進程對敏感目錄的讀取權限。
供應鏈安全防禦的長遠思考
jsPDF 漏洞事件再次敲響了企業對開源軟體組件管理(SCA)的警鐘。每週 350 萬次的下載量意味著有數以萬計的自動化系統正暴露在風險之中。企業應建立完善的漏洞追蹤機制,對於核心業務邏輯中引用的任何第三方庫,必須進行定期的版本稽核。
此外,開發團隊應秉持「最低權限原則」(Principle of Least Privilege),在伺服器端部署 PDF 生成服務時,應將其隔離在受限的容器環境中,並掛載極小化的唯讀檔案系統,以確保即使函式庫發生漏洞,攻擊者也無法觸及核心系統檔案。
總結與未來展望
CVE-2025-68428 不僅是一個單一函式庫的錯誤,它反映了當前 JavaScript 生態系在跨環境(瀏覽器與 Node.js)運行時常見的安全誤區。透過及時升級至 jsPDF 4.0.0 並強化輸入端驗證,企業能有效抵禦此高風險威脅。台灣應用軟件建議開發者在追求開發效率的同時,必須將「安全性設計」(Security by Design)納入選型與評估流程,從源頭阻斷路徑遍歷與檔案洩露的攻擊路徑。
資料來源:https://www.bleepingcomputer.com/news/security/critical-jspdf-flaw-lets-hackers-steal-secrets-via-generated-pdfs/
針對廣泛使用的 JavaScript 庫 jsPDF 所爆發的嚴重漏洞 CVE-2025-68428 進行深度技術剖析,探討攻擊者如何利用 loadFile 函數進行本機檔案竊取,並分析受影響的 addImage 與 html 方法。