asp.net .asmx网络服务是如何XXE漏洞 - 外部DNS

问题描述 投票:8回答:2

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

我们正在使用burp suite测试asp.net .asmx Web服务,以检查XML外部实体处理漏洞。见:https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing

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

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

DNS请求将发送至cigitalcollaborator.com。这表示asmx Web服务正在处理请求中的DTD。

我们使用的是.net 4.5.2版。

根据此链接,应针对.net 4.5.2及更高版本隐式阻止XXE漏洞:https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#.NET_4.5.2_and_later

但它不是......我们得到这个DNS查找。

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

我们如何为ASMX Web服务修复此XXE漏洞?

谢谢

乔恩波

c# asp.net xml asmx xxe
2个回答
3
投票

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

首先 - 使用各种不同技术在Web应用程序中工作的自动扫描并不能证明存在漏洞。 DNS查找与完全处理相关实体不同。如果对相关网址发出后续请求,并且处理了该数据,那么您就会遇到漏洞。您可以使用像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"来排除这一点。


2
投票

ASXM Web服务被认为是遗留的,并且没有收到所有错误修复,因为它们具有有限的扩展点。您可能想要重写这个或者至少使用像WCF或WebAPI那样在它前面放置一个外观...

可悲的是,连接文章的连接文章已被删除连接退休,但有人参考链接到他们:

“它们基于旧的XML序列化技术,该技术没有得到错误修复。(参见微软对2010年1月11日的评论)”https://johnwsaunders3.wordpress.com/

© www.soinside.com 2019 - 2024. All rights reserved.