web-dev-qa-db-ja.com

XML外部エンティティとリモートファイルインクルージョン攻撃の違い

私は、XML外部エンティティ攻撃とリモートファイルインクルージョン攻撃について研究していました。

私の理解によると、XML外部エンティティ攻撃とは、WebアプリケーションのXMLパーサーで外部エンティティを有効にするオプションがあり、攻撃者がリモートサーバーから外部XMLを解析してコマンドを実行したり、ローカルシステムファイルを読み取ったりできることです。

リモートファイルインクルード攻撃は、攻撃者がリモートサーバー上にあるファイルをシステムに実行させることができ、このファイルの内容も悪意のあるものであり、攻撃者はシステムレベルのファイルにアクセスしたり、バックドアをインストールしたりすることもできますこの脆弱性を使用します。

XML外部エンティティ攻撃とリモートファイルインクルード攻撃を区別することはできません。どちらの攻撃も、リモートファイルの実行が情報の漏洩につながる可能性があるためです。

1
Skynet

リモートファイルインクルードで最も悪名高いプログラミング言語はPHPです。以下は、PHPリモートファイルインクルードの脆弱性に関するウィキペディアの記事 " File Inlucsion Vulnerability "のPHPサンプルコードです。この例では、外部サーバーのコードが含まれています。リモートファイルインクルードは、リモートコード実行クラスの脆弱性です。

<?php
   if ( isset( $_GET['language'] ) ) {
      include( $_GET['language'] . '.php' );
   }
?>

XXE(XML外部エンティティ)の脆弱性も上記の例に似ている可能性があります。以下は [〜#〜] owasp [〜#〜] からの例で、コードを実行するために予期スキームを悪用しています。これはPHP専用です。

<?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [ <!ELEMENT foo ANY >
   <!ENTITY xxe SYSTEM "expect://id" >]>
    <creds>
       <user>&xxe;</user>
       <pass>mypass</pass>
    </creds>

Expectスキームはコマンドを実行します(PHPコードとしてではなく、OSレベルで)。PHPには ドキュメント があり、期待スキームが使用されることを意図しています。

しかし、PHPからフォーカスを外してWebアプリケーション全般を見ると、XXEは、ローカルファイル(または脆弱なWebアプリケーションがネットワークにアクセスできるリモートファイル)を見るためだけに悪用されることがよくあります。通常、次のペイロードで行われます。

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [  
   <!ELEMENT foo ANY >
   <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>

XXEの別の誤用ケースは、GETメソッドを使用して内部Webアプリケーションへの機密呼び出しをトリガーするために使用できることです。例えば:

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [  
   <!ELEMENT foo ANY >
   <!ENTITY xxe SYSTEM "https://internal.hawaii.gov/api/pacom/alert" >]><foo>&xxe;</foo>

しかし、結論としては、リモートファイルのインクルードとXXEは無関係です。どちらもリモートでコードが実行される可能性があります。しかし、一般的に、リモートファイルのインクルードはリモートコード実行であり、XXEは、(サーバー上の)ローカルファイルからデータを盗むために悪用されます

1