SpiderLabs Blog

Virtual Patch for ASP.Net Forms Authentication Bypass Vulnerability (CVE-2011-3416)

Written by Ryan Barnett | Jan 4, 2012 11:21:00 AM

Last Thursday, Microsoft released an out-of-band security patch (MS11-100) which includes a fix for CVE-2011-3416:

An elevation of privilege vulnerability exists in the way that .NET Framework authenticates users. In order to exploit this vulnerability, an unauthenticated attacker would need to be able to register an account on the ASP.NET application, and must know an existing account name for a targeted user. The attacker could then craft a special web request using a previously registered account name to gain access to that account. The attacker could then take any action in the context of the targeted user, including executing arbitrary commands on the site.

This vulnerability is described in more detail in the following advisory:

Vulnerability overview/description:-----------------------------------The null byte termination vulnerability exists in theCopyStringToUnAlingnedBuffer() function of the webengine4.dll library used bythe .NET framework. The unicode string length is determined using the lstrlenWfunction. The lstrlenW function returns the length of the string, incharacters not including the terminating null character. If the unicode stringcontaining a null byte is passed, its length is incorrectly calculated, so onlycharacters before the null byte are copied into the buffer.This vulnerability can be leveraged into an authentication bypassvulnerability. Microsoft ASP.NET membership system depends on theFormsAuthentication.SetAuthCookie(username, false) method for certainfunctionality. By exploiting this vulnerability an attacker is able to log onas a different existing user with all the privileges of the targeted user(e.g. admin).Proof of concept:-----------------Detailed exploit information and source code references have been removed fromthis advisory.An attacker is able to bypass authentication in certain functionality usingnull bytes and log on as another user, e.g. admin.

Even though the full PoC code was redacted from the vulnerability announcement, Trustwave SpiderLabs Research Team was able to obtain example attack payloads through our MAPP (Microsoft's Active Protections Program) membership. Based on that data, we have created the following ModSecurity virtual patch to identify exploit attempts:

SecRule REQUEST_METHOD "@streq POST" "chain,phase:2,t:none,log,block,id:'2100000',msg:'Trustwave SpiderLabs Alert - Possible Elevation of Privilege Attack against .Net.',tag:'http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-3416',tag:'http://technet.microsoft.com/en-us/security/bulletin/ms11-100'"        SecRule REQUEST_FILENAME "@contains /Membership/CreatingUserAccounts.aspx" "chain"                SecRule ARGS:/\$CreateUserStepContainer\$UserName$/ "@validateByteRange 1-255"

This virtual patch is also included within the commercial ModSecurity Rules from Trustwave SpiderLabs along with many other virtual patches created by the SpiderLabs Research Team.