XXEを防ぐためにJava XMLパーサーを構成する

XML eXternal Entity(XXE)を有効にした後、以下に示すように悪意のあるXMLを作成し、コンピューター上の任意のファイルの内容を読み取ることができます。XXE攻撃がOWASPの上位10件の脆弱性の一部であることは驚くに値しません。ほとんどのXMLパーサーではデフォルトで外部エンティティーが有効になっているため、JavaXMLライブラリーはXXEインジェクション攻撃に対して特に脆弱です。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE bar [
       <!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<song>
   <artist>&xxe;</artist>
   <title>Bohemian Rhapsody</title>
   <album>A Night at the Opera</album>
</song>

以下に示すように、DefaultHandlerおよびJava SAXパーサーの単純な実装は、XMLファイルの解析を実装し、passwdファイルのコンテンツを表示します。ここではJava SAXパーサーのケースが主な例ですが、他のパーサー(DocumentBuilderやDOM4Jなど)も同様のデフォルトの動作をします。

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

DefaultHandler handler = new DefaultHandler() {

    public void startElement(String uri, String localName,String qName,Attributes attributes) throws SAXException {
        System.out.println(qName);
    }

    public void characters(char ch[], int start, int length) throws SAXException {
        System.out.println(new String(ch, start, length));
    }
};

xerces1またはxerces2の外部エンティティおよびdoctypeをそれぞれ許可しないようにデフォルト設定を変更すると、この種の攻撃を防ぐことができます。

...
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();

factory.setFeature("https://xml.org/sax/features/external-general-entities", false);
saxParser.getXMLReader().setFeature("https://xml.org/sax/features/external-general-entities", false);
factory.setFeature("https://apache.org/xml/features/disallow-doctype-decl", true); 
...

悪意のあるXXEインジェクションの防止に関する実践的な情報については、OWASP XXEチートシートをご覧ください。

これは、Javaセキュリティのベストプラクティス10のうちの1つにすぎません。見てみましょうフル10と簡単に印刷可能な1-ページャ利用可能に

から:https://dev.to//brianverm/configure-your-java-xml-parsers-to-prevent-xxe-213c

元の記事を公開0件 ・いい ね0件 648回アクセス

おすすめ

転載: blog.csdn.net/cunxiedian8614/article/details/105691141