SV.XXE.XRF
XML 外部エンティティ攻撃の可能性
このエラーは、脆弱に構成された XML パーサーである XMLReaderFactory によって XML 入力が処理されるときに発生します。
脆弱性とリスク
XML 外部エンティティ攻撃は、XML 入力を解析するアプリケーションに対する一種の攻撃です。この攻撃は、外部エンティティへの参照を含む XML 入力が、脆弱に構成された XML パーサーによって処理されるときに発生します。この攻撃により、機密データの開示、サービスの拒否、サーバー側のリクエスト偽造、パーサーが配置されているマシンの視点からのポートスキャン、またはその他のシステムへの影響が発生する可能性があります。
軽減と防止
XML 外部エンティティ攻撃を防ぐ最も安全な方法は、常に DTD (外部エンティティ) を完全に無効にすることです。パーサーによっては、メソッドが異なる場合があります。
脆弱コード例
1 import org.xml.sax.XMLReader; 2 import org.xml.sax.helpers.XMLReaderFactory; 3 4 public class Test { 5 public void test() { 6 XMLReader reader = XMLReaderFactory.createXMLReader(); 7 reader.parse(""); 8 } 9 }
この例では、Klocwork は 6 行目で SV.XXE.XRF エラーを報告します。これは、脆弱に構成された XML パーサー「XMLReaderFactory」によって XML 入力が処理されることを示しています。
修正コード例
1 import org.xml.sax.XMLReader; 2 import org.xml.sax.helpers.XMLReaderFactory; 3 4 public class Test { 5 public void test(Source source) { 6 XMLReader reader = XMLReaderFactory.createXMLReader(); 7 8 reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); 9 reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); 10 reader.setFeature("http://xml.org/sax/features/external-general-entities", false); 11 reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); 12 13 reader.parse(""); 14 } 15 }
関連チェッカー
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。