BSOD в win32k.sys
dl // 04.11.08 01:11
Дмитрий Кононко aka Killer {R} обнаружил устойчиво воспроизводимую проблему с пользовательскими Win32-программами под Win'2k3, Vista x86 и x64.
[Не забывайте при копировании материала указывать полный адрес источника: //bugtraq.ru/rsn/archive/2008/11/01.html]
Для проведения атаки достаточно прав обычного пользователя, что особенно неприятно - завалить систему с правами администратора каждый может, то ли дело из-под рядового юзера.
Многократное переключение между Win32-объектами "рабочий стол" (desktop), на которых есть окна, с одновременным созданием потоков, устанавливающих/снимающих Win32-хуки на этих столах, и рассылающих на них оконные сообщения, в половине случаев приводит к BSODу из-за AV в коде win32k.sys, а в другой половине - к зависанию системы.
Происходит это предположительно из-за race condition с потоком, который снимает хук, и одновременной доставкой сообщения в другой поток - видимо, оно пытается вызвать только что убитый хук. Пока непонятно, имеют ли десктопы к этому прямое отношение, или просто эти действия приводят к каким-либо особенным условиям тайминга исполнения плохо синхронизированного кода. По крайней мере, в дампе ничего напрямую про десктопы не видно, но без них воспроизвести ситуацию пока не получилось.
Доступны исходные тексты в виде проекта для VC6, а также скомпилированные бинарные файлы (exe+dll).