Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
stop-zenbleed-win — Script de PowerShell para aplicar la solución alternativa MSR de Zenbleed (CVE-2023-20593) en Windows | Kitploit
Herramientas/GitHubGitHub/sbaresearch/stop-zenbleed-win
Análisis de VulnerabilidadesExplotaciónScripting y AutomatizaciónSeguridad de Hardware
GitHubsbaresearch/stop-zenbleed-win

stop-zenbleed-win

Script de PowerShell para aplicar la solución alternativa MSR de Zenbleed (CVE-2023-20593) en Windows

Ver Repositorio
824hace 3 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Deteniendo Zenbleed (CVE-2023-20593) en Windows

La vulnerabilidad Zenbleed recién descubierta (CVE-2023-20593) afecta a todos los procesadores Zen2 de AMD. Desafortunadamente, AMD no proporcionará actualizaciones de microcódigo para muchos de sus procesadores hasta noviembre o diciembre de 2023. ¿Cómo mantenerse seguro mientras tanto? Afortunadamente, existe una solución alternativa de software. Mientras que aplicar la solución alternativa de software es una línea de comando en Linux, las cosas son más complicadas en Windows.

Para aplicar la solución alternativa de software, se debe establecer un bit concreto (el chicken bit DE_CFG[9]) en el registro MSR de la CPU. Como señaló Travis Ormandy, se puede usar el siguiente comando para evitar Zenbleed en Linux:

root@kitploit:~
# wrmsr -a 0xc0011029 $(($(rdmsr -c 0xc0011029) | (1<<9)))

En Windows, configurar el registro MSR es más difícil. Solo los controladores a nivel de kernel pueden escribir en el registro MSR. Además, para cargar un controlador a nivel de kernel, debe estar firmado. Por eso decidimos usar el controlador WinRing0 existente de OpenLibSys.org. Escribimos un script de PowerShell que carga WinRing0, envía las solicitudes de escritura MSR adecuadas al controlador y lo descarga inmediatamente después. Actualmente, nuestro script de PowerShell solo funciona cuando Hyper-V está deshabilitado. Nuestro script de PowerShell está alojado aquí: https://github.com/sbaresearch/stop-zenbleed-win

Tenga en cuenta que el script de PowerShell tiene algunas advertencias. Lea la sección 'Advertencias' y realice un análisis de riesgos para su entorno específico antes de usar el script.

Uso

  • Ejecute Stop-Zenbleed.ps1 en PowerShell 5.x con permisos de administrador
  • El script espera ejecutarse solo en CPUs AMD Zen2 afectadas por Zenbleed. Podría causar problemas inesperados en otros sistemas, tenga cuidado.

Advertencias

  • Debe deshabilitar Hyper-V. De lo contrario, el propio sistema operativo Windows se ejecuta en el ring 1 de la CPU y el controlador a nivel de kernel no puede obtener acceso de escritura al MSR. Deshabilitar Hyper-V implica desafortunadamente deshabilitar Credential Guard y Device Guard, dos medidas de seguridad recomendadas. En nuestra opinión, evitar un posible ataque de robo de información a través de JavaScript (la explotación de Zenbleed a través de JavaScript se considera al menos posible según tom's Hardware: https://www.tomshardware.com/news/zenbleed-bug-allows-data-theft-from-amds-zen-2-processors-patches-released) al detener la vulnerabilidad Zenbleed (CVE-2023-20593) supera el riesgo de deshabilitar dos medidas de defensa en profundidad.
  • El controlador a nivel de kernel WinRing0 sufre de CVE-2020–14979, una vulnerabilidad de escalada de privilegios local. Ver https://posts.specterops.io/cve-2020-14979-local-privilege-escalation-in-evga-precisionx1-cf63c6b95896 y https://github.com/openhardwaremonitor/openhardwaremonitor/issues/1557. WinRing0 es un controlador a nivel de kernel de código abierto que también es utilizado por otros programas de código abierto como la librería OpenHardwareMonitor. El problema es que el controlador crea un objeto de dispositivo sin una lista de control de acceso, permitiendo así que todos los usuarios locales de Windows se comuniquen con el controlador. Dado que el controlador permite el acceso directo al hardware, es posible una escalada de privilegios a derechos de NT AUTHORITY\SYSTEM. Una solución real requeriría un cambio en el controlador WinRing0 y por lo tanto una nueva firma, lo cual es complicado. La librería OpenHardwareMonitor, como solución alternativa, corrige los derechos de acceso inmediatamente después de cargar el controlador (https://github.com/openhardwaremonitor/openhardwaremonitor/commit/0e435cafc61fe84d429e8a9500d666e34e3de67b). Nuestro script de PowerShell sortea CVE-2020–14979 descargando inmediatamente el controlador después de establecer el chicken bit. Sin embargo, existe una pequeña ventana de oportunidad cada vez que se ejecuta el script. Dado que establecer el chicken bit no es persistente, el script debe ejecutarse en cada reinicio. En nuestro análisis de riesgos, los beneficios de una protección contra Zenbleed (que puede ocurrir de forma remota) nuevamente superan los riesgos de una escalada de privilegios local. Además, recomendamos ejecutar el script lo más temprano posible en el proceso de arranque para limitar la explotabilidad por parte de los procesos de usuario. Realice un análisis de riesgos para su entorno específico antes de implementar el script de PowerShell.
  • Esta solución alternativa de software tiene como objetivo ser una solución temporal hasta que AMD corrija el error en sus CPUs.

¿Cómo sé que funciona?

root@kitploit:~
PS C:\stop-zenbleed-win> powershell -ExecutionPolicy RemoteSigned .\Stop-Zenbleed.ps1
[>] Installing driver...
[SC] CreateService SUCCESS

[>] Starting driver...

SERVICE_NAME: WinRing0_1_2_0
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
        PID                : 0
        FLAGS              :

[>] Opening driver...
[+] Driver access OK, handle: 2456

[>] Try 1 to apply fix on processor 1
[+] Fix is applied on processor 1 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 2 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 3
[+] Fix is applied on processor 3 (MSR 0xC0011029=0x3004310E08202)
[+] Fix is applied on processor 4 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 5
[+] Fix is applied on processor 5 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 6 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 7
[+] Fix is applied on processor 7 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 8 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 9
[+] Fix is applied on processor 9 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 10 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 11
[+] Fix is applied on processor 11 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 12 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 13
[+] Fix is applied on processor 13 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 14 (MSR 0xC0011029=0x300C310E08203)
[>] Try 1 to apply fix on processor 15
[+] Fix is applied on processor 15 (MSR 0xC0011029=0x300C310E08202)
[+] Fix is applied on processor 16 (MSR 0xC0011029=0x300C310E08203)

[>] Closing driver...

[>] Stopping driver...

SERVICE_NAME: WinRing0_1_2_0
        TYPE               : 1  KERNEL_DRIVER
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

[>] Uninstalling driver...
[SC] DeleteService SUCCESS

Después de ejecutar nuestro script de PowerShell, el exploit de prueba de concepto (POC) no debería producir más salida.

Derechos de autor

  • Stop-Zenbleed.ps1 se proporciona bajo la licencia GNU GPL v3.0: LICENSE
  • WinRing0 es © 2007-2009 OpenLibSys.org y se proporciona bajo los siguientes términos: WinRing0/LICENSE
Descargar herramienta