2017-09-19 14 views
0

したがって、アプリケーションでセキュリティスキャンを実行すると問題が発生しています。 It turns out that I am failing to protect against XXE。ここ は、問題のあるコードを示す短い抜粋です:XXE:XDocumentを使用したXML外部エンティティリファレンスの不適切な制限

static void Main() 
     { 
      string inp = Console.ReadLine(); 
      string xmlStr = ""; //This has a value that is much too long to put into a single post 

      if (!string.IsNullOrEmpty(inp)) 
      { 
       xmlStr = inp; 
      } 
      XmlDocument xmlDocObj = new XmlDocument {XmlResolver = null}; 
      xmlDocObj.LoadXml(xmlStr); 
      XmlNodeList measureXmlNodeListObj = xmlDocObj.SelectNodes("REQ/MS/M"); 

      foreach (XmlNode measureXmlNodeObj in measureXmlNodeListObj) 
      { 
       XmlNode detailXmlNodeListObj = xmlDocObj.SelectSingleNode("REQ/DTD"); 
       string measureKey = measureXmlNodeObj.Attributes["KY"].Value; 
       if (detailXmlNodeListObj.Attributes["MKY"].Value == 
        measureKey) //Checking if selected MeasureKey is same 
       { 
        XmlNode filerNode = measureXmlNodeObj.SelectSingleNode("FS"); 

        if (filerNode != null) 
        { 

         XDocument fixedFilterXmlObj = XDocument.Load(new StringReader(filerNode.OuterXml)); 

         var measureFixedFilters = (from m in fixedFilterXmlObj.Element("FS").Elements("F") 
          select m).ToList(); 
         foreach (var fixedFilter in measureFixedFilters) 
         { 
          var fixedFilterValues = (from m in fixedFilter.Elements("VS").Elements("V") 
           select m.Attribute("DESC").Value).ToList(); 

          foreach (var value in fixedFilterValues) 
          { 
           Console.WriteLine(value.Trim()); 
          } 
         } 
        } 
       } 
      } 
      Console.ReadLine(); 
     } 

のVeraCode、安全ではないがXDocument fixedFilterXmlObj = XDocument.Load(new StringReader(filerNode.OuterXml));

である。しかし、それはOwsap、it should be safeによるように思えるラインによると:

両方System.Xml.LinqライブラリのXElementおよびXDocumentオブジェクト は、デフォルトでXXEインジェクションから安全です。 XElementはXMLファイル内の 要素のみを解析するため、DTDはすべて無視されます。 XDocumentにはデフォルトでDTDが無効になっています。 が異なる安全でないXMLパーサーで構築されている場合は、安全ではありません。

だから、私はusafe XML Parserを使用していると思われます。XDocumentをXXEに開きます。

I found a unit test that replicates the issueともXDocumentの安全な使用方法がありますが、私は使用していないので、私は、私のコードは安全ではない正確に何を見つけるように見えることはできません。

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.DtdProcessing = DtdProcessing.Parse; // unsafe! 

あなたが問題を複製するために私のコードを実行することができます私はどのようにか、なぜこの作品はよく分からない

答えて

0

(単一のポストのためには大きすぎる)hereを、しかし、それはありません::、しかし、あなたは、この値を空のxmlStrと行を置き換える必要があり

XDocument fixedFilterXmlObj; 
using (XmlNodeReader nodeReader = new XmlNodeReader(filerNode)) 
{ 
    nodeReader.MoveToContent(); 
    fixedFilterXmlObj = XDocument.Load(nodeReader); 
} 
関連する問題