Talos Vulnerability Report

TALOS-2020-0983

Intel IGC64.DLL Shader Functionality hull shader denial of service vulnerability

July 14, 2020
CVE Number

Microsoft Hyper-V/RemoteFX: CVE-2020-1043

Summary

An exploitable denial of service vulnerability exists in Intel IGC64.DLL graphics driver. A specially crafted hull shader can cause a NULL pointer dereference. An attacker can provide a specially crafted shader file to trigger this vulnerability. This vulnerability could potentially be triggered from guest machines running on virtualization environments (e.g. VMware, QEMU, VirtualBox etc.) as it was demonstrated before in TALOS-2018-0533, TALOS-2018-0568, etc. Theoretically this vulnerability could be also triggered from a web browser (using WebGL and WebAssembly) but Talos has not been able to confirm this.

Tested Versions

Intel IGC64.DLL (Intel Graphics Shader Compiler for Intel(R) Graphics Accelerator), version 26.20.100.7584
Microsoft Hyper-V with RemoteFX enabled (CVE-2020-1043)

Product URLs

http://intel.com

CVSSv3 Score

6.3 - CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:N/I:N/A:H

CWE

CWE-476: NULL Pointer Dereference

Details

This vulnerability can be triggered by supplying a malformed hull shader, leading to a NULL pointer dereference in the Intel IGC64 driver (this driver is mapped by the affected component, e.g. VMware’s vmware-vmx.exe).

A hull shader transforms a set of input control points (from a vertex shader) into a set of output control points. In order to trigger this vulnerability we have modified the hull shader byte code, specifically the instruction of a function for computing patch constant data.

Typically the most basic one looks like this:

hs_fork_phase
dcl_output o22.z
mov o22.z, l(1.000000)
ret

After mov function modification (modification cannot be disassembled into proper text form) it was possible to trigger a NULL pointer dereference in the IGC64 driver.

Stack trace:

0:000> kb
 # RetAddr           : Args to Child                                                           : Call Site
00 00007ffc`7138c2c3 : 00000000`00000000 00000000`00000002 000001f3`ab741f70 00000000`00000000 : igc64!OpenCompiler12+0x5293b
01 00007ffc`71338e7e : 00000000`00000000 0000005f`679e9dd0 00000000`00000000 0000005f`00000000 : igc64!OpenCompiler12+0x84b33
02 00007ffc`713344e3 : 000001f3`ab74ca84 00000000`00000001 000001f3`ab74fc28 000001f3`ab74fc28 : igc64!OpenCompiler12+0x316ee
03 00007ffc`713341a3 : 00000000`00000000 000001f3`ab740670 000001f3`ab74ca84 000001f3`ab738650 : igc64!OpenCompiler12+0x2cd53
04 00007ffc`7133406f : 000001f3`ab74ca84 000001f3`ab74ca84 000001f3`ab74ca84 000001f3`ab73e570 : igc64!OpenCompiler12+0x2ca13
05 00007ffc`7130c15d : 000001f3`ab738768 000001f3`ab749360 00000000`00000000 000001f3`a7652430 : igc64!OpenCompiler12+0x2c8df
06 00007ffc`7130b40d : 000001f3`ab7387a8 000001f3`ab738768 000001f3`a7652430 00007ffc`837dbabb : igc64!OpenCompiler12+0x49cd
07 00007ffc`7130cbd3 : ffffffff`00000000 00000000`00000000 000001f3`ab72ca60 00007ffc`75011d33 : igc64!OpenCompiler12+0x3c7d
08 00007ffc`749e7a43 : 000001f3`ab738650 00000000`00000001 0000005f`679ee480 00007ffc`7502f3c8 : igc64!OpenCompiler12+0x5443
09 00007ffc`750fa9f0 : 000001f3`ab707ff0 00000000`00000001 000001f3`ab73a6b0 0000005f`679ee480 : igd10iumd64!OpenAdapter10_2+0x120423
0a 00007ffc`7cc06f58 : 00000000`00000000 000001f3`ab738138 000001f3`ab7059a8 00000000`00000000 : igd10iumd64!OpenAdapter10_2+0x8333d0
0b 00007ffc`7cc093d7 : 000001f3`ab74ca84 00000000`00000000 000093bc`4192571d 00000000`0000120c : d3d11!CHullShader::CLS::FinalConstruct+0x23c
0c 00007ffc`7cc09311 : 0000005f`679eefa0 00007ffc`7cde2388 000001f3`ab737fd0 00000000`00001292 : d3d11!CLayeredObjectWithCLS<CHullShader>::FinalConstruct+0xa3
0d 00007ffc`7cc1efff : 000001f3`ab738028 0000005f`679eefa0 0000005f`679eefd0 00007ffc`7cde2388 : d3d11!CLayeredObjectWithCLS<CHullShader>::CreateInstance+0x13d
0e 00007ffc`7cc2b17d : 00000000`00000000 000001f3`ab737fd0 00000000`00000000 00000000`00000000 : d3d11!CDevice::CreateLayeredChild+0xe2f
0f 00007ffc`7cc2b950 : 000001f3`ab737fd0 00000000`00000014 00000000`00000830 00000000`00000030 : d3d11!NDXGI::CDevice::CreateLayeredChild+0x6d
10 00007ffc`7cc09a5a : 000001f3`ab705170 00000000`00000014 00000000`0000000a 00000000`00000000 : d3d11!NOutermost::CDevice::CreateLayeredChild+0x1b0
11 00007ff6`cb7027a1 : 00000000`80070057 000001f3`ab74c3b0 00000000`00026778 00000000`00000001 : d3d11!CDevice::CreateHullShader+0x1ba
12 00007ff6`cb7042a7 : 000001f3`a5666420 00000000`00026778 000001f3`ab7059b8 00000000`00000000 : POC_EXEC11+0x27a1
13 00007ff6`cb70c880 : 00000000`00000000 000001f3`a56b6674 000001f3`a5691c80 000001f3`00026778 : POC_EXEC11+0x42a7
14 00007ff6`cb70a8cc : 00000000`00000000 00000000`00000000 00000000`00000001 00007ffc`00000000 : POC_EXEC11+0xc880
15 00007ff6`cb70a26c : 00000000`00000000 0043004f`0050005c 00000000`00000000 005f0031`00310043 : POC_EXEC11+0xa8cc
16 00007ff6`cb70324a : 000001f3`a5691c80 00000000`00000000 000001f3`a5691c80 000001f3`a5668640 : POC_EXEC11+0xa26c
17 00007ff6`cb72f5aa : 00000000`0000000a 00000000`00000000 00000000`00000000 00000000`00000000 : POC_EXEC11+0x324a
18 00007ffc`82497bd4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : POC_EXEC11+0x2f5aa
19 00007ffc`8380ced1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14
1a 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21

Crash Information

0:000> !analyze -v
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


KEY_VALUES_STRING: 1

	Key  : AV.Dereference
	Value: NullClassPtr

	Key  : AV.Fault
	Value: Write

	Key  : Analysis.CPU.Sec
	Value: 1

	Key  : Analysis.Elapsed.Sec
	Value: 97

	Key  : Analysis.Memory.CommitPeak.Mb
	Value: 71

	Key  : Timeline.OS.Boot.DeltaSec
	Value: 206250

	Key  : Timeline.Process.Start.DeltaSec
	Value: 2126


PROCESSES_ANALYSIS: 1

SERVICE_ANALYSIS: 1

STACKHASH_ANALYSIS: 1

TIMELINE_ANALYSIS: 1

Timeline: !analyze.Start
	Name: <blank>
	Time: 2020-01-13T12:47:36.878Z
	Diff: 878 mSec

Timeline: Dump.Current
	Name: <blank>
	Time: 2020-01-13T12:47:36.0Z
	Diff: 0 mSec

Timeline: Process.Start
	Name: <blank>
	Time: 2020-01-13T12:12:10.0Z
	Diff: 2126000 mSec

Timeline: OS.Boot
	Name: <blank>
	Time: 2020-01-11T03:30:06.0Z
	Diff: 206250000 mSec


DUMP_CLASS: 2

DUMP_QUALIFIER: 0

MODLIST_WITH_TSCHKSUM_HASH:  72b14d4437af6d09da2d9fe2a592f06ddf20b1ca

MODLIST_SHA1_HASH:  6ce0e83b6da7c6a553d1e322f42f958f3d7a27e9

NTGLOBALFLAG:  70

APPLICATION_VERIFIER_FLAGS:  0

PRODUCT_TYPE:  1

SUITE_MASK:  272

DUMP_TYPE:  fe

FAULTING_IP: 
igc64!OpenCompiler12+5293b
00007ffc`7135a0cb 8901            mov     dword ptr [rcx],eax

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 00007ffc7135a0cb (igc64!OpenCompiler12+0x000000000005293b)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 0000000000000001
   Parameter[1]: 0000000000000058
Attempt to write to address 0000000000000058

FAULTING_THREAD:  000036b8

DEFAULT_BUCKET_ID:  NULL_CLASS_PTR_WRITE

PROCESS_NAME:  POC_EXEC11.exe

FOLLOWUP_IP: 
igc64!OpenCompiler12+5293b
00007ffc`7135a0cb 8901            mov     dword ptr [rcx],eax

WRITE_ADDRESS:  0000000000000058 

ERROR_CODE: (NTSTATUS) 0xc0000005 - Instrukcja w 0x%p odwo a a si  do pami ci pod adresem 0x%p. Pami   nie mo e by  %s.

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - Instrukcja w 0x%p odwo a a si  do pami ci pod adresem 0x%p. Pami   nie mo e by  %s.

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  0000000000000001

EXCEPTION_PARAMETER2:  0000000000000058

WATSON_BKT_PROCSTAMP:  5e1b04b9

WATSON_BKT_MODULE:  igc64.dll

WATSON_BKT_MODSTAMP:  5ddcfccd

WATSON_BKT_MODOFFSET:  a9a0cb

WATSON_BKT_MODVER:  26.20.100.7584

MODULE_VER_PRODUCT:  Intel HD Graphics Drivers for Windows(R)

BUILD_VERSION_STRING:  18362.1.amd64fre.19h1_release.190318-1202

ANALYSIS_SESSION_HOST:  IAMLEGION

ANALYSIS_SESSION_TIME:  01-13-2020 13:47:36.0878

ANALYSIS_VERSION: 10.0.18914.1001 amd64fre

THREAD_ATTRIBUTES: 
OS_LOCALE:  PLK

BUGCHECK_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_WRITE_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE

PRIMARY_PROBLEM_CLASS:  APPLICATION_FAULT

PROBLEM_CLASSES: 

	ID:     [0n313]
	Type:   [@ACCESS_VIOLATION]
	Class:  Addendum
	Scope:  BUCKET_ID
	Name:   Omit
	Data:   Omit
	PID:    [Unspecified]
	TID:    [0x36b8]
	Frame:  [0] : igc64!OpenCompiler12

	ID:     [0n286]
	Type:   [INVALID_POINTER_WRITE]
	Class:  Primary
	Scope:  BUCKET_ID
	Name:   Add
	Data:   Omit
	PID:    [Unspecified]
	TID:    [0x36b8]
	Frame:  [0] : igc64!OpenCompiler12

	ID:     [0n309]
	Type:   [NULL_CLASS_PTR_DEREFERENCE]
	Class:  Primary
	Scope:  BUCKET_ID
	Name:   Add
	Data:   Omit
	PID:    [Unspecified]
	TID:    [0x36b8]
	Frame:  [0] : igc64!OpenCompiler12

	ID:     [0n311]
	Type:   [NULL_CLASS_PTR_WRITE]
	Class:  Primary
	Scope:  DEFAULT_BUCKET_ID (Failure Bucket ID prefix)
			BUCKET_ID
	Name:   Add
	Data:   Omit
	PID:    [0x678]
	TID:    [0x36b8]
	Frame:  [0] : igc64!OpenCompiler12

LAST_CONTROL_TRANSFER:  from 00007ffc7138c2c3 to 00007ffc7135a0cb

STACK_TEXT:  
0000005f`679e8220 00007ffc`7138c2c3 : 00000000`00000000 00000000`00000002 000001f3`ab741f70 00000000`00000000 : igc64!OpenCompiler12+0x5293b
0000005f`679e8290 00007ffc`71338e7e : 00000000`00000000 0000005f`679e9dd0 00000000`00000000 0000005f`00000000 : igc64!OpenCompiler12+0x84b33
0000005f`679e8550 00007ffc`713344e3 : 000001f3`ab74ca84 00000000`00000001 000001f3`ab74fc28 000001f3`ab74fc28 : igc64!OpenCompiler12+0x316ee
0000005f`679ee000 00007ffc`713341a3 : 00000000`00000000 000001f3`ab740670 000001f3`ab74ca84 000001f3`ab738650 : igc64!OpenCompiler12+0x2cd53
0000005f`679ee040 00007ffc`7133406f : 000001f3`ab74ca84 000001f3`ab74ca84 000001f3`ab74ca84 000001f3`ab73e570 : igc64!OpenCompiler12+0x2ca13
0000005f`679ee140 00007ffc`7130c15d : 000001f3`ab738768 000001f3`ab749360 00000000`00000000 000001f3`a7652430 : igc64!OpenCompiler12+0x2c8df
0000005f`679ee1d0 00007ffc`7130b40d : 000001f3`ab7387a8 000001f3`ab738768 000001f3`a7652430 00007ffc`837dbabb : igc64!OpenCompiler12+0x49cd
0000005f`679ee220 00007ffc`7130cbd3 : ffffffff`00000000 00000000`00000000 000001f3`ab72ca60 00007ffc`75011d33 : igc64!OpenCompiler12+0x3c7d
0000005f`679ee2f0 00007ffc`749e7a43 : 000001f3`ab738650 00000000`00000001 0000005f`679ee480 00007ffc`7502f3c8 : igc64!OpenCompiler12+0x5443
0000005f`679ee330 00007ffc`750fa9f0 : 000001f3`ab707ff0 00000000`00000001 000001f3`ab73a6b0 0000005f`679ee480 : igd10iumd64!OpenAdapter10_2+0x120423
0000005f`679ee380 00007ffc`7cc06f58 : 00000000`00000000 000001f3`ab738138 000001f3`ab7059a8 00000000`00000000 : igd10iumd64!OpenAdapter10_2+0x8333d0
0000005f`679ee5d0 00007ffc`7cc093d7 : 000001f3`ab74ca84 00000000`00000000 000093bc`4192571d 00000000`0000120c : d3d11!CHullShader::CLS::FinalConstruct+0x23c
0000005f`679ee8c0 00007ffc`7cc09311 : 0000005f`679eefa0 00007ffc`7cde2388 000001f3`ab737fd0 00000000`00001292 : d3d11!CLayeredObjectWithCLS<CHullShader>::FinalConstruct+0xa3
0000005f`679ee950 00007ffc`7cc1efff : 000001f3`ab738028 0000005f`679eefa0 0000005f`679eefd0 00007ffc`7cde2388 : d3d11!CLayeredObjectWithCLS<CHullShader>::CreateInstance+0x13d
0000005f`679ee9b0 00007ffc`7cc2b17d : 00000000`00000000 000001f3`ab737fd0 00000000`00000000 00000000`00000000 : d3d11!CDevice::CreateLayeredChild+0xe2f
0000005f`679eedf0 00007ffc`7cc2b950 : 000001f3`ab737fd0 00000000`00000014 00000000`00000830 00000000`00000030 : d3d11!NDXGI::CDevice::CreateLayeredChild+0x6d
0000005f`679eef60 00007ffc`7cc09a5a : 000001f3`ab705170 00000000`00000014 00000000`0000000a 00000000`00000000 : d3d11!NOutermost::CDevice::CreateLayeredChild+0x1b0
0000005f`679ef150 00007ff6`cb7027a1 : 00000000`80070057 000001f3`ab74c3b0 00000000`00026778 00000000`00000001 : d3d11!CDevice::CreateHullShader+0x1ba
0000005f`679ef2c0 00007ff6`cb7042a7 : 000001f3`a5666420 00000000`00026778 000001f3`ab7059b8 00000000`00000000 : POC_EXEC11+0x27a1
0000005f`679ef330 00007ff6`cb70c880 : 00000000`00000000 000001f3`a56b6674 000001f3`a5691c80 000001f3`00026778 : POC_EXEC11+0x42a7
0000005f`679ef760 00007ff6`cb70a8cc : 00000000`00000000 00000000`00000000 00000000`00000001 00007ffc`00000000 : POC_EXEC11+0xc880
0000005f`679ef860 00007ff6`cb70a26c : 00000000`00000000 0043004f`0050005c 00000000`00000000 005f0031`00310043 : POC_EXEC11+0xa8cc
0000005f`679efa80 00007ff6`cb70324a : 000001f3`a5691c80 00000000`00000000 000001f3`a5691c80 000001f3`a5668640 : POC_EXEC11+0xa26c
0000005f`679efc70 00007ff6`cb72f5aa : 00000000`0000000a 00000000`00000000 00000000`00000000 00000000`00000000 : POC_EXEC11+0x324a
0000005f`679efcc0 00007ffc`82497bd4 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : POC_EXEC11+0x2f5aa
0000005f`679efd00 00007ffc`8380ced1 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : KERNEL32!BaseThreadInitThunk+0x14
0000005f`679efd30 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x21


STACK_COMMAND:  ~0s ; .cxr ; kb

THREAD_SHA1_HASH_MOD_FUNC:  b3201fce2db26d776420945124eef44b5c732f1b

THREAD_SHA1_HASH_MOD_FUNC_OFFSET:  ee3182307f7e3cbb9e586e2b9c1b5ffcf6475752

THREAD_SHA1_HASH_MOD:  1f0981e78c9e111da5964562765aa3ddad22fedf

FAULT_INSTR_CODE:  8b490189

SYMBOL_STACK_INDEX:  0

SYMBOL_NAME:  igc64!OpenCompiler12+5293b

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: igc64

IMAGE_NAME:  igc64.dll

DEBUG_FLR_IMAGE_TIMESTAMP:  5ddcfccd

FAILURE_BUCKET_ID:  NULL_CLASS_PTR_WRITE_c0000005_igc64.dll!OpenCompiler12

BUCKET_ID:  APPLICATION_FAULT_NULL_CLASS_PTR_WRITE_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE_igc64!OpenCompiler12+5293b

FAILURE_EXCEPTION_CODE:  c0000005

FAILURE_IMAGE_NAME:  igc64.dll

BUCKET_ID_IMAGE_STR:  igc64.dll

FAILURE_MODULE_NAME:  igc64

BUCKET_ID_MODULE_STR:  igc64

FAILURE_FUNCTION_NAME:  OpenCompiler12

BUCKET_ID_FUNCTION_STR:  OpenCompiler12

BUCKET_ID_OFFSET:  5293b

BUCKET_ID_MODTIMEDATESTAMP:  5ddcfccd

BUCKET_ID_MODCHECKSUM:  2450ddb

BUCKET_ID_MODVER_STR:  0.0.0.0

BUCKET_ID_PREFIX_STR:  APPLICATION_FAULT_NULL_CLASS_PTR_WRITE_NULL_CLASS_PTR_DEREFERENCE_INVALID_POINTER_WRITE_

FAILURE_PROBLEM_CLASS:  APPLICATION_FAULT

FAILURE_SYMBOL_NAME:  igc64.dll!OpenCompiler12

TARGET_TIME:  2020-01-13T12:49:13.000Z

OSBUILD:  18362

OSSERVICEPACK:  329

SERVICEPACK_NUMBER: 0

OS_REVISION: 0

OSPLATFORM_TYPE:  x64

OSNAME:  Windows 10

OSEDITION:  Windows 10 WinNt SingleUserTS

USER_LCID:  0

OSBUILD_TIMESTAMP:  unknown_date

BUILDDATESTAMP_STR:  190318-1202

BUILDLAB_STR:  19h1_release

BUILDOSVER_STR:  10.0.18362.1.amd64fre.19h1_release.190318-1202

ANALYSIS_SESSION_ELAPSED_TIME:  17b29

ANALYSIS_SOURCE:  UM

FAILURE_ID_HASH_STRING:  um:null_class_ptr_write_c0000005_igc64.dll!opencompiler12

FAILURE_ID_HASH:  {7bbc52a9-77ac-42fd-f21f-7d7a5e807d81}

Followup:     MachineOwner
---------

Timeline

2020-01-27 - Vendor Disclosure
2020-04-01 - Disclosure deadline extended
2020-07-14 - Public Release

Credit

Discovered by Piotr Bania of Cisco Talos.