PDFデータ流出:重大度9.2のjsPDFの欠陥がサーバーの機密情報を漏えい

PDFドキュメントをプログラムで生成するために主に利用される、広く普及したJavaScriptライブラリjsPDFにおいて、重大な脆弱性が発見されました。この欠陥により、攻撃者はファイルパスを操作でき、生成されるドキュメントにローカルファイルシステムの内容を密かに直接埋め込むことが可能になります。

CVE-2025-68428として指定され、CVSSスコア9.2という深刻度を持つこの問題は、ローカルファイルインクルージョン(LFI)およびパストラバーサルの領域に属します。十分にサニタイズされていないパスが処理されると、ライブラリのファイル読み込み機構がサーバー上の任意のファイルを読み取り、その内容を生成されるPDFに追記できてしまいます。jsPDFは業界の定番であり、npmで週平均350万回以上ダウンロードされていることを踏まえると、悪用の可能性が及ぶ範囲は広大です。

この脆弱性は、バージョン4.0.0未満のjsPDFのNode.js向け実装に特有の問題です。これらのサーバーサイドビルドでは、loadFile関数がローカルファイルシステムに直接アクセスします。ファイルパスがフィルタリングされていないユーザー入力に基づいて構築される場合、侵入者は機密性の高いシステムファイルや設定ファイルを指定でき、jsPDFは追加の検証なしにそれらをPDFへ取り込んでしまいます。

この欠陥は単一の関数に限られません。同じ基盤となる仕組みがaddImagehtml、およびaddFontにも適用されるため、パスを安全でない形で扱うと同様に脆弱になります。開発者は、この欠陥がNode.jsビルド—具体的にはdist/jspdf.node.jsおよびそのminify版—に限定され、ブラウザ版はファイルシステムへ直接アクセスできないため影響を受けないと明確にしています。

Endor Labsの評価によれば、この欠陥の悪用可能性は、特定のプロジェクト内で当該ライブラリがどのように実装されているかに依存します。パスがハードコードされている、または厳格な許可リストで検証されている場合、リスクはごく小さい一方、パスが生のユーザーデータから導出される状況では、脅威が現実味を帯びます。

この脆弱性はjsPDFバージョン4.0.0で効果的に無力化されました。この更新では、ファイルシステムアクセスに対するデフォルトの制限が導入され、Node.jsの権限モデルが活用されています。ただし注意点も残ります。Node.js 20ではpermission-modeが実験的と見なされているため、研究者は22.13.0、23.5.0、または24.0.0以上といった、より新しい環境の採用を推奨しています。

さらなる複雑さも残っています。jsPDFのメンテナは一時的な緩和策として--permissionフラグの利用を提案していますが、これはライブラリ単体ではなくNode.jsプロセス全体に適用されます。さらに、--allow-fs-readによる過度に緩い設定は、これらの保護を事実上無効化します。旧来のNode.jsバージョンに縛られているプロジェクトでは、ライブラリへ渡す前に、ユーザー提供のパスをすべて手動でサニタイズおよび検証することが推奨されます。

多様なWebアプリケーションやサービスでjsPDFが広く採用されていることを踏まえ、研究者はCVE-2025-68428を悪意ある攻撃者にとって格好の標的と見なし、修正済みバージョンへの即時移行を強く促しています。

翻訳元: https://meterpreter.org/pdf-data-exfiltration-critical-9-2-jspdf-flaw-leaks-server-secrets/

ソース: meterpreter.org