公開日:2016/11/14 最終更新日:2017/12/21

JVNTA#94087669
細工された PDF による情報詐取について

概要

PDF ファイルに FormCalc 言語で書かれたスクリプトを埋め込むことで、その PDF ファイルがホストされているサーバと同一オリジン上の任意のコンテンツを取得することが可能です。ユーザによる任意の PDF ファイルのアップロードを許可するウェブアプリケーションやサービスにおいてこの動作を攻撃者に悪用された場合、サーバ上のセンシティブな情報を窃取される可能性があります。

影響を受けるシステム

次に示すサーバとクライアントの組み合わせで問題が発生します。

サーバ: ユーザによる PDF のアップロードを許可する。アップロードされた PDF を同一オリジンに格納する。
クライアント: Adobe PDF Plugin を有効にした IE11 もしくは Firefox

詳細情報

PDF には入力フォームを持つドキュメントを作成する機能がありますが、この機能を実現するための仕様として、PDF 1.5 以降、Adobe が策定した Adobe XML Forms Architecture (XFA) がサポートされています。さらに、フォームに入力された値を使って動的に演算等の処理を行うために、FormCalc と呼ばれるスクリプト言語が用意されており、これを用いることで PDF ドキュメントにプログラムを埋め込むことが可能です。

FormCalc の概要、言語の仕様は、Adobe が提供する FormCalc ユーザーリファレンスにまとめられています。

FormCalc には、数値演算を行うための関数のほかに、URL 関数と呼ばれる関数群が用意されています。コンテンツの取得やポスト、アップロードを可能にする Get(), Post(), Put() と呼ばれる関数がこれに相当し、引数に指定された URL からコンテンツを取得したり、引数に渡したデータを指定した URL にポストしたりすることが可能です。つまり、PDF に埋め込まれたプログラムから、同一オリジン上のコンテンツをダウンロードしたり、異なるオリジンに対してポストしたりすることが可能です。

この動作は Adobe XFA の仕様です。攻撃者はこの仕様を悪用し、たとえば PDF - Mess with the web で述べられているような攻撃を行う可能性があります。

(1) (Attacker) FormCalc スクリプトを埋め込んだ PDF ファイルを攻撃対象となるサーバにアップロードする。スクリプトは同一オリジン上に置かれたセンシティブなデータを Get() で取得するというもの。
(1)'(Attacker) PDF へのリンクをクリックさせる。
(2) (Victim) PDF がウェブブラウザ上にロードされる。
(2)'(Victim) FormCalc が Victim のコンテキストで Get() リクエストを送信し、センシティブなデータを取得する。取得されたデータが外部サーバに Post() される。

(2)' においてウェブブラウザによってリクエストが送信されるため、セッションクッキーが付与されたリクエストを送信される可能性があります。

Adobe は、クロスオリジンに対する同様の脅威は脆弱性として修正しています (CVE-2014-8453) が、同一オリジンに対する動作は仕様であると判断しているため、ユーザやウェブアプリケーション側で対策する必要があります。

攻撃手法は PoC||GTFO 0x12PDF特殊機能(FormCalc編)でも公開されています。

想定される影響

Stored XSS や CSRF と同様の脅威が発生することが考えられます。

つまり、サーバ上のセンシティブな情報を攻撃者に取得されたり、攻撃者に不正なリクエストを送信されアカウントの奪取やシステムの設定変更を行われたりする可能性があります。

対策方法

ユーザ側の対策
ウェブブラウザ (IE11、Firefox) の Adobe PDF プラグインを無効にする

サーバ側の対策
PDF コンテンツを別のサンドボックス・ドメイン上に格納する

なお、攻撃者が PDF を埋め込んだ場合、HTTP レスポンスヘッダに Content-Disposition: attachment を付与しても無視されるため、有効な対策とはなりません。

ベンダ情報

ベンダ ステータス ステータス
最終更新日
ベンダの告知ページ
BizMobile株式会社 該当製品無し 2017/12/21
アライドテレシス株式会社 該当製品無し 2016/11/14
サイボウズ株式会社 該当製品あり 2016/11/14 サイボウズ株式会社 の告知ページ
ジェイティ エンジニアリング株式会社 該当製品無し 2016/11/28

参考情報

  1. Adobe
    FormCalc ユーザーリファレンス
  2. OWASP AppSecEU 15
    PDF - Mess with the web
  3. International Journal of Proof-of-Concept or Get The Fuck Out (PoC||GTFO or PoC or GTFO)
    PoC||GTFO 0x12
  4. Hack Patch!
    PDF特殊機能(FormCalc編)

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

謝辞

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE
JVN iPedia

更新履歴

2016/11/14
BizMobile株式会社のベンダステータスが更新されました
2016/11/16
詳細情報の誤記を修正しました
2016/11/28
ジェイティ エンジニアリング株式会社のベンダステータスが更新されました
2017/12/21
BizMobile株式会社のベンダステータスが更新されました