PDF Injection: ドキュメントビューアが攻撃の標的に 📑

はじめに:日常ドキュメントに潜む隠れた脅威
PDFファイルはデジタルドキュメントの共通言語となっています。請求書や領収書から搭乗券、銀行明細まで、私たちは1日に何十回もPDFに触れます。しかし、その見た目は無害に見える一方で、サイバー犯罪者が悪用しやすい高度な攻撃面が潜んでいます。PDFインジェクション攻撃は、信頼できるドキュメントビューアを情報漏洩や内部システムの侵害に変える脅威であり、ユーザーが気づかないうちに機密情報が漏洩する可能性があります。
この包括的ガイドでは、攻撃者がJavaScriptを埋め込む方法、外部参照を利用する手口、フォームデータの漏洩を狙った手法について解説します。また、請求書生成機能やアプリケーションの保護方法についても詳しく説明します。
PDFインジェクションの基本理解
PDFインジェクションとは?
PDFインジェクションは、攻撃者が悪意のある内容をPDFドキュメントに挿入したり、PDFの生成・処理方法を操作したりする脆弱性の総称です。従来のマルウェアが単にPDFに添付されるのに対し、インジェクション攻撃はPDF仕様に内在する正当な機能を悪用します。
この攻撃手法はWebアプリケーションのクロスサイトスクリプティング(XSS)に似ていますが、PDF内で完結します。攻撃者はPDFコードを挿入し、オブジェクトの脱出やリンクの乗っ取り、任意のJavaScriptの実行を可能にし、「PDF版XSS」を作り出します。
なぜPDFは狙われやすいのか
PDFは現代ビジネスの多くの場面で不可欠となっており、攻撃の格好のターゲットです。以下の要素がその理由です:
- サーバーサイド生成:多くのアプリケーションが機密情報や個人情報を含むPDFを動的に生成します
- 信頼性:ユーザーはPDFを実行ファイルやスクリプトよりも信頼しやすい
- 豊富な機能:JavaScript、フォーム、ハイパーリンク、外部リソースの読み込みをサポート
- 普及率:ほぼすべてのPCやスマートフォンにPDFビューアがインストールされている
- 仕様の複雑さ:複雑な仕様は多くの攻撃機会を生み出します
PDFインジェクション攻撃の構造
1. PDF内のJavaScriptインジェクション
最も強力な攻撃手法の一つは、PDF内に悪意のあるJavaScriptを埋め込むことです。PDF仕様はインタラクティブ機能を実現するためにJavaScriptを明示的にサポートしています。
攻撃者は以下の方法でJavaScriptを挿入します:
OpenActionとActiveActionオブジェクト:これらはドキュメントを開いたときや操作時に自動的に実行されるアクションを定義します。正当な用途(ズームレベル設定など)に使われますが、悪用されるとドキュメントを開いた瞬間にJavaScriptを実行させることが可能です。
アノテーションアクション:PDFの注釈にはJavaScriptを含めることができ、ユーザーの操作に応じてコードを実行します。研究例では、クリック一つで悪意のあるコードが動作することも示されています。
自動実行:高度な技術では、PV(ページ表示)やPC(ページ閉鎖)のエントリを利用し、ユーザーの操作なしにJavaScriptを自動実行させることも可能です。
2. 外部リファレンスの悪用
PDFはHTTP経由で外部リソースを読み込むことができ、データの外部送信に悪用される恐れがあります。この機能とインジェクションの脆弱性を組み合わせると、高度な情報窃取が可能です。
URI操作:/URIアクションは、ドキュメントを開いたときにリンクを起動します。攻撃者は正規に見える悪意のあるURLを挿入し、攻撃者制御のサーバへリダイレクトさせることができます。
フォーム送信の乗っ取り:PDFのフォームは外部URLにデータを送信できます。ターゲットを改ざんし、ユーザーの入力情報を攻撃者のサーバに送ることが可能です。
SSRF攻撃:サーバー側でPDFをレンダリングする際に、内部ネットワークやメタデータサービスへのアクセスを狙った攻撃もあります。
3. フォームデータの漏洩
フォームは情報収集に特化した機能であり、攻撃の格好の標的です。以下のような手口があります:
直接漏洩:暗号化されたPDFや動的に生成されたPDFのフォーム送信先を改ざんし、情報を攻撃者のサーバに送信させる。
SubmitFormアクション:SubmitForm関数を悪用し、ドキュメントの内容を自動的に外部に送信させることが可能です。JavaScriptと併用すれば、ユーザーの同意なく全内容を抜き取れます。
資格情報の窃取:PDF内のダイアログや入力欄を利用し、アカウント情報やパスワードを収集し、攻撃者のサーバに送信します。
実例シナリオ
請求書生成の脆弱性
請求書生成機能は特にPDFインジェクションのリスクが高いです。なぜあなたの請求システムが内部データを漏らす可能性があるのか、理由を解説します:
未検証のユーザー入力:顧客名や住所、備考などを入力させる際に、バックスラッシュや括弧などの特殊文字を適切にエスケープしないと、インジェクションポイントが生まれます。
テンプレートの連結:多くの請求書生成ツールは、ユーザー入力を直接テンプレートに埋め込みます。入力内容にPDF構文が含まれると、意図しない箇所でコードが崩壊します。
最近の脆弱性公開例では、あるフィンテック企業が顧客の請求メモを悪用したSSRF攻撃を内部メタデータホストに対して行い、$10,000のバグバウンティを獲得しました。また、Invoice Ninjaでは、HTMLタグに悪意のあるペイロードを仕込むことでローカルファイルの読み取りが可能となる脆弱性も判明しています。
Eチケット・領収書生成
ユーザー制御のコンテンツを含むPDFを生成するシステムは、同様にリスクを抱えています。Eチケットや領収書、搭乗券、給与明細などもインジェクションの脆弱性が潜んでいます。
共有ドキュメントのシナリオ:複数ユーザーが共同編集するPDFで、銀行情報などの機密情報を含む場合、1人が少しでも操作を行うと他のユーザーがアクセスしたときに全内容が漏洩する可能性があります。
動的コンテンツの注入:ヘッドレスブラウザ(Chromiumなど)を使ったHTMLテンプレートのレンダリングでは、適切なサニタイズがなされていないと、HTMLインジェクション→SSRFやローカルファイルの漏洩、リモートコード実行に発展します。
技術的詳細:攻撃手法
エスケープ文字の悪用
PDFインジェクションは、バックスラッシュ \ や括弧 ( ) のエスケープを利用した攻撃が多いです。これらはユーザー入力を文字列やURL内で受け入れるために使われます。
PDFの文字列は括弧 ( ... ) で囲まれ、特殊文字はバックスラッシュでエスケープします。攻撃者はこれを悪用し、意図しない箇所からコードを挿入します。
攻撃例:
元の例: /URI (https://example.com/invoice?id=123)
挿入例: /URI (https://example.com/invoice?id=123) /S /JavaScript /JS (malicious_code())
CBCガジェット攻撃と暗号化PDF
暗号化されたPDFも情報漏洩の危険は排除できません。PDF仕様では暗号文と平文を混在させることができ、CBCモードの暗号は整合性保護がないため、攻撃者はCBCの脆弱性を利用して内容を書き換えることが可能です。
研究例では、暗号化されたPDF内に攻撃者が仕込んだURLを挿入し、開封時に自動的に情報を送信させる手法も示されています。Adobe AcrobatやChrome、Firefoxなど主要ビューアはこれらの攻撃に脆弱です。
サーバーサイドレンダリングの悪用
サーバー側でPDFをレンダリングする場合、より深刻な結果を招くことがあります:
ローカルファイルの読み取り:<embed>や<iframe>タグを使い、/etc/passwdなどのファイルを読み取ることが可能です。.envファイルなどの機密情報も対象です。
内部ネットワークアクセス:SSRF脆弱性を利用し、内部APIやクラウドメタデータサービスにアクセスされる危険があります。
XXE攻撃:Apache TikaなどのPDFパーサーの脆弱性により、XML Forms Architecture(XFA)内の外部エンティティを利用した攻撃も報告されています。
影響と重要性
データ漏洩リスク
PDFインジェクションは大規模な情報漏洩を引き起こす可能性があります。攻撃者は以下の情報にアクセス可能です:
- 金融情報(銀行口座、クレジットカード、取引詳細)
- 個人情報(住所、電話番号、社会保障番号)
- 企業秘密(内部文書、戦略計画)
- 認証情報(パスワード、APIキー、トークン)
コンプライアンス違反
GDPRやHIPAA、PCI DSS、CCPAなどの規制に準拠する必要がある組織は、これらの脆弱性により罰則や法的責任を負うリスクがあります。特に、未承認のデータ漏洩は厳しい罰則の対象です。
ブランドイメージの毀損
セキュリティ侵害は顧客の信頼を失わせ、ブランド価値を毀損します。具体的には:
- 顧客離れや取引減少
- ネガティブなメディア報道
- 株価の下落
- 新規顧客や人材の獲得難化
検出と防止策
入力のサニタイズと検証
PDFインジェクション防止の基本は、徹底した入力検証です:
特殊文字のエスケープ:`
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.