XXE(XML External Entity)攻撃について

用語解説

XXEは、XML外部エンティティ攻撃(XML External Entity attack)の略語で、ウェブアプリケーションに対するセキュリティ上の脆弱性の一つです。

この攻撃では、悪意のあるユーザーが特定のXMLパーサーを利用して、外部のXMLエンティティを読み込むようにウェブアプリケーションを誘導することができます。これにより、攻撃者はウェブアプリケーションの内部情報を読み取ることができます。

例えば、攻撃者は、ウェブアプリケーションXMLファイルをアップロードする機能がある場合、そのファイル内に悪意のあるエンティティを含めることができます。そして、アプリケーションがそのファイルを解析すると、攻撃者は外部のエンティティから機密情報を取得することができます。

この攻撃は非常に危険で、攻撃者は機密情報を盗むだけでなく、サーバーに対する攻撃を行うこともできます。ウェブアプリケーションの開発者は、XXE攻撃に対して十分なセキュリティ対策を講じることが重要です。

  • XMLパーサー:XML文書を解析するプログラム。
  • 外部エンティティ:XML文書内の定義外のエンティティ。
  • セキュリティ上の脆弱性:攻撃者によって攻撃される可能性がある弱点。
  • 悪意のあるユーザー:攻撃者。
  • ウェブアプリケーションWebブラウザ上で動作するアプリケーション。
  • 内部情報:ウェブアプリケーション内部に保存された情報。
  • 機密情報:第三者に知られたくない情報。
  • アップロード機能:ウェブアプリケーションにファイルをアップロードする機能。
  • セキュリティ対策:攻撃からシステムを守るために取る措置。

XXEの例題

例えば、あるウェブアプリケーションにファイルアップロード機能があり、XML形式のファイルをアップロードできるとします。この場合、攻撃者はXMLファイルの内容を悪用して、XXE攻撃を仕掛けることができます。

攻撃者は、以下のようなXMLファイルを作成し、アップロードします。

<!DOCTYPE test [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>
  <data>&xxe;</data>
</root>

このXMLファイルでは、<!ENTITY>ディレクティブを用いて外部エンティティxxeを定義し、それを<data>要素で参照しています。このxxeエンティティは、file:///etc/passwdというファイルを参照しています。

アプリケーションがこのXMLファイルを解析すると、攻撃者は/etc/passwdファイルの内容を読み取ることができます。このように、XXE攻撃は、攻撃者が外部ファイルの内容を読み取ることができる脆弱性を利用した攻撃手法です。