はじめに
XXE(XML External Entity)攻撃についてはこちら👇👇👇
問題
問題1:
お店の商品情報をXML形式で保存するウェブアプリケーションを開発しています。以下のXMLファイルを解析するプログラムがあります。このプログラムには、XXE攻撃を受ける可能性があります。
<!DOCTYPE example [
<!ENTITY message "Hello, World!">
]>
<root>
<data>&message;</data>
</root>
このXMLファイルにどのような攻撃を仕掛けることができますか?また、どのように対策することができますか?
問題2:
あなたは、Webアプリケーションの脆弱性診断を行うプログラムを開発しています。そのプログラムでは、XML形式で記述されたHTTPリクエストを受け取ります。しかし、攻撃者がHTTPリクエストを改ざんするため、XXE攻撃に対する対策が必要です。
以下のXMLファイルを解析するプログラムがあります。このプログラムには、XXE攻撃を受ける可能性があります。
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>
このXMLファイルにどのような攻撃を仕掛けることができますか?また、どのように対策することができますか?
問題3:
あなたは、XML形式で記述されたファイルの検証を行うプログラムを開発しています。しかし、攻撃者がXMLファイルを改ざんするため、XXE攻撃に対する対策が必要です。
以下のXMLファイルを解析するプログラムがあります。このプログラムには、XXE攻撃を受ける可能性があります。
<!DOCTYPE example [
<!ENTITY message "Hello, World!">
]>
<root>
<data>&message;</data>
</root>
このXMLファイルにどのような攻撃を仕掛けることができますか?また、どのように対策することができますか?
解答
解答1:
このXMLファイルには、外部エンティティ参照を利用することで、任意のファイルを読み込むことができます。攻撃者が意図的に改ざんしたXMLファイルをアプリケーションが解析した場合、攻撃者が用意した外部エンティティ参照を読み込んでしまうため、攻撃者が用意した任意のファイルを読み込んでしまう可能性があります。
対策としては、外部エンティティ参照を無効化することが考えられます。具体的には、XMLパーサーの構成設定で、外部エンティティ参照の解決を禁止することができます。
解答2:
このXMLファイルには、外部エンティティ参照を利用することで、任意のファイルを読み込むことができます。攻撃者が意図的に改ざんしたHTTPリクエストをアプリケーションが解析した場合、攻撃者が用意した外部エンティティ参照を読み込んでしまうため、攻撃者が用意した任意のファイルを読み込んでしまう可能性があります。
対策としては、外部エンティティ参照を無効化することが考えられます。具体的には、XMLパーサーの構成設定で、外部エンティティ参照の解決を禁止することができます。
解答3:
このXMLファイルには、外部エンティティ参照を利用することで、任意のファイルを読み込むことができます。XMLファイルの検証を行うプログラムが、意図的に改ざんされたXMLファイルを解析した場合、攻撃者が用意した外部エンティティ参照を読み込んでしまうため、攻撃者が用意した任意のファイルを読み込んでしまう可能性があります。
対策としては、外部エンティティ参照を無効化することが考えられます。具体的には、XMLパーサーの構成設定で、外部エンティティ参照の解決を禁止することができます。また、XML Schemaなどを用いて、XMLファイルの構造を事前に定義しておくことも有効です。
用語解説
- XML(eXtensible Markup Language):マークアップ言語の一種で、データを階層構造で表現するための言語です。HTMLと同じく、タグを用いて構造を表現します。
- XXE(XML External Entity):XML文書に外部エンティティ参照を含めることで、任意の外部ファイルを読み込ませる攻撃手法のことです。
- 外部エンティティ参照:XML文書内に記述された外部の定義を参照するための仕組みです。攻撃者は、これを利用して任意のファイルを読み込む攻撃を行うことができます。
- HTTP(HyperText Transfer Protocol):Web上でデータをやり取りするためのプロトコルの一つで、クライアントからサーバへのリクエストと、サーバからのレスポンスを定義しています。
- XMLパーサー:XML文書を解析するためのプログラムです。外部エンティティ参照を含むXML文書を解析する場合、パーサーが外部ファイルを読み込んでしまうことがあります。
- XML Schema:XML文書の構造を定義するための言語で、XML文書の構造を正確に定義することができます。これにより、XML文書の構造が予め定義されているため、攻撃者が悪意のあるXML文書を作成することを防ぐことができます。