2016-11-21 13 views
0

私たちのコードに対してセキュリティ監査を行い、コードが外部エンティティ(XXE)攻撃に対して脆弱であると述べました。XMLパーサーを設定しても、外部エンティティの解決を妨げたり制限したりすることはありません。これにより、パーサーがXML外部エンティティ攻撃にさらされる可能性があります。

説明XML外部エンティティ攻撃は、処理時にドキュメントを動的に構築するXML機能の恩恵を受けます。 XMLエンティティは、特定のリソースから動的にデータを含めることを可能にします。外部エンティティでは、XML文書に外部URIからのデータを含めることができます。そうでなければ、外部エンティティは、URIによって指定されたリソース(例えば、ローカルマシン上のファイルまたはリモートシステム上のファイル)にXMLパーサがアクセスするように強制する。この動作は、ローカルシステムのサービス拒否を実行し、ローカルマシン上のファイルへの不正アクセスを取得し、リモートマシンをスキャンし、リモートシステムのサービス拒否を実行するために使用できるXML外部エンティティ(XXE)攻撃にアプリケーションを公開します。以下のXML文書は、XXE攻撃の例を示しています。

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

(UNIXシステム上)サーバーをクラッシュさせる可能性がある。この例では、XMLパーサでは、/ dev /ランダムファイルの内容を持つエンティティを代用しようとした場合。

おすすめ - XMLアンマーシャラーは、着信XML文書の一部として外部エンティティーを許可しないように、安全に構成する必要があります。 XXEインジェクションを避けるには、XMLソースを直接java.io.File、java.io.Readerまたはjava.io.InputStreamとして処理する非整列化メソッドを使用しないでください。安全構成パーサーを使用してドキュメントを解析し、次の例に示すように、XMLソースとしてセキュア

パーサを取るアンマーシャルメソッドを使用:XXE攻撃を見つけた場合

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setExpandEntityReferences(false); 
DocumentBuilder db = dbf.newDocumentBuilder(); 
Document document = db.parse(<XML Source>); 
Model model = (Model) u.unmarshal(document); 

書き込まれたコードは、以下であります -

1- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
2- DocumentBuilder db = dbf.newDocumentBuilder(); 
3- InputSource is = new InputSource(); 
4- is.setCharacterStream(new StringReader(xml)); 
5- 
6- Document doc = db.parse(is); 
7- NodeList nodes = doc.getElementsByTagName(elementsByTagName); 
8- 
9- return nodes; 

私は6 は、私は上記の問題を解決することができますどのように助けていないしてくださいライン上XXE攻撃を取得しています。誰でも助けていただければ幸いです!

我々は彼らを必要としなかったとして、私たちは、無効のdoctype(上記のリンク上の最初の提案)で、それを同様の問題を提起し、解決していた私は、あなたが OWASP XEE Cheat Sheet

で見てください修復のための詳細な説明およびオプションについて

答えて

0

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); 
関連する問題