¿Es .NET XmlSerializer.Deserialize (TextReader) seguro?

1

¿Está el método .NET XmlSerializer.Deserialize(TextReader) a salvo de las vulnerabilidades de XML (XXE, XmlBomb, etc.)? ¿Se procesará la DTD durante la deserialización?

Puedo entender por qué XmlSerializer.Deserialize(XmlTextReader) puede ser inseguro si XmlTextReader.DtdProcessing se establece en DtdProcessing.Parse . Pero, ¿es también inseguro cuando usamos un TextReader?

    
pregunta userx 27.06.2018 - 14:16
fuente

1 respuesta

2

Echó un vistazo al código XmlSerializer.Deserialize

XmlSerializer.Deserialize (TextReader) llama internamente a la otra anulación - XmlSerializer.Deserialize (XmlTextReader) con XmlResolver configurado en nulo, por lo que debe estar a salvo de los ataques XXE, sin embargo, si desea deshabilitar el procesamiento dtd por completo, a continuación debe estar utilizado en su lugar.

var xmlTextReader = new XmlTextReader(xmlInput) { DtdProcessing = DtdProcessing.Ignore/Prohibit };
xmlSerializer.Deserialize(xmlTextReader);

Sin embargo, no veo ningún beneficio en deshabilitar el procesamiento DTD por completo (especialmente cuando podría afectar su código de tiempo probado). Según tengo entendido, solo hay dos ataques xml: XXE y amp; XmlBomb.

Como se mencionó anteriormente, XXE no debería ser posible porque XmlResolver está establecido en nulo.

XmlBomb tampoco debería ser posible porque MaxCharactersFromEntities está establecido en un valor limitado en lugar de 0 (0 significa que no hay límite). Si intenta este ataque, se enfrentará a una excepción que dice: "El documento de entrada ha excedido el límite establecido por MaxCharactersFromEntities". en lugar de tener la aplicación bloqueada o tener un ataque DoS.

    
respondido por el userx 27.06.2018 - 16:02
fuente

Lea otras preguntas en las etiquetas