DefenseCode的安全研究团队在Umbraco CMS中发现了一个潜在的高风险漏洞。php
Umbraco CMS易受任意文件上传漏洞的***,该漏洞可致使远程代码执行(取决于服务器配置)和存储的跨站点脚本(Stored Cross-Site Scripting )漏洞。html
Umbraco CMS是一个功能齐全的开放源码内容管理系统,它具备足够的灵活性,能够处理从小型活动和电子宣传册到财富500强企业(包括世界上最大的媒体组织)的复杂应用程序的任何内容。全世界有超过500000个网站在使用它。数据库
Umbraco CMS主要用C#编写,将数据存储在关系数据库(一般是Microsoft SQL Server)中,并调用Umbraco CMS的Microsoft IIS(互联网信息服务)。浏览器
漏洞描述在分析Umbraco CMS源代码时咱们使用了DefenseCode ThunderCan®SAST,默认扫描配置。DefenseCode Thundercan®是一个SAST(静态应用程序安全测试,白盒测试)解决方案,用于对应用程序源代码执行普遍的安全审计。Thundercan®对大型复杂的源代码项目执行快速而深刻的精确分析,提供精确的结果和较低的误报率。安全
ThunderScan® 在Umbraco CMS代码段检测出漏洞:服务器
上述逻辑与用户我的信息内的上传头像有关(源代码:/src/Umbraco.Web/Editors/UsersController.cs)ide
ThunderScan的默认扫描配置没有考虑帐户自定义的输入的清理(Sanitization)方法,例如ToSafeFileName()——这是一个字符串扩展方法,用于防止能够形成路径遍历***的任何文件名操做——或者使用DisallowedUploadedFiles列表的文件扩展名黑名单检查。测试
然而,防止潜在危险文件的黑名单方法促使对应用程序逻辑进行更深刻的检查。不容许扩展名的默认列表定义在umbracoSettings.config文件中:网站
ashx,aspx,ascx,config,cshtml,vbhtml,asmx,air,axd,swf,xml,xhtml,html,htm, php,htaccess
因为这种方法,***者能够解析为扩展名,如.wsdl、.xsl、.xsd和其余基于XML的文件类型,这些文件类型将由Microsoft IIS内联提供,而且能够包含可由受害者浏览器执行的恶意JavaScript代码,从而在Umbraco CMS的默认部署中有效地执行存储的跨站点脚本(Stored Cross-Site Scripting)***。编码
跨站脚本***(XSS)是一种注入类型的***,恶意脚本被注入到良性和可信的网站。XSS***发生时,***者使用一个Web应用向不一样的终端用户发送恶意代码,恶意代码的形式一般是浏览器端脚本。放任这些***成功的缺陷是很是广泛的,发生在Web应用程序在其生成的输出中使用了用户输入而未经验证或编码的任何地方。
***者能够使用XSS向不知情的用户发送恶意脚本。最终用户的浏览器没法得知脚本不该被信任而将会执行该脚本,因为它认为脚原本源可信,因此恶意脚本可以访问被浏览器保留并与该站点一块儿使用的任何Cookie、会话令牌或其余敏感信息。这些脚本甚至可以重写HTML页面的内容。
这一点能够在Umbraco CMS上在线验证,向/umbraco/backoce/UmbracoApi/Users/PostSetAvatar?id=1终端提交POST上传请求。用于概念验证(POC)的文件扩展名.xsdl,包含如下内容:
<defensecode:script xmlns:defensecode="http://www.w3.org/1999/xhtml"> alert('XSS')
访问上传文件的URL时执行的概念验证JavaScript以下所示:
若是服务器支持经典ASP,上载.asp文件可能致使远程代码执行。这种状况并很多见,由于须要支持托管在同一服务器上的遗留应用程序。对于启用了WCF服务的HTTP激活功能的服务器也能够这样说,其中.xamlx文件上载将用于相同的***。
该漏洞已于2020年11月22日向供应商报告,当时Umbraco CMS的最新版本为8.8.2版。该报告已于2020年11月25日被Umbraco安全团队确认。在默认值中只添加了一个潜在危险的扩展不容许的扩展列表:xamlx。
这使得最新版本(8.12.1,在本博客发布时)仍然容易受到存储的跨站点脚本***,以及经过经典ASP文件执行潜在的远程代码。