パストラバーサルのバグにより、ファイルパスが適切に検証されていない場合、攻撃者は生成されるPDFに任意のファイルシステム内容を取り込めます。
現在は修正済みのjsPDF ライブラリにおける重大な欠陥により、攻撃者が企業サーバーから機密ファイルを抽出し、生成されるPDFドキュメントに直接埋め込める可能性がありました。
CVE-2025-68428として追跡されているこの欠陥は、信頼できない入力が適切な検証なしにファイル処理APIへ渡される、パッチ未適用のjsPDFのNode.js環境に影響します。
Endor Labsの分析によると、この問題はパストラバーサルとローカルファイルインクルージョンを可能にし、攻撃者が基盤となるファイルシステムから任意のファイルを読み取れるようになります。影響を受ける環境では、認証情報、設定ファイル、秘密鍵、または環境変数が露出する可能性があります。
この脆弱性はjsPDFのバージョン3.0.4以前に影響し、特にサーバーサイドのPDF生成ワークフローで使用されるNode.jsビルドが対象で、ブラウザーのみでの利用には影響しません。
修正は提供されていますが、Endorの研究者は、特に動的なファイル処理に依存する本番環境では、対処は単なるバージョン更新にとどまらないと警告しました。「実行時に無制限のファイルシステムアクセスが許可されている場合、パッチは何の保護にもなりません」とEndorの研究者はブログ投稿で述べています。
PDFライブラリがファイル流出の経路に
CVE-2025-68428の問題は、jsPDFがNode.jsで外部リソースを読み込む際のファイルパスの扱いにあります。「addImage」「html」「addFont」など、一般的に使用される複数のAPIは、内部的にディスクからファイルを読み取る「loadFile()」関数に依存しています。バージョン4.0.0以前では、これらのメソッドは実行時に渡されるファイルパスを十分に検証または制限していませんでした。
アプリケーションが、ファイル名、画像パス、フォント参照などのユーザーが制御できる入力を受け取り、それを直接これらのAPIに渡す場合、攻撃者は機密性の高いアプリケーションファイルを参照するよう細工したパスを指定できます。するとjsPDFはそのファイルを読み取り、エラーを発生させることなく内容を生成されるPDFに埋め込みます。
この段階でライブラリがファイル種別の制限を強制しないため、この問題は画像やフォントに限りません。Node.jsプロセスが読み取れるあらゆるファイルが、含められる可能性があります。
このバグには、基本CVSSスコア10点中9.2という重大(Critical)の深刻度評価が付与されています。研究者は、悪用から保護するため、直ちに修正版へアップグレードするよう促しました。
パッチだけでは不十分な可能性
jsPDFのメンテナは、バージョン4.0.0でデフォルトでのファイルシステムアクセスを制限することでこの問題に対処しました。この修正はNode.jsのパーミッションモードに依存しており、アプリケーションが実行時に特定のディレクトリへの読み取りアクセスを明示的に許可することを要求します。適切に設定されていれば、jsPDFが承認されたパス外のファイルへアクセスすることを防げます。
しかし、このアプローチは運用上の複雑さをもたらします。Node.jsのパーミッションモードは発展途上であり、多くの本番環境は古いNodeバージョンで動作しているか、権限ベースの実行を採用していません。「多くの環境は安定したパーミッションモードのサポートがない古いNode.jsバージョンで動作しており、ファイルシステムアクセスのパターンを慎重に整理していない場合、–permissionを有効化すると既存機能が壊れる可能性があります」と研究者は指摘しています。
研究者は、導入環境における悪用可能性を評価するための手順一式を示しました。これには、jsPDFがサーバーサイドで使用されているか(クライアントサイドでは悪用不可能であるため)の確認、稼働中のバージョンがすでにパーミッションモードを実装しておりファイルシステム権限が適切に設定されているかの確認、SCAツールで影響を受けるコードパスを特定すること、そして脆弱なコードベースを手動で検索することが含まれます。
Endor Labsは、GitHub上でこの脆弱性を特定し報告したセキュリティ研究者Kwangwoon Kim(KilkAt)に謝意を示しました。