TL;DR
- Cosa impari: come verificare se CVE-2026-21513 (0-day MSHTML) è stata sfruttata nella tua infrastruttura prima della patch di febbraio 2026
- Tempo richiesto: 30-45 minuti per audit completo su fleet Windows
- Difficoltà: Media — serve PowerShell admin, accesso ai log Defender/Sysmon e un po' di pazienza
Il Problema
Hai aggiornato Windows il Patch Tuesday di febbraio 2026? Bene. Adesso dimmi: sai cosa è successo nelle sei-otto settimane precedenti?
CVE-2026-21513 è una vulnerabilità critica in MSHTML — il motore di rendering di Internet Explorer, ancora vivo e vegeto nel 2026 perché Windows e Office lo usano in background per processare una valanga di formati documentali. La falla consente l'esecuzione di codice arbitrario tramite file .mht o .mhtml appositamente costruiti. Zero click, in certi scenari. Zero avvisi all'utente.
Akamai ha confermato che APT28 (il gruppo russo noto anche come Fancy Bear, GRU Unit 26165, scegli il nome che preferisci) stava già sfruttando questa vulnerabilità in campagne mirate contro organizzazioni europee prima che Microsoft rilasciasse qualsiasi patch. Classico 0-day weaponizzato da un attore state-sponsored.
Il vettore principale? Una mail con un allegato che sembra innocuo — magari un documento .doc o un archivio — ma che internamente fa girare MSHTML. L'utente apre, MSHTML fa il parse, il payload si esegue. Tutto in background, nel giro di secondi, senza che l'utente veda nulla di strano.
Se stai leggendo questo e gestisci ambienti Windows con Outlook o suite Office, sai già che i tuoi utenti aprono allegati ogni giorno senza pensarci troppo. E MSHTML viene invocato da una quantità di processi che la maggior parte dei sysadmin scopre solo quando c'è un problema.
Il nodo: la patch è disponibile, sì. Ma il problema reale è la finestra di esposizione — le settimane in cui il 0-day girava in the wild senza remediation. I log per fare l'audit ci sono. Gli IoC anche. Bisogna solo sapere dove guardare.
Prerequisiti
Prima di procedere, assicurati di avere:
- Accesso amministrativo a WSUS, Microsoft Intune, o RDP/locale alle macchine target
- PowerShell 5.1+ (Windows 10/11/Server 2019+ ce l'hanno di default)
- Windows Defender attivo con log eventi abilitati (retention minima: 30 giorni, meglio 90)
- Sysmon installato (opzionale ma fortemente consigliato — se non ce l'hai, vedi Troubleshooting)
- Accesso ai log del mail gateway o Exchange per correlare gli allegati ricevuti nel periodo sospetto
Guida Step-by-Step
Step 1: Verifica lo stato della patch su tutta la fleet
Prima cosa prima: quante macchine hanno davvero installato la patch di febbraio?
# Singola macchina
Get-HotFix | Where-Object { $_.InstalledOn -ge '2026-02-01' } |
Select-Object HotFixID, InstalledOn
# Fleet via Invoke-Command
$computers = Get-Content C:\lista_pc.txt
Invoke-Command -ComputerName $computers -ScriptBlock {
Get-HotFix | Where-Object { $_.InstalledOn -ge '2026-02-01' } |
Select-Object PSComputerName, HotFixID, InstalledOn
} | Export-Csv C:\patch_report.csv -NoTypeInformation
Errore comune: la patch risulta installata ma il reboot non è stato fatto. Quel sistema è ancora esposto:
# Verifica pending reboot
Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
# True = reboot necessario, sistema ancora vulnerabile
Se trovi macchine con reboot pendente, quella è la tua priorità immediata.
Step 2: Cerca IoC nei log di Windows Defender
CVE-2026-21513 sfrutta MSHTML per iniettare codice in processi legittimi. Cerca eventi anomali nel periodo di esposizione (da dicembre 2025 a febbraio 2026):
# Event ID 1116: malware rilevato, 1117: azione intrapresa
Get-WinEvent -LogName "Microsoft-Windows-Windows Defender/Operational" |
Where-Object {
$_.Id -in @(1116, 1117) -and
$_.TimeCreated -ge (Get-Date).AddDays(-90)
} |
Select-Object TimeCreated, Id, Message |
Export-Csv C:\defender_events.csv -NoTypeInformation
Con Sysmon installato, cerca processi figlio anomali di applicazioni Office (Event ID 1 = Process Create):
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
Where-Object { $_.Id -eq 1 -and $_.TimeCreated -ge (Get-Date).AddDays(-90) } |
Where-Object { $_.Message -match "mshtml" -or $_.Message -match "\.mht" } |
Select-Object TimeCreated, Message |
Export-Csv C:\sysmon_mshtml.csv -NoTypeInformation
Red flag concreto: svchost.exe, dllhost.exe o rundll32.exe spawnati come child process di WINWORD.EXE, OUTLOOK.EXE o simili applicazioni Office. Non dovrebbe mai succedere.
Step 3: Risali agli allegati sospetti nel mail gateway
Il vettore iniziale è la mail. Cerca file .mht o .mhtml consegnati nelle ultime 8-12 settimane.
Exchange Online:
# Richiede connessione a Exchange Online PowerShell
Search-MessageTrackingLog -Start (Get-Date).AddDays(-90) -End (Get-Date) -EventId DELIVER |
Where-Object { $_.MessageSubject -match "\.(mht|mhtml)" } |
Select-Object Timestamp, Sender, Recipients, MessageSubject |
Export-Csv C:\allegati_sospetti.csv -NoTypeInformation
Exchange On-Premise:
Get-MessageTrackingLog -Start (Get-Date).AddDays(-90) -EventId DELIVER |
Where-Object { $_.MessageSubject -match "\.(mht|mhtml)" } |
Select-Object Timestamp, Sender, Recipients, MessageSubject |
Export-Csv C:\tracking_sospetti.csv -NoTypeInformation
Nota: gli allegati vengono spesso rinominati per aggirare i filtri per estensione. Allarga la ricerca ai mittenti anomali (domini con typosquatting, indirizzi mai visti prima) o a picchi di traffico inusuali verso certi destinatari nel periodo in esame.
Step 4: Analizza le connessioni di rete post-exploitation
Se MSHTML è stato sfruttato con successo, il payload tenta di contattare un C2. APT28 usa spesso infrastrutture su hosting europeo o servizi legittimi compromessi per far sembrare normale il traffico:
# Connessioni TCP stabilite su porte non standard
Get-NetTCPConnection -State Established |
Where-Object { $_.RemotePort -notin @(80, 443, 8080, 8443) } |
ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[PSCustomObject]@{
RemoteAddress = $_.RemoteAddress
RemotePort = $_.RemotePort
ProcessName = $proc.Name
PID = $_.OwningProcess
}
} | Export-Csv C:\connessioni_sospette.csv -NoTypeInformation
Guarda con sospetto qualsiasi processo Office o di sistema che fa connessioni su porte inusuali verso IP esteri. Quella roba non dovrebbe esserci.
Step 5: Mitigazioni temporanee se il reboot non è pianificabile subito
In ambienti legacy o sistemi critici che non possono essere riavviati immediatamente:
# Rimuovi associazione file .mht/.mhtml (mitigazione parziale)
# ATTENZIONE: testa sempre in staging prima di applicare in produzione
cmd /c "assoc .mht=txtfile"
cmd /c "assoc .mhtml=txtfile"
In alternativa, configura una regola AppLocker o una Software Restriction Policy via Group Policy per bloccare l'apertura di file .mht da cartelle user-writable come Desktop, Downloads e Temp. Non è una soluzione definitiva, ma riduce la superficie d'attacco mentre pianifichi il maintenance window.
Verifica
Dopo patching e audit, conferma che la situazione sia sotto controllo:
# 1. Patch installata? (sostituisci KB con il numero reale da Microsoft Security Update Guide)
Get-HotFix -Id "KB5XXXXXXX" -ErrorAction SilentlyContinue
# Output vuoto = patch non installata
# 2. Reboot pendente?
@(
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending",
"HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations"
) | ForEach-Object { Test-Path $_ }
# True su uno qualsiasi = riavvio obbligatorio
# 3. Attività anomala post-patch (ultimi 7 giorni)
Get-WinEvent -LogName Security |
Where-Object {
$_.Id -in @(4625, 4648, 4768) -and
$_.TimeCreated -ge (Get-Date).AddDays(-7)
} |
Select-Object TimeCreated, Id, Message |
Format-Table -AutoSize
Strumenti aggiuntivi utili per la validazione:
- Microsoft Safety Scanner (MSERT): gratuito, aggiornato quotidianamente — scaricalo e lancialo sulle macchine sospette
- Sysinternals Autoruns: controlla persistenza in startup, scheduled tasks e COM hijacking. APT28 è noto per tecniche di persistence sofisticate che sopravvivono ai reboot
- Process Monitor: filtra per
mshtml.dll e osserva le chiamate in tempo reale su sistemi che si comportano in modo strano
Nei giorni successivi, monitora attivamente: Event ID 4688 con CommandLine auditing abilitato, Sysmon ID 3 (Network connections) e Sysmon ID 11 (FileCreate in cartelle temp).
Troubleshooting
"La patch risulta installata ma le scansioni la segnalano ancora vulnerabile" Reboot obbligatorio. MSHTML è caricato in memoria e la versione patchata non è attiva finché il sistema non viene riavviato. Pianifica la finestra di manutenzione al più presto.
"Non ho Sysmon e i log base non mostrano nulla di strano" I log di Windows vanilla sono spesso insufficienti per rilevare attività sofisticate. Installa Sysmon con la configurazione di SwiftOnSecurity (cerca "sysmon-config" su GitHub): è gratuito, pesa ~1-2% CPU, e ti dà visibilità che non ha prezzo. Fallo adesso, non aspettare il prossimo incidente.
"Ho trovato una connessione sospetta — come distinguo un FP da qualcosa di reale?"
# Identifica il processo
tasklist /fi "PID eq <numero_pid>"
# Hash SHA256 del file eseguibile
Get-FileHash "C:\percorso\al\processo.exe" -Algorithm SHA256
Confronta l'hash su VirusTotal (upload manuale se il sistema è isolato). Processi legittimi come svchost.exe non fanno connessioni su porte non standard. Se le fanno, c'è un problema.
"Un utente ha aperto un allegato sospetto settimane fa — è compromesso?" Cerca nei log Defender il timestamp corrispondente all'apertura. Nessun rilevamento non significa "tutto ok": la variante usata in campagna poteva essere sconosciuta ai motori AV al momento dell'apertura. Su macchine ad alto rischio (dirigenza, finanza, HR), considera wipe + rebuild come scelta conservativa.
"Il mail gateway non ha bloccato i file .mht" Molti gateway filtrano per estensione dichiarata, ma vengono aggirati con rename o doppia estensione. Un sistema di sandboxing con analisi comportamentale degli allegati, come quello offerto da MailSniper, è significativamente più efficace di un semplice blocco per MIME type.
Conclusione
CVE-2026-21513 è uno di quei casi in cui il vero lavoro inizia dopo la patch. La finestra di esposizione conta tanto quanto il fix stesso: se APT28 ha avuto settimane per operare indisturbato, la domanda non è "ho patchato?" ma "sono già stato compromesso prima di farlo?"
Segui questa guida, fai l'audit, correla i log. Se tutto è pulito, ottimo — aggiorna le procedure e porta la log retention a 90 giorni. Se trovi qualcosa di anomalo, non aspettare: isola la macchina e avvia un'analisi forense.
Come prossimi passi concreti: abilita CommandLine Auditing via GPO se non l'hai già, installa Sysmon e approfondisci come funziona il sandboxing degli allegati per fermare queste robe prima che arrivino all'endpoint.