asp.net.asmx web服务ishow XXE漏洞-外部DNS



我们在asp.net asmx web服务中发现了一个XML外部实体漏洞。

我们正在使用burp套件测试asp.net.asmx web服务,以检查XML外部实体处理漏洞。请参阅:https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#net

我们看到,当DTD包含在请求中时,如下所示:

<!DOCTYPE soapenv:envelope PUBLIC "-//B/A/EN" "http://1234565.cigitalcollaborator.com">

cigitalcollaborator.com的DNS请求被发送到。这表明asmx web服务正在处理请求中的DTD。

我们使用的是.net版本4.5.2。

根据此链接,应为.net 4.5.2及更高版本隐式屏蔽XXE漏洞:https://www.owasp.org/index.php/XML_External_Entity_(XXE(_事件_备忘单#.NET_4.5.2_和_后

但它不是。。。我们ge这个DNS查找。

底层的.net框架正在处理此asmx web服务的XML反序列化/序列化,因此这里没有代码可供我们真正修复。我们不能正确地改变行为,因为它在底层框架中的某个地方?

我们如何修复ASMX web服务的XXE漏洞?

谢谢

Jon Paugh

我认为在这里考虑两个不同的点很重要:

首先,设计用于使用各种不同技术跨web应用程序工作的自动扫描并不能证明存在漏洞。DNS查找与完全处理有问题的实体不同。如果对有问题的url进行了后续请求,并且处理了其中的数据,则存在漏洞。您可以使用Fiddler这样的代理来配置您的应用程序,以验证是否发出了这样的请求。

其次,.NET从4.5.2开始就一直是安全的默认情况下。这与保证安全不同。如果应用程序需要DTD处理,可以在以下设置中启用:

var xmlReaderSettings = new XmlReaderSettings();
xmlReaderSettings.DtdProcessing = DtdProcessing.Parse;
var xmlReader = XmlReader.Create(new StringReader("EvilXml", xmlReaderSettings));

var xmlTextReader = new XmlTextReader(new StringReader("EvilXml");
xmlTextReader..DtdProcessing = DtdProcessing.Parse;

使用XDocument解析器实现过程DTD

var xmlDocument = new XmlDocument();
// Implementations of XmlResolver are probably  unsafe
xmlDocument.XmlResolver = new MyCustomResolver(); 
// xmlDocument.XmlResolver = null is safe - should be the default from 4.5.2 
xmlDocument.LoadXml("EvilXml");

我可能会在源代码中搜索两个相关的文本字符串"DtdProcessing.Parse""XmlResolver"来排除这种情况。

ASXM web服务被认为是遗留的,并且不会收到所有的错误修复,因为它们的扩展点有限。你可能想重写这篇文章,或者至少用WCF或WebAPI之类的方法在它前面加上一个门面。。。

遗憾的是,提到这一点的connect文章已经随着connect的退役而被删除,但人们也提到了链接到它们:

"它们基于旧的XML序列化技术,该技术没有得到错误修复。(请参阅Microsoft 2010年11月1日的评论("https://johnwsaunders3.wordpress.com/

最新更新