Asp.net EnableViewStateMac和恶意代码[12月安全更新]

时间:2013-12-10 21:32:38

标签: c# asp.net .net security viewstate

最新的Asp.Net December 2013 Security updates微软发布了针对ASP.Net的补丁 - “不安全的ASP.NET Web窗体(.aspx)配置可能允许远程执行代码”。相关的KB是2905247

我知道ViewStateMac只是用来确保这个ViewState是由服务器生成的,而不是攻击者生成的。但在安全更新文章中他们说:

  

如果Web开发人员为其中的任何页面设置EnableViewStateMac = false   站点,攻击者可以利用它来上传和调用任意   Web服务帐户上下文中的可执行代码。这是   远程代码执行(RCE)攻击的一个例子。

例如,如果我为某些aspx页面禁用EnableViewStateMac,它如何允许攻击者在我的Web应用程序的上下文中执行恶意代码?据我所知,在最糟糕的情况下,攻击者可以欺骗ViewState进行一些假数据\ events \ validation。但它只会影响这个页面。我无法通过将要执行的ViewState上传任何恶意C#代码。在这种情况下,RCE攻击意味着什么?

2 个答案:

答案 0 :(得分:2)

我找不到此漏洞的任何进一步细节,因此我的回答仅推测可能的攻击媒介。

MAC是ViewState值的签名,使用EnableViewStateMac=true ASP.NET将检查MAC签名是否实际将ViewState值标记为可信。这意味着已验证从__VIEWSTATE隐藏字段中的客户端发送的ViewState值来自服务器。

现在假设处理ViewState值的代码很容易说对象反序列化。微软咨询声明:

  

未经身份验证的攻击者可能会将特制的HTTP内容发送到目标服务器,从而可能允许攻击者在ASP.NET站点上运行的服务帐户的上下文中运行服务器上的代码。

使用EnableViewStateMac=true此漏洞无法被利用,因为在处理ViewState值之前验证了MAC。任何未来自服务器的值都将遇到Validation of viewstate MAC failed异常消息。

但是,对于EnableViewStateMac=false,攻击者可以操纵整个ViewState值以利用buffer overflow利用privilege escalation / escape攻击并执行作为有效负载注入的任意代码__VIEWSTATE字段。

总而言之,由于ViewState值不再被验证,因此打开该字段以攻击此未公开的攻击向量。

答案 1 :(得分:0)

它本身并不一定允许攻击者运行代码,但是如果你根据某些输入来预期它是有效的 - 带有值或类似的隐藏字段,那么它可能是他们需要的密钥。 / p>