概要:jsPDFライブラリに致命的な欠陥
JavaScriptアプリケーションでPDFドキュメントを生成する広く利用されているライブラリ「jsPDF」に、深刻な脆弱性が発見されました。この欠陥を悪用されると、攻撃者は生成されるPDFファイルにローカルファイルシステム上の機密データを含ませ、それらを盗み出すことが可能になります。
本脆弱性はCVE-2025-68428として追跡されており、深刻度スコアは9.2と評価されています。npmレジストリで週に350万回以上ダウンロードされる人気ライブラリであるため、その影響は広範囲に及ぶ可能性があります。
脆弱性の詳細:ローカルファイルインクルージョンとパストラバーサル
この脆弱性は、jsPDFのバージョン4.0より前のバージョンに存在するローカルファイルインクルージョンとパストラバーサルの欠陥です。ファイル読み込みメカニズム(loadFile)にサニタイズされていないパスが渡されることによって発生します。
特に、jsPDFのNode.jsビルドでは、ユーザーが制御する入力がファイルパスとして渡された場合、jsPDFがそのファイルの内容を生成されるPDF出力に組み込んでしまう問題が生じます。addImage、html、addFontといった他のファイル読み込みメソッドも、内部でloadFile関数を呼び出すため影響を受けます。
ただし、この問題はjsPDFのNode.jsビルド(具体的にはdist/jspdf.node.jsおよびdist/jspdf.node.min.js)のみに影響し、ブラウザ環境での利用は対象外であると、jsPDFのセキュリティ速報で報告されています。
リスク評価と悪用の可能性
アプリケーションセキュリティ企業Endor Labsの詳しい技術レポートによると、ファイルパスがハードコードされている場合、信頼できる設定から取得される場合、または厳格な許可リストが入力に使用されている場合、悪用のリスクは低いか、または存在しないとされています。
しかし、jsPDFが多数のプロジェクトで広範に展開されていることを考慮すると、CVE-2025-68428は積極的に悪用される可能性のある脆弱性として懸念されています。
対策と推奨事項
本脆弱性は、jsPDFのバージョン4.0.0で修正されました。このバージョンでは、デフォルトでファイルシステムへのアクセスが制限され、Node.jsのパーミッションモードに依存するようになっています。
- 最新バージョンへのアップデート: 可能な限りjsPDF 4.0.0以降へのアップデートを強く推奨します。
- Node.jsのバージョン: Node.jsのパーミッションモードはNode 20では実験的な機能であるため、バージョン22.13.0、23.5.0、24.0.0以降の使用が推奨されます。
- パーミッション設定の注意:
--permissionフラグを有効にするとNode.jsプロセス全体に影響すること、また--allow-fs-read構成フラグに過度に広範なファイルシステムパーミッションを追加すると修正が相殺されてしまうことに注意が必要です。 - 古いNode.jsバージョンでの対応: 既存のNode.jsバージョンをアップデートできない環境では、jsPDFに渡す前にユーザー提供のパスを必ずサニタイズすることがjsPDFチームによって推奨されています。
開発者は、自身のアプリケーションにおけるjsPDFの利用状況を確認し、適切な対策を速やかに講じることが求められます。
