8

我们在我们的 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)_Prevention_Cheat_Sheet#.NET_4.5.2_and_later

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

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

我们如何为我们的 ASMX Web 服务修复这个 XXE 漏洞?

谢谢

乔恩·波

4

2 回答 2

3

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

首先 - 旨在使用各种不同技术跨 Web 应用程序工作的自动扫描并不能证明存在漏洞。DNS 查找与完全处理相关实体不同。如果对相关 URL 发出后续请求,并且处理来自该 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"其排除在外。

于 2019-04-11T14:38:40.617 回答
2

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

可悲的是,提及此内容的连接文章已因连接退休而被删除,但有人引用链接到它们:

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

于 2019-04-10T21:17:09.723 回答