Пожалуйста, обратите внимание, что пользователь заблокирован
Бага в технологии "Kernel Streaming", о которой мало что полезного можно найти, чтобы увязать с драйверами.
В mskssrv.sys есть интерфейс SrvDispatchIoControl для обработки ioctl-запросов. Есть прослойка в виде драйвера ksthunk, но это пока не важно.
Какие аргументы передаются в NtDeviceIoControlFile - загадка (у кого есть exReven - это не будет загадкой).
В свою очередь, путь до уязвимой функции от SrvDispatchIoControl.
Устройства для этого драйвера нет, следовательно и символьной ссылки, по которой можно отправлять запросы, тоже. Очевидно, используются другие интерфейсы для взаимодействия. Вопрос, какие?
Ресерч по теме должен выйти в августе, но может кто-нибудь уже что-то подраскурил?
В mskssrv.sys есть интерфейс SrvDispatchIoControl для обработки ioctl-запросов. Есть прослойка в виде драйвера ksthunk, но это пока не важно.
Код:
3: kd> !devstack @rcx
!DevObj !DrvObj !DevExt ObjectName
ffffaa8120ddda60 \Driver\ksthunk ffffaa8120dddbb0 00000087
> ffffaa8120e54b70 \Driver\MSKSSRV ffffaa8120e54cc0
ffffaa811f84bdd0 \Driver\swenum ffffaa811f84bf20 KSENUM#00000001
Какие аргументы передаются в NtDeviceIoControlFile - загадка (у кого есть exReven - это не будет загадкой).
Код:
3: kd> k
# Child-SP RetAddr Call Site
00 ffffa48d`f426f5f8 fffff800`60da782c MSKSSRV!SrvDispatchIoControl
01 ffffa48d`f426f600 fffff800`5accb875 ks!DispatchDeviceIoControl+0x3c
02 ffffa48d`f426f630 fffff800`63f31415 nt!IofCallDriver+0x55
03 ffffa48d`f426f670 fffff800`63f31133 ksthunk!CKernelFilterDevice::DispatchIrp+0xf5
04 ffffa48d`f426f6d0 fffff800`5accb875 ksthunk!CKernelFilterDevice::DispatchIrpBridge+0x13
05 ffffa48d`f426f700 fffff800`5b0c2c70 nt!IofCallDriver+0x55
06 ffffa48d`f426f740 fffff800`5b0c123c nt!IopSynchronousServiceTail+0x1d0
07 ffffa48d`f426f7f0 fffff800`5b0bf516 nt!IopXxxControlFile+0x72c
08 ffffa48d`f426fa00 fffff800`5ae3d1e5 nt!NtDeviceIoControlFile+0x56
09 ffffa48d`f426fa70 00007fff`ad4aeee4 nt!KiSystemServiceCopyEnd+0x25
0a 00000019`e16ff758 00007fff`aad0bc5b ntdll!NtDeviceIoControlFile+0x14
0b 00000019`e16ff760 00007fff`ac4727f1 KERNELBASE!DeviceIoControl+0x6b
0c 00000019`e16ff7d0 00007fff`9a3500f0 KERNEL32!DeviceIoControlImplementation+0x81
0d 00000019`e16ff820 00007fff`9a353542 frameservermonitor!FSMDeviceWatcher::InternalUpdateLoginTriggerToKs+0xe0
0e 00000019`e16ff880 00007fff`9a34a3f7 frameservermonitor!FSMDeviceWatcher::RegisterWatcher+0x402
0f 00000019`e16ffab0 00007fff`9a3496ad frameservermonitor!FSMonitorService::ProcessWatcherObject+0x137
10 00000019`e16ffb00 00007fff`9d5b9b01 frameservermonitor!FSMonitorService::ProcessWatcherObjectAsyncCallback::Invoke+0xd
11 00000019`e16ffb30 00007fff`ad47299a RTWorkQ!ThreadPoolWorkCallback+0xd1
12 00000019`e16ffbb0 00007fff`ad446056 ntdll!TppWorkpExecuteCallback+0x13a
13 00000019`e16ffc00 00007fff`ac48244d ntdll!TppWorkerThread+0x8f6
14 00000019`e16ffee0 00007fff`ad46dfb8 KERNEL32!BaseThreadInitThunk+0x1d
15 00000019`e16fff10 00000000`00000000 ntdll!RtlUserThreadStart+0x28
В свою очередь, путь до уязвимой функции от SrvDispatchIoControl.
Код:
PAGE:00000001C0008520 SrvDispatchIoControl
PAGE:00000001C0009700 ?PublishTx@FSRendezvousServer@@QEAAJPEAU_IRP@@@Z
PAGE:00000001C000BB88 ?PublishTx@FSStreamReg@@QEAAJPEAUFSFrameInfo@@@Z
PAGE:00000001C000A314 ?AllocateMdl@FSFrameMdl@@QEAAJAEBUFSMemoryStream@@@Z
.text:00000001C0001650 FsAllocAndLockMdl
Устройства для этого драйвера нет, следовательно и символьной ссылки, по которой можно отправлять запросы, тоже. Очевидно, используются другие интерфейсы для взаимодействия. Вопрос, какие?
Ресерч по теме должен выйти в августе, но может кто-нибудь уже что-то подраскурил?