JVNTA#94087669
細工された PDF による情報詐取について
PDF ファイルに FormCalc 言語で書かれたスクリプトを埋め込むことで、その 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 で述べられているような攻撃を行う可能性があります。
Get()
で取得するというもの。(1)'(Attacker) PDF へのリンクをクリックさせる。
(2) (Victim) PDF がウェブブラウザ上にロードされる。
(2)'(Victim) FormCalc が Victim のコンテキストで
Get()
リクエストを送信し、センシティブなデータを取得する。取得されたデータが外部サーバに Post()
される。(2)' においてウェブブラウザによってリクエストが送信されるため、セッションクッキーが付与されたリクエストを送信される可能性があります。
Adobe は、クロスオリジンに対する同様の脅威は脆弱性として修正しています (CVE-2014-8453) が、同一オリジンに対する動作は仕様であると判断しているため、ユーザやウェブアプリケーション側で対策する必要があります。
攻撃手法は PoC||GTFO 0x12 や PDF特殊機能(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 |
-
Adobe
FormCalc ユーザーリファレンス -
OWASP AppSecEU 15
PDF - Mess with the web -
International Journal of Proof-of-Concept or Get The Fuck Out (PoC||GTFO or PoC or GTFO)
PoC||GTFO 0x12 -
Hack Patch!
PDF特殊機能(FormCalc編)
- 2016/11/14
- BizMobile株式会社のベンダステータスが更新されました
- 2016/11/16
- 詳細情報の誤記を修正しました
- 2016/11/28
- ジェイティ エンジニアリング株式会社のベンダステータスが更新されました
- 2017/12/21
- BizMobile株式会社のベンダステータスが更新されました