CVE-2026-25940 jsPDF PoC
CVE-2026-25940の概念実証です。特別に細工されたAcroFormラジオボタンの外観が、脆弱なPDFビューア(例:Foxit)で埋め込みJavaScriptをトリガーする仕組みを示します。このリポジトリには、Nodeベースのジェネレータと、さまざまな解析パスを試すためのブラウザベースのビューアハーネスが含まれています。
⚠️ 隔離された非本番環境でのみ使用してください。サンプルペイロードは意図的にJavaScriptを実行し、ネットワークリクエストや外部プログラムを呼び出す可能性があります。重要なホスト上で、信頼できないビューアで生成されたPDFを開かないでください。
リポジトリの内容
- poc.js: 複数のラジオボタンオプションと異なる外観ストリームを持つ悪意のあるPDFを生成し、さまざまな動作を示します。
- viewer.html: ブラウザ内でPoCを生成したり、既存のサンプルを読み込んだりして、ネイティブ(iframe)とPDF.jsの両方でレンダリングするための最小限のビューアハーネスです。
- package.json: Node PoC用のjsPDF依存関係を宣言します。
前提条件
セットアップ
- 依存関係をインストールします:
npm install
- (任意)HTML/JSをよりきれいに読み込むために、ビューアをローカルで配信します:
npx http-server .
# その後、http://localhost:8080/viewer.html を開きます
NodeでPoC PDFを生成する
- ジェネレータを実行します:
node poc.js
- スクリプトはプロジェクトルートに
test.pdf を書き込みます。対象のPDFビューアで開いて動作を確認してください。外部へのリクエストを避けたい場合は、ネットワークをブロックしたままにしてください。
ブラウザベースのビューアワークフロー
- viewer.html をブラウザで直接開くか、ローカルサーバー経由で開きます。
- Generate PoC PDF をクリックして、ブラウザ内で悪意のあるドキュメントを構築し、iframe(ネイティブ/ブラウザハンドラ)とPDF.jsキャンバスの両方に読み込みます。
- または、Load file を選択して、Nodeスクリプトで生成したPDFを選択します。
- JavaScript実行の証拠としてコンソール/ネットワークアクティビティを確認します。一部のビューアはアラートを抑制しながらも埋め込みアクションを実行し続ける場合があります。
注意事項
- ペイロードはFoxitの動作に合わせて調整されています。他のビューアは部分的に緩和またはブロックする場合があります。
- ペイロードを適応させる場合は、一部のエクスプロイトチェーンが依存するオブジェクトオフセットを変更しないように、サイズを同程度に保ってください。
- 常にネットワークの外部送信が制限されたVMまたはサンドボックスでテストしてください。