ブログ

catch-img

サイト脆弱性をチェックしよう! -- 第16回:XXE( XML外部実体参照)攻撃

<目次>

目次[非表示]

  1. 1.XML外部実体参照攻撃とは
  2. 2.XML外部実体参照とは
  3. 3.XML外部実体参照攻撃の攻撃手法
  4. 4.外部ファイルにローカルファイルを指定する攻撃手法の例
    1. 4.1.情報漏えい
  5. 5.外部ファイルにネットワークファイルを指定する攻撃手法の例
    1. 5.1.SSRF(サーバサイド・リクエストフォージェリ)
  6. 6.XML外部実体参照攻撃の回避方法
    1. 6.1.XMLを受け取る仕様をやめる
    2. 6.2.XMLプロセッサの仕様を確認する
  7. 7.まとめ

XML外部実体参照攻撃とは

第14回、第15回で解説したCSRF(クロスサイト・リクエストフォージェリ)、SSRF(サーバサイド・リクエストフォージェリ)攻撃は、いずれも攻撃者が他者(人/サーバ)に意図しないリクエストを送信させることで攻撃する手法であった。

今回解説するXML外部実体参照攻撃は、XMLの仕様を悪用して外部ファイルを読み込ませる手法である。その際攻撃対象サーバからリクエストを送信させることもできるためSSRF攻撃に応用されることもある。

なお、XML外部実体参照とはXMLの機能の名称であり、これを悪用した攻撃はXML外部実体参照攻撃と呼ぶ点に注意する必要がある。

XML外部実体参照とは

XMLには要素の順序や属性のデータ型など、任意の構造を指定する文書型宣言という機能がある。身近な使用例としてはWebサイトを表示するHTMLにも使用されており、文書型宣言でブラウザのレイアウトを指定できる。

文書型宣言にはDTD(Document Type Definition)というスキーマ言語が使用できる。DTDには保守性や再利用性のために外部ファイルを指定することができ、これがXML外部実体参照と呼ばれる機能である。

外部ファイルを指定する際は、文書型宣言ごとだけではなく要素の宣言のみを指定することができる。

また、外部ファイルの指定にはURIが使用できるため、ローカルファイルだけでなくHTTPを使用してネットワーク経由でファイルを取得することが可能だ。

  • 文書型宣言に外部ファイル(ローカルファイル)を指定する際の例

  • 要素の宣言に外部ファイル(ネットワークファイル)を指定する際の例

XML外部実体参照攻撃の攻撃手法

XML外部実体参照機能を悪用し、サーバ管理者の意図しない外部ファイルを読み込ませることで情報漏えい、不正なリモート要求、サービス不能などを行うことができる。

外部ファイルにローカルファイルを指定する攻撃手法の例

情報漏えい

受け付けたXMLの内容を表示する機能がアプリケーションにある場合、サーバ内部のファイルを指定することで機密情報を出力させることができる。

一般的なサーバに共通した機密情報(例えば/etc/passwd)を指定することが多い。

  • 文書型宣言に機密情報(/etc/passwd)を指定する際の例

外部ファイルにネットワークファイルを指定する攻撃手法の例

SSRF(サーバサイド・リクエストフォージェリ)

外部公開していないサーバに不正なリモート要求を送信させることができる。不正なリモート要求の送信によって、機密情報の取得や内部設定の変更ができる。

SSRF攻撃についてはこちらを参照

  • 文書型宣言に不正なリモート要求を指定する際の例

XML外部実体参照攻撃の回避方法

XMLを受け取る仕様をやめる

入力にXMLを使用している場合でも、外部実体参照に代表される高度な機能を必要としているケースは少ない。簡易的な構造体を使用できれば良いという程度であれば、簡易な仕様であるJSONなどに置き換える。

XMLプロセッサの仕様を確認する

直接XMLを受け取るのではなく入力情報をもとにXMLを生成している場合も、XMLインジェクション等の手法によりXXE攻撃を行える場合がある。

  • 外部実体参照を使用しておらず、XMLプロセッサの設定で外部実体参照を無効化できる場合は無効化する。
  • 外部実体参照を使っている、またはXMLプロセッサの設定に無効化がない場合は入力値をバリデーションにて確認する。
  • 外部実体参照の使用にかかわらず、内部でXMLを生成している場合はXMLインジェクションの対策を行う。

まとめ

今回はXXEについて解説した。

XXE脆弱性は動作した結果が外部から観測しにくいため、動的診断では検出が難しい。テストで確認するよりもソースコードチェックなどの手法を導入すると良いだろう。

XMLは機能が豊富であるものの使いこなせない場合も多く、その場合は危険な実装となっている場合も多いためJSON等への置き換えを積極的に推奨する。


過去の脆弱性コラムについてはこちらからご確認ください。

​​​​​​​​​​​​​​


CONTACT

ITインフラに関してお悩みの方は
お気軽にご相談ください

ご不明な点はお気軽に
お問い合わせください。
ITインフラに関するお役立ち資料は
こちらよりダウンロードできます。

人気記事ランキング

タグ一覧