web-dev-qa-db-ja.com

WebサーバーがXML外部エンティティの読み込みを許可するのはなぜですか?

私はXXEインジェクションについて読んでいますが、これまでに見たすべての例では、(以下のように)xml外部エンティティーを自発的にロードするWebサーバーが関与しています。

<?php 
libxml_disable_entity_loader (false); 
$xmlfile = file_get_contents('php://input'); 
$dom = new DOMDocument(); 
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); 
$creds = simplexml_import_dom($dom); 
$user = $creds->user; 
$pass = $creds->pass; 
echo "You have logged in as user $user";?>

XXEインジェクション攻撃のリスクとそれらの攻撃がa)機密情報を開示し、かつ/またはb)リモートでコードを実行(RCE)する可能性を考えると、Webサーバーの開発者/管理者が決定する理由そもそも外部xmlエンティティの読み込みを有効にしますか?

これまでのところ、外部xmlエンティティをロードできるようにする動機については説明していません。それは単に怠惰なコーディングですか?無知?便利?

1

webサーバーの開発者/管理者が、そもそも外部xmlエンティティの読み込みを有効にすることにしたのはなぜですか

通常、これは明示的に有効にすることではなく、問題を認識せず、安全でないデフォルト設定でライブラリを使用することです。多くのライブラリでは、デフォルトで外部エンティティの読み込みが有効になっているか、有効になっています。 OWASP XML External Entity Prevention Cheat Sheet から引用するには:

... libxml2バージョン2.9以降、XXEはデフォルトで無効になっています

つまり、それが有効になる前に

... libxerces-c ... XercesDOMParserを使用すると、XXEを防止できます... SAXParserを使用すると、XXEを防止できます... SAX2XMLReaderを使用すると、XXEを防止できます...

デフォルトで有効になっていることを示唆しています

...ほとんどのJava XMLパーサーのデフォルト設定では、XXEが有効になっています。

このドキュメントには、XXEがデ​​フォルトで有効になっているライブラリが他にもあります。

1
Steffen Ullrich