Ethical Hacking Learn to find vulnerabilities before the bad guys do! Gain real world hands on hacking experience in our state of the art hacking lab. Course designed and taught by expert instructors with years of penetration testing experience. 12 student maximum in every class. Certification attempt included in every package. | Computer Forensics Training at InfoSec Institute Gain the in-demand skills of a certified computer examiner, learn to recover trace data left behind by fraud, theft, and cybercrime perpetrators. Discover the source of computer crime and abuse at your organization so that it never happens again. All of our class sizes are guaranteed to be 12 students or less to facilitate one-on-one interaction with one of our expert instructors. |

| Subject: | [NT] Microsoft Windows Ndistapi.sys IRQL Escalation |
|---|---|
| Date: | 22 Mar 2007 16:18:45 +0200 |
The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com - - promotion The SecuriTeam alerts list - Free, Accurate, Independent. Get your security news from a reliable source. http://www.securiteam.com/mailinglist.html - - - - - - - - - Microsoft Windows Ndistapi.sys IRQL Escalation ------------------------------------------------------------------------ SUMMARY NDISTAPI.sys is "a kernel-mode component that exposes connectionless miniport drivers to the TAPI device space. NDISTAPI accepts call setup and teardown requests from the TAPI service provider and directs such requests through NDISWAN to the correct miniport driver to set up, monitor, and tear down lines and calls". The possibility of local privilege escalation discovered in Microsoft Windows NDISTAPI. DETAILS \Device\NdisTapi is exposed to unprivileged users. Hence, any user-mode application can write data to this device. Ndistapi.sys Windows XP SP2 _; __stdcall NdisTapiDispatch(x, x) text:000115E8 _NdisTapiDispatch@8 proc near ; DATA XREF:DriverEntry(x,x)+13E#o text:000115E8 text:000115E8 arg_4 = dword ptr 0Ch text:000115E8 text:000115E8 push ebp text:000115E9 mov ebp, esp text:000115EB push ebx text:000115EC push esi text:000115ED mov esi, [ebp+arg_4] text:000115F0 mov eax, [esi+60h] text:000115F3 movzx ecx, byte ptr [eax] text:000115F6 sub ecx, 0 text:000115F9 mov edx, [esi+0Ch] text:000115FC mov ebx, [eax+4] text:000115FF push edi text:00011600 mov edi, [eax+8] text:00011603 jz short loc_1167E text:00011605 dec ecx text:00011606 dec ecx text:00011607 jz short loc_11674 text:00011609 sub ecx, 0Ch text:0001160C jnz loc_11697 text:00011612 mov eax, [eax+0Ch] text:00011615 cmp eax, 8FFF23C0h ;IOCTL text:0001161A jz short loc_11669 ;DoIoctlConnectWork() text:0001161C cmp eax, 8FFF23C8h text:00011621 jz short loc_1165C {...} text:00010B16 ; __stdcall DoIoctlConnectWork(x, x, x, x) text:00010B16 _DoIoctlConnectWork@16 proc near ; CODE XREF: NdisTapiDispatch(x,x)+85#p text:00010B16 text:00010B16 arg_0 = dword ptr 4 text:00010B16 arg_4 = dword ptr 8 text:00010B16 arg_8 = dword ptr 0Ch text:00010B16 arg_C = dword ptr 10h text:00010B16 text:00010B16 mov ecx, _DeviceExtension text:00010B1C push edi text:00010B1D mov edi, ds:__imp_@KfAcquireSpinLock@4 ; KfAcquireSpinLock(x) text:00010B23 add ecx, 4Ch text:00010B26 call edi ; KfAcquireSpinLock(x) ;<= FLAW KfAcquireSpinLock(x) text:00010B28 cmp [esp+4+arg_8], 8 ;InputBuffer length text:00010B2D mov dl, al text:00010B2F jb loc_10BC5 text:00010B35 cmp [esp+4+arg_C], 4 ;OutputBuffer length text:00010B3A jb loc_10BC5 text:00010B40 mov ecx, _DeviceExtension text:00010B46 cmp dword ptr [ecx+4], 1 text:00010B4A push ebx text:00010B4B mov ebx, [esp+8+arg_4] text:00010B4F push esi text:00010B50 mov esi, ds:__imp_@KfReleaseSpinLock@8 ; KfReleaseSpinLock(x,x) text:00010B56 jnz short loc_10B8D text:00010B58 mov dword ptr [ecx+4], 2 text:00010B5F mov ecx, _DeviceExtension text:00010B65 mov eax, [ebx] text:00010B67 mov [ecx+10h], eax text:00010B6A mov ecx, _DeviceExtension text:00010B70 add ecx, 4Ch text:00010B73 call esi ; KfReleaseSpinLock(x,x) ; KfReleaseSpinLock(x,x) [---] text:00010BC5 text:00010BC5 loc_10BC5: text:00010BC5 text:00010BC5 mov eax, 0C0000023h ; ERROR CODE text:00010BCA xor ecx, ecx text:00010BCC text:00010BCC loc_10BCC: text:00010BCC mov edx, [esp+4+arg_0] text:00010BD0 mov [edx+18h], eax text:00010BD3 mov [edx+1Ch], ecx text:00010BD6 pop edi text:00010BD7 retn 10h ; Return As we can see, this routine raises IRQL to DISPATCH level acquiring an spinlock before checking the lengths. After that,if the sizes supplied are invalid, the routine returns without releasing the acquired spinlock so the IRQL is still at DISPATCH level for that thread, even after returning to Ring3. The final result is an user-mode thread running at DISPATCH level so the system can crash unexpectedly since at DISPATCH level paged memory cannot be accessed, obviously in user-mode the most of memory is paged so the kernel will bugcheck due to IRQL_LESS_THAN_NOT_EQUAL whenever our thread performs an operation which involves accessing paged memory. Windows Kernel assumes that a user-mode thread cannot be running at DISPATCH level so it considers the IRQL as a discriminant in various operations. I.e reversing MmAccessFault. Ntoskrnl.exe Windows XP SP2 text:00411DAC mov edi, edi text:00411DAE push ebp text:00411DAF mov ebp, esp text:00411DB1 sub esp, 24h text:00411DB4 and [ebp+VirtualAddress], 0 text:00411DB8 push ebx text:00411DB9 push esi text:00411DBA push edi text:00411DBB mov eax, large fs:124h text:00411DC1 mov ebx, [eax+44h] text:00411DC4 mov [ebp+var_24], ebx text:00411DC7 call ds:__imp__KeGetCurrentIrql@0 ; KeGetCurrentIrql() text:00411DCD mov edi, [ebp+BugCheckParameter1] text:00411DD0 and [ebp+var_C], 0 text:00411DD4 mov esi, edi text:00411DD6 shr esi, 0Ah text:00411DD9 shr edi, 14h text:00411DDC and esi, 3FFFFCh text:00411DE2 and edi, 0FFCh text:00411DE8 sub esi, 40000000h text:00411DEE sub edi, 3FD00000h text:00411DF4 cmp al, 1 text:00411DF6 mov [ebp+var_1], al text:00411DF9 ja loc_428DB7 A vector attack which leads to a local privilege escalation has not been identified yet but this possibility cannot be completely discarded. Security software can be affected by malware exploiting this flaw in imaginative ways. Disclosure Timeline: * 10.20.2006 - Initial vendor notification * 10.21.2006 - Initial vendor response. Case opened. * 01.04.2007 - Vendor confirmed vulnerability. Service pack fix. * 03.12.2007 - Vulnerability silently addressed on Windows 2003 SP2. References: <http://www.microsoft.com/downloads/details.aspx?familyid=95AC1610-C232-4644-B828-C55EEC605D55&displaylang=en> http://www.microsoft.com/downloads/details.aspx?familyid=95AC1610-C232-4644-B828-C55EEC605D55&displaylang=en <http://www.reversemode.com/index.php?option=com_remository&Itemid=2&func=fileinfo&id=47> http://www.reversemode.com/index.php?option=com_remository&Itemid=2&func=fileinfo&id=47 (PDF) ADDITIONAL INFORMATION The information has been provided by reversemode. The original article can be found at: <http://www.reversemode.com/index.php?option=com_remository&Itemid=2&func=fileinfo&id=47> http://www.reversemode.com/index.php?option=com_remository&Itemid=2&func=fileinfo&id=47 ======================================== This bulletin is sent to members of the SecuriTeam mailing list. To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com ==================== ==================== DISCLAIMER: The information in this bulletin is provided "AS IS" without warranty of any kind. In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | [EXPL] PHP5 Space Trimming Buffer Underflow Exploit (header(), MacOSX), SecuriTeam |
|---|---|
| Next by Date: | [UNIX] Evolution Shared Memo Categories Format String Vulnerability, SecuriTeam |
| Previous by Thread: | [EXPL] PHP5 Space Trimming Buffer Underflow Exploit (header(), MacOSX), SecuriTeam |
| Next by Thread: | [UNIX] Evolution Shared Memo Categories Format String Vulnerability, SecuriTeam |
| Indexes: | [Date] [Thread] [Top] [All Lists] |