LSASS SMB NTLM Exchange Remote Memory Corruption
Posted on 14 November 2016
MS16-137: LSASS Remote Memory Corruption Advisory Title: LSASS SMB NTLM Exchange Remote Memory Corruption Version: 1.0 Issue type: Null Pointer Dereference Authentication: Pre-Authenticated Affected vendor: Microsoft Release date: 8/11/2016 Discovered by: Laurent GaffiA(c) Advisory by: Laurent GaffiA(c) Issue status: Patch available Affected versions: Windows: XP/Server 2003, Vista, 7, 2008R2, Server 2012R2, 10. ================================================= A vulnerability in Windows Local Security Authority Subsystem Service (LSASS) was found on Windows OS versions ranging from Windows XP through to Windows 10. This vulnerability allows an attacker to remotely crash the LSASS.EXE process of an affected workstation with no user interaction. Successful remote exploitation of this issue will result in a reboot of the target machine. Local privilege escalation should also be considered likely. Microsoft acknowledged the vulnerability and has published an advisory and a patch, resolving this issue. Technical details ----------------- This vulnerability affects both LSASS client and server and can be triggered remotely via SMBv1 and SMBv2, during the NTLM message 3 (Authenticate) message. Incoming NTLM messages via SMB are using ASN1 and DER encoding, the first ASN length field can be set to unsigned int by using 0x84. This allows an attacker to remotely allocate a huge chunk of memory, for a message never larger than 20000 chars. The secondary trigger is to set any string fields (User, Domain, session Key, MIC, etc) with a long string (80-140 chars), leading LSASS.exe to crash. eax=00000000 ebx=000e3e04 ecx=fffffff8 edx=fffffffc esi=000e3e00 edi=00000004 eip=7c84cca2 esp=00aaf9ac ebp=00aaf9d4 iopl=0 nv up ei pl nz ac po cy cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010213 ntdll!RtlpWaitOnCriticalSection+0xdf: 7c84cca2 ff4014 inc dword ptr [eax+14h] ds:0023:00000014=???????? STACK_TEXT: 00aaf9d4 7c83cfd7 00000b3c 00000004 00000000 ntdll!RtlpWaitOnCriticalSection+0xdf 00aaf9f4 4ab82f4a 000e3e00 00aafbec 00000000 ntdll!RtlEnterCriticalSection+0xa8 <-- Is used with a null pointer 00aafa18 4ab82765 000e3de8 ffffffff 00000001 lsasrv!NegpBuildMechListFromCreds+0x25 <-- Uses a null creds. 00aafbfc 4abc8fbb 00000001 00aafe40 000e3de8 lsasrv!NegBuildRequestToken+0xd9 00aafc34 4abca13f 000e3de8 00120111 00000010 lsasrv!NegGenerateServerRequest+0x2a 00aafc98 4ab85edb 000e3de8 00000000 00aafe40 lsasrv!NegAcceptLsaModeContext+0x344 00aafd0c 4ab860c8 00d5f900 00d5f908 00aafe40 lsasrv!WLsaAcceptContext+0x139 00aafe84 4ab7ae7b 00d5f8d8 005ccaf0 00599048 lsasrv!LpcAcceptContext+0x13b 00aafe9c 4ab7ad7e 00d5f8d8 4ac22738 00d5a158 lsasrv!DispatchAPI+0x46 00aaff54 4ab7a7c9 00d5f8d8 00aaff9c 77e5baf1 lsasrv!LpcHandler+0x1fe 00aaff78 4ab8f448 00598ce8 00000000 00000000 lsasrv!SpmPoolThreadBase+0xb9 00aaffb8 77e6484f 0059ade8 00000000 00000000 lsasrv!LsapThreadBase+0x91 00aaffec 00000000 4ab8f3f1 0059ade8 00000000 kernel32!BaseThreadStart+0x34 dt ntdll!_RTL_CRITICAL_SECTION +0x000 DebugInfo : Ptr32 _RTL_CRITICAL_SECTION_DEBUG +0x004 LockCount : Int4B +0x008 RecursionCount : Int4B +0x00c OwningThread : Ptr32 Void +0x010 LockSemaphore : Ptr32 Void +0x014 SpinCount : Uint4B - LSASS NegpBuildMechListFromCreds sends a null pointer "creds" to NTDLL RtlEnterCriticalSection. - RtlEnterCriticalSection is used with a null pointer, which triggers the crash. Impact ------ Successful attempts will result in a remote system crash and possibly local privilege escalation. Affected products ----------------- Windows: - XP - Server 2003 - 7 - 8 - 2008 - 2012 - 10 Proof of concept ---------------- A proof of concept is available at the following URL: https://github.com/lgandx/PoC/tree/master/LSASS https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/40744.zip This proof of concept is fully automated and includes non-vulnerable detection. Solution -------- Install the corresponding MS patch. More details: https://technet.microsoft.com/en-us/library/security/ms16-137.aspx Response timeline ----------------- * 17/09/2016 - Vendor notified, proof of concept sent. * 28/09/2016 - Issue confirmed by MSRC * 14/10/2016 - Vendor says he plan to release a patch in November, that is 1 month in advance of the scheduled 3 month. * 08/11/2016 - Vendor release MS16-137. * 08/11/2016 - This advisory released. References ---------- * https://twitter.com/PythonResponder * https://github.com/lgandx/Responder