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

时间:2018-07-19 17:17:02

标签: c# asp.net xml asmx xxe

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

我们正在使用burp套件测试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漏洞?

谢谢

乔恩·波普

2 个答案:

答案 0 :(得分: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"来排除这种情况。

答案 1 :(得分:2)

ASXM Web服务被认为是旧的,并且由于扩展点有限,因此不会收到所有的错误修复。您可能想重新编写此代码,或者至少使用WCF或WebAPI等在其前面放置外观。

遗憾的是,与此相关的连接文章已随着连接的退出而被删除,但有些人引用了链接到它们的链接:

“它们基于旧的XML序列化技术,该技术尚未修复错误。(请参阅Microsoft在1/11/2010的评论)” https://johnwsaunders3.wordpress.com/