Xakep #305. Многошаговые SQL-инъекции
Программист Макс Делисо (Max DeLiso) работал над своим проектом, никак не связанном с информационной безопасностью, и случайно обнаружил последовательность инструкций, которая вызывает BSOD на любой машине с Windows 7. Что характерно, своеобразный «эксплойт» работает из-под пользователя с ограниченными правами, и всё равно надёжно рушит систему. По какой-то причине Макс Делисо решил не сообщать в Microsoft об обнаруженной 0day-уязвимости, а выложил информацию в открытый доступ, так что теперь каждый может проверить вредоносный код на любой системе Windows 7, потому что патча просто не существует.
Макс Делисо признаётся, что не достаточно компетентен, чтобы определить, можно ли использовать эту уязвимость для выполнения произвольного кода в системе, но такая вероятность существует. Очевидно, что можно получить доступ к памяти ядра и инициировать отказ в обслуживании.
Файлы cryptex.c и makefile в архиве скачать можно здесь. Созданный файл cryptex.exe следует запускать с большой осторожностью, на свой страх и риск. Ниже приводим листинг ключевого фрагмента cryptex.c, нестандартный вызов CreateConsoleScreenBuffer со значением 0xC0000000 в итоге приводит к отказу системы.
/* ... */ extern int cryptex() { HANDLE thisProc = GetCurrentProcess(); HANDLE stdin; HANDLE stdout; HANDLE thisHeap = GetProcessHeap(); HANDLE conBuffer; DWORD cIoCount; HLOCAL inBuffer; if((conBuffer = CreateConsoleScreenBuffer( 0xC0000000, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL)) == INVALID_HANDLE_VALUE || (stdin = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE || (stdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE) { return CRYPTEX_CON_HANDLE; } /* ... */
Макс проверил программу под Windows 7, но допускает, что она работает также под Windows Vista.