Последний «вторник патчей» (17 октября) от Microsoft принес исправления для 62 уязвимостей, в том числе и патч, закрывающий критическую уязвимость «нулевого дня» СVE-2017-11826 во всех версиях Microsoft Office, которая эксплуатировалась в таргетированных атаках.
Эксплойт для этой уязвимости представляет собой RTF-документ, содержащий документ DOCX, который эксплуатирует СVE-2017-11826 в парсере Office Open XML.
Сам эксплойт находится в word/document.xml следующего содержания:
Согласно стандарту ECMA-376 для Office Open XML File Formats, валидный элемент font, описывающий используемые в документе шрифты, должен выглядеть следующим образом:
В теле эксплойта закрывающий тег </w:font> полностью отсутствует, а после открывающего <w:font> следует object-элемент <o:idmap/>, вызывающий type confusion в парсере OOXML. Для успешной эксплуатации уязвимости может использоваться любой object-элемент. Для прохождения одной из предшествующих эксплуатации проверок перед тегом <w:font> должен присутствовать элемент OLEObject, а длина содержимого атрибута name должна быть не менее 32 байт после конвертирования из UTF-8 в Unicode.
После конвертации из UTF-8 в Unicode E8 A3 AC E0 A2 80 преобразуется в EC 88 88 08.
При выполнении всех условий этот указатель будет разыменован и управление будет передано по содержимому этого адреса со смещением 4.
Для контроля содержимого памяти по адресу 0x088888EC атакующие применяют популярную технику Heap spraying с использованием компонентов ActiveX:
Эксплойт обходит ASLR и DEP с использованием ROP и гаджетов из msvbvm60.dll. Модуль msvbvm60.dll загружается из RTF-документа посредством CLSID, ассоциированного с этой библиотекой:
Первая часть ROP устанавливает значение регистра ESP:
Вторая часть ROP пропускается, она использовалась для установки регистра EIP на 0x088883EC. Последний «pop eax; retn» гаджет переместит адрес 0x729410D0 в EAX. Это адрес на указатель VirtualProtect в области импортов msvbvm60.dll из Kernel32.dll:
Указатель VirtualProtect используется в следующем ROP гаджете для вызова функции VirtualProtect(0x8888C90, 0x201, 0x40, 0x72A4C045), после чего управление передается в шеллкод по адресу 0x8888F70, который осуществляет расшифровку и выполнение DLL-файла:
Защитные решения «Лаборатории Касперского» детектируют эксплойты для СVE-2017-11826 как:
- Exploit.MSWord.Agent.ix;
- Exploit.MSOffice.CVE-2017-11826.a;
- HEUR:Exploit.MSOffice.Generic.
IOC
cb3429e608144909ef25df2605c24ec253b10b6e99cbb6657afa6b92e9f32fb5
Разбор эксплойта для СVE-2017-11826