Resumen ejecutivo#
BlueHammer (CVE-2026-33825, CVSS 7.8) y RedSun (CVE-2026-41091, CVSS 7.8) son dos vulnerabilidades de escalada local de privilegios (LPE) en Microsoft Defender. Un usuario sin privilegios llega a SYSTEM. Los CVE son distintos y las rutas de código también, pero la idea es idéntica y merece entenderse una sola vez: engañar al motor de Defender —que remedia ficheros maliciosos con privilegios de SYSTEM— para que su escritura privilegiada aterrice en C:\Windows\System32 en lugar de en su directorio temporal. A partir de ahí, sobrescribir un binario del sistema y esperar a que Windows lo ejecute como SYSTEM.
(Actualización, 7-jul-2026: CISA elevó el estado de BlueHammer de “explotado in-wild” a arma confirmada de ransomware. Entró en el catálogo KEV el 22 de abril de 2026 con plazo de 21 días para las agencias federales, y a finales de junio CISA confirmó campañas de ransomware que lo usan activamente para convertir un punto de apoyo limitado en un incidente de cifrado completo. RedSun, por su parte, ya cuenta con PoC público en GitHub, lo que baja aún más la barrera de reutilización. El patrón operativo se estandarizó: cegar Defender —UnDefend— y escalar —BlueHammer/RedSun— antes de soltar el payload.)
La clase de vulnerabilidad: TOCTOU#
TOCTOU = Time-Of-Check to Time-Of-Use (CWE-367). Es una condición de carrera: un programa comprueba una condición sobre un recurso (¿esta ruta es segura? ¿apunta a mi carpeta temporal?) y más tarde actúa sobre ese recurso (escribe ahí) asumiendo que nada cambió en el intervalo. Si un atacante logra cambiar el recurso entre la comprobación y el uso, el programa actúa sobre algo distinto de lo que validó.
En un proceso normal la ventana entre check y use es de microsegundos y ganarla es difícil. El “arte” del exploit está en ensanchar y controlar esa ventana. Y Windows ofrece dos primitives legítimos, bien documentados, para hacerlo:
- Oplock (opportunistic lock), en su variante batch. Un mecanismo de caché de ficheros de SMB/NTFS que permite a un proceso pedir que se le avise —y que la operación se pause— cuando otro proceso toca un fichero. El atacante lo usa al revés de su propósito: como un freno programable para congelar a Defender exactamente en el instante crítico.
- Junction point de NTFS. Un tipo de enlace de directorio (reparse point) que redirige una ruta a otra. Un usuario sin privilegios puede crear junctions en directorios donde tiene permiso de escritura —como su propio
%TEMP%—.
Combínalas y tienes la receta conceptual: congelar a Defender con el oplock, cambiar bajo sus pies el directorio (que era real) por un junction hacia System32, soltar el freno. Defender reanuda, “sigue” el junction y escribe donde no debía —con sus privilegios, no los tuyos—.
sequenceDiagram
participant U as Usuario (sin privilegios)
participant D as Defender (SYSTEM)
participant FS as Sistema de ficheros
U->>FS: coloca fichero "malicioso" (dispara detección)
D->>FS: CHECK — valida ruta de remediación (dir temporal del usuario)
U->>D: batch oplock — congela la operación en el punto crítico
Note over U,FS: ventana abierta y controlada
U->>FS: reemplaza el dir temporal por un JUNCTION → C:\Windows\System32
U->>D: libera el oplock
D->>FS: USE — escribe con privilegios SYSTEM... siguiendo el junction
Note over FS: escritura arbitraria en System32 = escalada a SYSTEMDónde difieren BlueHammer y RedSun#
Mismo primitive (oplock + junction), distinta ruta de código dentro de Defender — y eso importa, porque explica por qué parchear uno no mató al otro:
BlueHammer (CVE-2026-33825) | RedSun (CVE-2026-41091) | |
|---|---|---|
| Componente abusado | Motor de remediación de ficheros | Mecanismo de rollback de cloud files (Windows Cloud Files API) |
| Naturaleza (NVD) | Race condition / TOCTOU en la escritura de remediación | Link-following (seguimiento de enlace) |
| Gatillo | Fichero que dispara detección + remediación | Fichero detectado, luego sustituido por un placeholder de cloud file; el abuso ocurre en el rollback |
| Resultado | Escritura privilegiada en System32 → SYSTEM; acceso a SAM | Escritura privilegiada en System32 → SYSTEM |
| Divulgación / parche | PoC ~7-abr-2026 → parche Patch Tuesday abril | PoC ~abril → parche OOB 21-may-2026 |
RedSun es la prueba de que el actor no dependía de un bug puntual: cuando la ruta de remediación se endureció, se movió a la ruta de rollback de cloud files para alcanzar el mismo primitive de escritura. Es reencontrar la clase de vulnerabilidad, no un CVE nuevo por suerte.
Parchear un CVE y creer que se cerró la puerta es contar el último paso e ignorar los mil anteriores. El defensor tapa el agujero que vio; el atacante nunca buscó ese agujero — buscó la clase, y la clase tiene más de una entrada. Es la asimetría de siempre: atacar es encontrar una que funcione, defender es cubrirlas todas, y son costos distintos. Mientras el primitive siga siendo “un proceso con privilegios valida una ruta y después escribe sin volver a mirar”, contar CVE es contar síntomas. La pregunta útil no es cuántos parches faltan; es por qué seguimos confiando en que Defender escriba donde prometió.
Lo que el código real confirma (analizado en laboratorio)#
El primitive es común, pero cada pieza deja artefactos de telemetría distintos y más resilientes que los nombres de binario. Analizados los PoC públicos en un entorno aislado —a nivel de qué observa un defensor—, esto es lo que ancla la detección:
BlueHammer no espera a que Defender pase por casualidad: conduce su motor de actualización de firmas. Instancia el Windows Update Agent por COM (Microsoft.Update.Session) para traer una actualización legítima de señuelo, y luego hace una llamada RPC por ALPC a la interfaz de Defender —ServerMpUpdateEngineSignature— que es la que provoca la lectura/escritura privilegiada sobre la ruta que el atacante controla. El freno es un batch oplock (FSCTL_REQUEST_BATCH_OPLOCK) puesto sobre el fichero de firmas mpasbase.vdm y sobre RstrtMgr.dll. El gatillo de detección es un fichero foo.exe que contiene un EICAR (guardado al revés en el binario para no autodetectarse). Y el robo de SAM no toca el registro en vivo: parsea el hive offline con offreg desde una copia de sombra (VSS), extrae la boot key, descifra los hashes NT y cambia la contraseña del Administrador con SamiChangePasswordUser, la usa y la restaura. El shell final es un servicio efímero con nombre GUID aleatorio o un conhost.exe lanzado en la sesión del usuario.
RedSun llega al mismo punto por la API de Cloud Files (CldApi): registra un sync root con CfRegisterSyncRoot —bajo un ProviderName burlón, "SERIOUSLYMSFT"—, marca el EICAR como placeholder de nube (CfCreatePlaceholders, flags SUPERSEDE | MARK_IN_SYNC), y aprovecha que Defender, al remediar un fichero “de nube”, lo reescribe en su ubicación original en vez de ponerlo en cuarentena. Con el junction hacia System32 en su sitio, esa reescritura aterriza sobre TieringEngineService.exe (Storage Tiers Management), que RedSun dispara acto seguido por COM local server para que se ejecute como SYSTEM. Su canal de señal es el named pipe \??\pipe\REDSUN.
Ninguno de estos anclajes —la llamada RPC de actualización, el registro de un sync root falso, la reescritura de TieringEngineService.exe por MsMpEng.exe— depende del nombre del binario, y por eso son la base de las reglas de abajo.
Impacto: de escritura arbitraria a SAM#
Escritura arbitraria como SYSTEM es game over local, pero conviene ver el eslabón concreto que reportan las fuentes: el acceso de lectura al hive SAM (Security Account Manager), donde viven los hashes de credenciales locales. Con SYSTEM se puede copiar SAM (y SYSTEM/SECURITY), extraer hashes offline y pivotar. Por eso esto no es “solo LPE”: es LPE que habilita robo de credenciales (MITRE T1003.002).
Cómo se vio en la práctica (Huntress)#
En la intrusión de mediados de abril, BlueHammer/RedSun fueron el paso de escalada dentro de una cadena más larga —el acceso inicial fue una VPN FortiGate comprometida, no el zero-day—:
VPN FortiGate comprometida
→ staging: FunnyApp.exe (Pictures\), RedSun.exe, z.exe (Downloads\ks\)
→ recon: whoami /priv · cmdkey /list · net group
→ ESCALADA: BlueHammer / RedSun → SYSTEM → lectura de SAM
→ evasión: UnDefend → C2: agent.exe (BeigeBurrow) → ransomware
IoCs relevantes de esta pieza (Huntress; los nombres de binario son triviales de cambiar, úsalos como pista, no como muralla):
%USERPROFILE%\Pictures\FunnyApp.exe (variante BlueHammer)
%USERPROFILE%\Downloads\RedSun.exe
%USERPROFILE%\Downloads\ks\z.exe
Exploit:Win32/DfndrPEBluHmr.BZ (detección de Defender, cuando no está cegado por UnDefend)
Ingeniería de detección#
Ordenadas de más resiliente a más frágil. La regla que de verdad quieres es la primera.
1. Comportamental — shell hijo de MsMpEng.exe (alta confianza)#
MsMpEng.exe (el servicio de Defender) no lanza shells interactivos. Un cmd.exe/powershell.exe como hijo directo es un artefacto potente de explotación exitosa de esta familia, y no depende de ningún IoC: sobrevive a que el actor renombre binarios.
title: Shell sospechoso lanzado por Microsoft Defender (MsMpEng)
id: ne-bh-001-defender-shell-spawn
status: experimental
description: >
cmd/powershell/wscript como hijo directo de MsMpEng.exe. Comportamiento
altamente anómalo; artefacto de explotación de BlueHammer/RedSun/RoguePlanet.
Resiliente a variantes (no depende de IoCs).
references:
- https://www.picussecurity.com/resource/blog/bluehammer-redsun-windows-defender-cve-2026-33825-zero-day-vulnerability-explained
author: Serie Nightmare Eclipse — detección defensiva
date: 2026-07-02
tags:
- attack.privilege_escalation
- attack.t1068
- attack.t1059
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 1
ParentImage|endswith: '\MsMpEng.exe'
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
condition: selection
falsepositives:
- Muy bajo. Validar contra baseline del entorno.
level: critical
Equivalente en KQL (Defender XDR / Sentinel):
DeviceProcessEvents
| where Timestamp > ago(24h)
| where InitiatingProcessFileName =~ "MsMpEng.exe"
| where FileName in~ ("cmd.exe","powershell.exe","pwsh.exe",
"wscript.exe","cscript.exe","mshta.exe")
| project Timestamp, DeviceName, FileName, ProcessCommandLine,
AccountName, InitiatingProcessFileName
| order by Timestamp desc
2. Comportamental — Defender reescribe un binario de sistema (alta)#
El desenlace del primitive es siempre el mismo hecho observable: MsMpEng.exe crea o reescribe un ejecutable dentro de System32, algo que Defender no hace en operación normal. En el PoC de RedSun el blanco concreto es TieringEngineService.exe (Storage Tiers Management), que luego se dispara por COM para correr como SYSTEM; en la familia WER, wermgr.exe. La regla no necesita conocer el nombre —cualquier .exe/.dll escrito por Defender en System32 es la señal—:
DeviceFileEvents
| where Timestamp > ago(24h)
| where FolderPath startswith @"C:\Windows\System32\"
| where InitiatingProcessFileName =~ "MsMpEng.exe"
| where ActionType in ("FileCreated","FileModified")
// Defender no debería crear/reescribir binarios en System32:
| where FileName endswith ".exe" or FileName endswith ".dll"
| project Timestamp, DeviceName, FolderPath, FileName,
InitiatingProcessFileName, InitiatingProcessAccountName
El primitive también deja el rastro previo: creación de reparse points/junctions hacia System32 desde procesos de usuario. Sysmon no registra junctions de forma directa, pero la escritura de arriba es la consecuencia inequívoca.
3. Comportamental — sync root de Cloud Files por un proceso no-proveedor (media-alta, RedSun)#
RedSun necesita registrar un sync root de Cloud Files (CfRegisterSyncRoot) para marcar su señuelo como fichero “de nube”. Fuera de los clientes de sincronización reales (OneDrive y similares), casi nada lo hace. En el PoC el ProviderName es el burlón SERIOUSLYMSFT, pero la señal resiliente es el acto de registrar un sync root desde un binario que no es un proveedor de nube conocido:
title: RedSun — sync root de Cloud Files registrado por proceso no-proveedor
id: ne-rs-003-cloudfiles-syncroot
status: experimental
description: >
CfRegisterSyncRoot invocado por un proceso ajeno a los clientes de nube
conocidos. Paso necesario de RedSun (CVE-2026-41091) para marcar el señuelo
como placeholder de nube. Comportamental: no depende del ProviderName del PoC.
references:
- https://www.picussecurity.com/resource/blog/bluehammer-redsun-windows-defender-cve-2026-33825-zero-day-vulnerability-explained
author: Serie Nightmare Eclipse — detección defensiva
date: 2026-07-08
tags:
- attack.privilege_escalation
- attack.t1068
- attack.t1574
logsource:
product: windows
category: image_load
detection:
selection:
ImageLoaded|endswith: '\CldApi.dll'
filter_known:
Image|contains:
- '\OneDrive'
- '\Microsoft\'
- '\Program Files\'
condition: selection and not filter_known
falsepositives:
- Proveedores de sincronización de terceros. Establecer baseline por entorno.
level: high
4. Comportamental — rastro del robo de credenciales (media, BlueHammer)#
Tras leer el SAM, BlueHammer cambia y restaura la contraseña del Administrador local (SamiChangePasswordUser) y crea un servicio efímero con nombre GUID aleatorio (SERVICE_DEMAND_START) para materializar la shell SYSTEM. Dos secuencias muy cortas y anómalas a cazar: un evento 4724/4738 (reset de contraseña) sobre el Administrador seguido casi de inmediato de otro que lo revierte, y la creación + arranque + borrado de un servicio con nombre tipo GUID en menos de un segundo (7045 en el log System / Sysmon 12–13 sobre \Services\{GUID}).
5. IoC-driven — staging de binarios (baja, complementaria)#
Frágil (renombrable), pero barata y útil para correlacionar:
title: Nightmare Eclipse — staging de binario en directorio de usuario
id: ne-bh-002-staging
status: experimental
description: >
Nombres de binario documentados por Huntress para BlueHammer/RedSun.
IoC-driven; evadible por renombrado. Usar solo como correlación.
references:
- https://www.huntress.com/blog/nightmare-eclipse-intrusion
author: Serie Nightmare Eclipse — detección defensiva
date: 2026-07-02
tags:
- attack.privilege_escalation
- attack.t1068
logsource:
product: windows
service: sysmon
detection:
selection:
EventID: 11
TargetFilename|endswith:
- '\Pictures\FunnyApp.exe'
- '\Downloads\RedSun.exe'
- '\Downloads\ks\z.exe'
condition: selection
falsepositives:
- Muy bajo por lo específico de los nombres; nulo valor ante variantes.
level: medium
6. YARA — triaje de muestras en reposo (frágil, complementaria)#
Para revisar ficheros parados (una carpeta de descargas, un adjunto, un artefacto de sandbox), no como control primario. Dos aclaraciones de honestidad: la idea de cazar un binario de sistema suplantado no es novedosa —es prior art público (cf. la familia APT_*_ForensicArtefacts_WER de la signature-base de Nextron/Florian Roth)—, y las cadenas se recopilan de los artefactos del PoC público y del reporting de Huntress. El actor renombra binarios en minutos: un match confirma «el PoC tal cual», un no-match no dice nada.
import "pe"
/* RECOPILACIÓN, no autoría: cadenas de los PoC públicos de la campaña y del
tooling que Huntress observó en la intrusión real. Firma FRÁGIL, renombrable;
úsese como complemento del comportamiento (regla #1). */
rule NightmareEclipse_PoC_Tooling
{
meta:
author = "dust115 — recopilación (fennek.org)"
description = "Cadenas de los PoC públicos (BlueHammer/RedSun/UnDefend/RoguePlanet) y del tooling visto por Huntress"
source = "artefactos del PoC público + reporting de Huntress"
confidence = "low — IoC frágil, complementario"
strings:
$rp = "RoguePlanet" ascii wide nocase
$undef = "-agressive" ascii wide // flag del PoC UnDefend (sic)
$tun = "BeigeBurrow" ascii wide nocase // tunelizador (agent.exe)
$c2 = "staybud.dpdns" ascii wide nocase // C2 reportado por Huntress
$wer = "QueueReporting" ascii wide // tarea WER abusada (contexto)
$rsprov = "SERIOUSLYMSFT" ascii wide // ProviderName del sync root de RedSun (verificado en el código)
$rspipe = "\\??\\pipe\\REDSUN" ascii wide // named pipe de RedSun (verificado)
condition:
2 of ($rp, $undef, $tun, $c2, $rsprov, $rspipe)
or (1 of ($rp, $undef, $tun, $c2, $rsprov, $rspipe) and $wer)
}
/* ADAPTACIÓN de un patrón público (binario de sistema suplantado / artefactos
WER): wermgr.exe legítimo vive FIRMADO en System32/SysWOW64; uno SIN firma es
candidato de suplantación. Regla de CAZA, no de bloqueo — triáguese ruta y
firma (hay wermgr sin firmar legítimos en imágenes muy viejas). */
rule Suspicious_Unsigned_Wermgr
{
meta:
author = "dust115 — adaptación (fennek.org)"
description = "wermgr.exe sin firma Authenticode — posible suplantación WER (T1036)"
credit = "patrón público: cf. signature-base APT_HAFNIUM_ForensicArtefacts_WER (Nextron/F. Roth)"
confidence = "medium — requiere triaje de ruta y firma"
condition:
pe.is_pe
and (pe.version_info["OriginalFilename"] == "wermgr.exe"
or pe.version_info["InternalName"] == "wermgr.exe")
and pe.number_of_signatures == 0
}
Mitigación#
| Acción | Detalle | Cubre |
|---|---|---|
| Parchear plataforma Defender | 4.18.26040.7 o superior | BlueHammer, RedSun (y UnDefend) |
| Patch Tuesday abril 2026 | Actualización acumulativa | BlueHammer |
| OOB 21-may-2026 | Actualización de plataforma Defender | RedSun, UnDefend |
| Tamper Protection | Dificulta manipular Defender | Endurecimiento general |
# ¿Estoy cubierto?
(Get-MpComputerStatus).AMProductVersion # -> 4.18.26040.7 o superior
Get-MpComputerStatus | Select-Object AMEngineVersion, AMProductVersion, `
AntivirusSignatureLastUpdated, IsTamperProtected
DfndrPEBluHmr.BZ no va a saltar aunque BlueHammer se ejecute. Por eso la detección #1 (shell hijo de MsMpEng.exe, que no depende de firmas) es la que importa, y por eso conviene monitorizar fallos de actualización de Defender como señal de UnDefend — el tema del próximo post.MITRE ATT&CK#
| Táctica | Técnica |
|---|---|
| Privilege Escalation | T1068 — Exploitation for Privilege Escalation |
| Privilege Escalation | T1574 — Hijack Execution Flow (RedSun: reescritura de TieringEngineService.exe) |
| Defense Evasion | T1211 — Exploitation for Defense Evasion (abuso del propio Defender) |
| Credential Access | T1003.002 — OS Credential Dumping: SAM (parseo offline vía offreg) |
| Execution | T1569.002 — System Services: Service Execution (servicio efímero GUID) |
| Execution | T1059 — Command and Scripting Interpreter (shell resultante) |
Referencias#
- Picus — BlueHammer & RedSun (CVE-2026-33825) Explained: https://www.picussecurity.com/resource/blog/bluehammer-redsun-windows-defender-cve-2026-33825-zero-day-vulnerability-explained
- Help Net Security — CVE-2026-41091, CVE-2026-45498 exploited: https://www.helpnetsecurity.com/2026/05/21/microsoft-defender-vulnerabilities-cve-2026-41091-cve-2026-45498/
- SecurityWeek — Microsoft Patches UnDefend and RedSun Defender Zero-Days: https://www.securityweek.com/microsoft-patches-exploited-undefend-and-redsun-defender-zero-days/
- Huntress — Nightmare-Eclipse Tooling Seen in Real-World Intrusion: https://www.huntress.com/blog/nightmare-eclipse-intrusion
- NVD — CVE-2026-33825: https://nvd.nist.gov/vuln/detail/CVE-2026-33825 · CVE-2026-41091: https://nvd.nist.gov/vuln/detail/CVE-2026-41091
- MITRE CWE-367 (TOCTOU): https://cwe.mitre.org/data/definitions/367.html
- (act. 7-jul) SecurityWeek — BlueHammer Vulnerability Exploited in Ransomware Attacks: https://www.securityweek.com/bluehammer-vulnerability-exploited-in-ransomware-attacks/
- (act. 7-jul) BleepingComputer — CISA: Windows BlueHammer flaw now exploited by ransomware gangs: https://www.bleepingcomputer.com/news/security/cisa-windows-bluehammer-flaw-now-exploited-by-ransomware-gangs/