7/16/2010

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

Комментариев нет:

Отправить комментарий