| Дата публикации: | 16.10.2003 |
| Всего просмотров: | 2929 |
| Опасность: | Средняя |
| Наличие исправления: | Да |
| Количество уязвимостей: | 1 |
| CVE ID: | Нет данных |
| Вектор эксплуатации: | Удаленная |
| Воздействие: |
Отказ в обслуживании Компрометация системы |
| CWE ID: | Нет данных |
| Наличие эксплоита: | Нет данных |
| Уязвимые продукты: |
Microsoft Office 2000
Microsoft Office 97 Microsoft Word 2000 Microsoft Word 97 |
| Уязвимые версии: Microsoft Word 97, Microsoft Word 2000 SR-1
Описание: Уязвимость обнаружена в Microsoft Word. Злонамеренный пользователь может выполнить произвольный код на уязвимой системе. Затронутые продукты: Microsoft Word 97, Microsoft Word 2000 SR-1. В Microsoft Word XP этот баг пофиксен. При обработке документа Microsoft Word, содержащего макросы, может произойти переполнение буфера в стеке. Анализ недокументированной структуры макроса в документе, осуществляемый процессом winword.exe, выполняется некорректно. Эта структура в частности содержит полные внешнее и внутреннее имена макроса в формате UNICODE. Общеизвестно, что первые два байта любой строки UNICODE содержат ее длину. В коде winword.exe не содержится проверки на максимальный размер этих строк, хотя в стеке под подобную строку winword.exe выделяет 512 байт (это соответствует 256 символам UNICODE). Ниже приводится часть кода из процесса winword.exe, поясняющая все вышесказанное: в регистре esi содержится число символов строки 3019460B lea eax, [esi+esi]в регистре eax теперь содержится кол-во байт строки 3019460E add [ebp+var_4], eax 30194611 mov ecx, [ebp+var_4] 30194614 cmp ecx, [ebp+var_14]проверяем, не вышли ли мы за пределы мини-потока 30194617 jg loc_30194B2B 3019461D push 0 3019461F push eaxв регистре eax кол-во байт копируемых в переполняемый буфер 30194620 lea eax, [ebp+var_44A]в регистре eax содержится указатель на переполняемый буфер
30194626 jmp short loc_30194640
30194628 loc_30194628:
30194628 add [ebp+var_4], esi
3019462B mov eax, [ebp+var_4]
3019462E cmp eax, [ebp+var_14]
30194631 jg loc_30194B2B
30194637 push 0
30194639 push esi
3019463A lea eax, [ebp+var_133]
30194640 loc_30194640:
30194640 push eax
30194641 push [ebp+arg_24]
30194644 push [ebp+arg_0]
30194647 call sub_30193323
^^^^^^^^^^^^
Эта функция применяется очень и очень часто ;), но в данном случае осуществляет
копирование полного имени макроса из мини-потока в этот переполняемый буфер.
Следует отметить, что <копирование> подразумевает не только rep movsd или что-то
подобное, а более сложный процесс, обусловленный особой структурой документа.
Чтобы опробовать это на практике, необходимо создать документ. Далее, например, через меню Сервис - Макрос>- Начать запись, создать макрос, назвав его spamcoder. Не забудьте указать, что макрос доступен именно для вашего документа, а не для всех. Само собой сохранитесь, и закройте этот документ, чтобы открыть его теперь в любом шестнадцатеричном редакторе (я пользуюсь BIEW Written by Nick Kurshev, отличный редактор и что самое главное БЕСПЛАТНЫЙ). Попробуйте найти нижеследующее: 000013C8: 10 FF FF 01 00 02 00 00 03 50 00 72 00 6F 00 6A ЪЪ P r o j 000013D8: 00 65 00 63 00 74 00 2E 00 4E 00 65 00 77 00 4D e c t . N e w M 000013E8: 00 61 00 63 00 72 00 6F 00 73 00 2E 00 73 00 70 a c r o s . s p 000013F8: 00 61 00 6D 00 63 00 6F 00 64 00 65 00 72 00 01 a m c o d e r 00001408: 00 11 01 00 0A 00 1B 00 50 00 52 00 4F 00 4A 00 P R O J 00001418: 45 00 43 00 54 00 2E 00 4E 00 45 00 57 00 4D 00 E C T . N E W M 00001428: 41 00 43 00 52 00 4F 00 53 00 2E 00 53 00 50 00 A C R O S . S P 00001438: 41 00 4D 00 43 00 4F 00 44 00 45 00 52 00 00 00 A M C O D E R 00001448: 40 00 80 01 00 06 00 00 00 06 00 00 00 8C 24 AD @ Ђ Њ$Обратите внимание на первую строку:
10 FF FF 01 00 02 00 25 02 50 00 72 00 6F 00 6A
^^^^^^
Подчеркнутое и есть количество символов в строке, в данном случае 0225h(549). В
вашем случае оно будет значительно меньше, исправьте его на что-нибудь более
подходящее. Но помните - размер буфера 512 байт, поэтому прописывать значение
меньшее 256 не имеет смысла. Размер кадра стека - 1100 байт, поэтому если
хочется <взять> управление в свои руки, следует указать значение не меньшее 549.
Хотя я из этого <пользы> вытянуть не смог, возможно, это получится у вас, тогда
напишите об этом: мне.Ранее, я указывал на тот факт, что функция, осуществляющая переполнение буфера, применяется довольно часто, поэтому не стоит зацикливаться на названии статьи. Почти наверняка ;-) переполнение происходит и при других обстоятельствах. URL производителя: http://www.microsoft.com Решение: Открывайте документы только из доверенных источников. |