Home Chi Sono
Servizi ▼
WordPress Sviluppo Web Server & Hosting Assistenza Tecnica Windows Android
Blog ▼
Tutti gli Articoli WordPress Hosting Plesk Assistenza Computer Windows Android A.I.
Contatti

Come Mitigare CVE-2026-96951 Windows Shell Mark of the Web Bypass: La Mia Procedura Exploit Scenario, Hardening WDAC e Incident Response

Come Mitigare CVE-2026-96951 Windows Shell Mark of the Web Bypass: La Mia Procedura Exploit Scenario, Hardening WDAC e Incident Response

Nel mio lavoro di System Administrator, ho visto crescere negli ultimi mesi una tendenza preoccupante: gli attacchi tramite Mark of the Web bypass sono diventati sempre più sofisticati e mirati. CVE-2026-96951, il zero-day che Microsoft ha risolto a ottobre 2026, rappresenta esattamente questo problema. È la terza vulnerabilità di questo tipo nel 2026 (dopo CVE-2026-21510 a febbraio e CVE-2026-32202 in aprile), il che mi dice che gli attaccanti hanno trovato il bersaglio perfetto: lo Shell di Windows.

In questo articolo condivido la mia esperienza pratica nel gestire questa minaccia: come riconoscere lo scenario d’attacco, le mitigazioni immediate che ho implementato in produzione, e soprattutto come costruire una strategia di hardening con WDAC (Windows Defender Application Control) per proteggere i moduli dinamici da esecuzioni non autorizzate.

Che cosa è CVE-2026-96951: La Vulnerabilità

CVE-2026-96951 ha un CVSS score di 8.8 e consente a un attaccante non autenticato di aggirare le protezioni Mark of the Web convincendo una vittima a interagire con un file appositamente creato. È una vulnerabilità di command injection nel Windows Shell causata dall’inadeguata neutralizzazione di elementi speciali utilizzati in un comando.

Quello che rende questo exploit così pericoloso, nella mia esperienza, è il silenzio. Quando il MotW viene rimosso silenziosamente, ogni protezione collegata a esso si disattiva contemporaneamente: nessun controllo della reputazione SmartScreen, nessuna Office Protected View, nessun blocco delle macro, nessun prompt Smart App Control. L’utente non vede nulla di strano; il file scaricato da internet appare come locale e fidato.

Lo Scenario d’Attacco Reale: Come Funziona

CVE-2026-96951 consente agli attaccanti di rimuovere il tag Mark of the Web (MotW) Zone.Identifier dal flusso dati alternativo (ADS) dei file all’interno di formati di archivio appositamente creati come ZIP, ISO e IMG. Ecco lo scenario che ho visto dispiegarsi:

  1. Delivery via Email/Chat: L’attaccante invia un file distribuito tramite email, instant messaging (Teams, Slack) o siti web compromessi.
  2. Archive Processing: Quando Windows Shell elabora un archivio creato ad hoc, non riesce a propagare il tag MotW ai file estratti, quindi SmartScreen e Office Protected View considerano il payload come contenuto localmente affidabile.
  3. Silent Execution: Il contenuto dannoso raggiunge gli utenti senza i soliti avvisi di sicurezza o una gestione protettiva, facilitando la consegna del malware basata su phishing e l’esecuzione successiva del payload.

Nel mio team, il primo segnale d’allarme è stato un utente che ha ricevuto uno ZIP da “un collega”, l’ha estratto, e il documento Word al suo interno si è aperto senza la solita Protected View di Office. Questo è il campanello d’allarme di MotW bypass.

Mitigazione Immediata: I Passi che Ho Implementato

Passo 1: Applicare il Patch Critico Immediatamente

Microsoft ha aggiustato CVE-2026-96951 nell’aggiornamento di sicurezza di ottobre 2026. Nel mio ambiente, ho prioritizzato i sistemi che gestiscono contenuti sensibili:

: Ricerca gli aggiornamenti cumulativi di ottobre 2026 per la tua versione Windows
# Ad esempio, per Windows 11 26H1:
Get-WindowsUpdate -Online -Install -Updates "KB5127646"

: Forza il restart in una finestra di manutenzione planificata
$restartTime = (Get-Date).AddHours(2)
Shutdown.exe /r /t 7200 /c "CVE-2026-96951 Critical Patch - Mark of the Web Bypass Fix"

Ho testato il patch in un ambiente di staging per 48 ore prima del deployment in produzione. La chiave è verificare che le tue line-of-business applications funzionino ancora normalmente dopo l’aggiornamento.

Passo 2: Bloccare gli Archivi Non Fidati con GPO

Mentre il patch si diffonde, ho configurato una Criteri di Gruppo per limitare chi può estrarre archivi su sistemi critici:

: Configurazione GPO per limitare l'estrazione di ZIP
# Computer Configuration > Windows Settings > Security Settings > Advanced Audit Policy
# Audit File Share, Detailed File Share, Audit Other Object Access Events

# In alternativa, su Windows 11 Enterprise, usa AppLocker:
New-AppLockerPolicy -RuleType Publisher -User Everyone -RuleCollectionType Exe, Dll, Script, Msi -RuleType Hash -Enforcement Enforced | Out-File "$env:TEMPAppLocker.xml"

: Blocca direttamente l'esecuzione da cartelle TEMP
# Gpo: Computer Configuration > Administrative Templates > System > Run
# Blocca PowerShell da zone non attendibili
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Passo 3: Monitoraggio con Auditing Avanzato

Ho configurato l’Event Viewer per rilevare tentativi di MotW bypass:

: Abilitare Audit per Zone.Identifier ADS
auditpol.exe /set /subcategory:"File System" /success:enable /failure:enable
auditpol.exe /set /subcategory:"Other Object Access Events" /success:enable /failure:enable

: Cercare event ID 4663 (tentativo di accesso a oggetto) e ID 4656 (apertura handle)
# Filtra i log per cercari pattern sospetti di ADS manipulation
Get-EventLog -LogName Security -InstanceId 4663, 4656 -After (Get-Date).AddDays(-1) | `
  Where-Object { $_.Message -like "*Zone.Identifier*" }

Hardening WDAC per Proteggere i Moduli Dinamici

La vera difesa, nella mia opinione, non è reattiva ma proattiva. Con una policy di App Control, il codice si esegue solo se la policy lo consente. Questo copre eseguibili, DLL e driver, più script, installer MSI e PowerShell, che scende in Constrained Language Mode per qualsiasi cosa la policy non si fida.

Creazione di una Policy WDAC di Base

Ho iniziato con il template Microsoft DefaultWindows, personalizzato per il nostro ambiente:

: Generare una policy di base da un sistema di riferimento pulito
New-CIPolicy -Level Publisher -Fallback Hash -FilePath "C:WDACBasePolicy.xml" -UserPE -AllowUnsigned -ScanPath "C:Program Files" -Audit

: Convertire in binario e applicare
ConvertFrom-CIPolicy -XmlFilePath "C:WDACBasePolicy.xml" -BinaryFilePath "C:WDACBasePolicy.cip"
Copy-Item "C:WDACBasePolicy.cip" "C:WindowsSystem32CodeIntegritySIPolicy.p7b"

Dynamic Code Security per .NET e Librerie Caricate Dinamicamente

Nel mio caso, ho molte applicazioni .NET legacy che caricano moduli dinamicamente in runtime. Quando Dynamic Code Security è abilitato, applica le policy WDAC alle applicazioni .NET e alle librerie caricate dinamicamente. Ecco come l’ho configurato:

: Abilitare Dynamic Code Security nella policy WDAC
# Modifica il file XML della policy prima della conversione
[xml]$policy = Get-Content "C:WDACBasePolicy.xml"
$rule = $policy.SiPolicy.Rules.Rule | Where-Object { $_.Id -eq "0B3C2B4D-F15E-4D2F-A7F5-B8C9E1A4D5F6" }
if ($rule) {
    $rule.Option = "19"  # Abilita Dynamic Code Security
    $policy.Save("C:WDACBasePolicy.xml")
}

: Aggiungi un whitelist per le DLL di fiducia caricate dinamicamente
$cert = (Get-AuthenticodeSignature -FilePath "C:PathToTrustedLib.dll").SignerCertificate
$rule = New-CIPolicyRule -Level Publisher -Certificate $cert
Add-CIPolicyRules -PolicyPath "C:WDACBasePolicy.xml" -Rules $rule

Deploy in Audit Mode: La Chiave del Successo

La configurazione consigliata è di deployare WDAC in modalità di audit (registrare le violazioni senza bloccare) usando la policy firmata e affidabile come base, quindi aggiungere regole di editore e percorso per il software critico del business non coperto. Passa alla modalità di enforce dopo aver riveduto il log di audit e affinato la policy.

Nel mio ambiente, ho lasciato la policy in Audit per 2 settimane:

: Monitorare Event ID 3076 (WDAC Audit)
Get-EventLog -LogName "Microsoft-Windows-CodeIntegrity/Operational" -InstanceId 3076 -After (Get-Date).AddHours(-24) | `
  Select-Object TimeGenerated, Message | Format-Table -AutoSize

: Estrarre i binari bloccati e creare whitelist
$blockedFiles = Get-EventLog -LogName "Microsoft-Windows-CodeIntegrity/Operational" -InstanceId 3076 | `
  Select-Object -ExpandProperty Message | `
  Where-Object { $_ -match 'File Name: (.*)' } | `
  ForEach-Object { $matches[1] }

# Aggiungi publisher rules per software legittimo
foreach ($file in $blockedFiles) {
    $cert = (Get-AuthenticodeSignature -FilePath $file).SignerCertificate
    if ($cert) {
        New-CIPolicyRule -Level Publisher -Certificate $cert -FilePath $file
    }
}

Gestione delle Eccezioni con Policy Supplementari

Nel tempo, ho scoperto che una singola policy di base diventa poco gestibile. Una policy di base stabilisce i controlli a livello organizzativo, mentre le policy supplementari aggiungono eccezioni per specifici dipartimenti, applicazioni o casi d’uso senza modificare la base. Più policy supplementari possono essere attive contemporaneamente, semplificando la gestione delle eccezioni.

Ho creato una policy supplementare per il nostro reparto Sviluppo, che ha bisogno di compilatori e debugger non firmati:

: Creare una policy supplementare per Development
New-CIPolicy -Level Hash -FilePath "C:WDACDevPolicy.xml" -ScanPath "C:Program FilesMicrosoft Visual Studio" -UserPE -SupplementalPolicy

: Convertire e mergiare
ConvertFrom-CIPolicy -XmlFilePath "C:WDACDevPolicy.xml" -BinaryFilePath "C:WDACDevPolicy.cip"
Merge-CIPolicy -PolicyPaths "C:WDACBasePolicy.xml", "C:WDACDevPolicy.xml" -OutputFilePath "C:WDACMergedPolicy.xml"

: Deployare tramite Intune o GPO
# Intune: Endpoint Security > App Control
# GPO: Computer Configuration > Administrative Templates > System > Device Guard > Configure Code Integrity Policy

Detection: Come Riconoscere i Tentativi di Sfruttamento

I difensori dovrebbero correlare gli eventi di consegna di file sospetti con l’attività di processo successiva e determinare se il contenuto ottenuto da una fonte esterna si è eseguito senza i controlli normali associati al MotW.

Ho configurato questa ricerca Kusto nel mio SIEM (se usi Microsoft Sentinel):

: Cercare MotW bypass attempts
SecurityEvent
| where EventID in (4688, 4689)  // Process creation/termination
| where ParentImage contains "explorer.exe" or ParentImage contains "winrar.exe"
| where CommandLine contains (".zip", ".iso", ".img")
| join kind=inner (
    SecurityEvent
    | where EventID == 15  // File created (if audit enabled)
    | where TargetFilename !contains "AppData\"
    | where TargetFilename !contains "Temp\"
  ) on Computer
| project TimeGenerated, Computer, ParentImage, CommandLine, TargetFilename

Plan di Incident Response Specifico per CVE-2026-96951

Ho documentato il nostro IR playbook interno per questa minaccia:

  1. Isolamento Rapido: Se un utente ha estratto un file da un archivio potenzialmente sospetto, disconnettilo dalla rete entro 5 minuti.
  2. Verifica dell’Esecuzione: Eseguire una ricerca nei log di processo per verificare se il file è stato effettivamente eseguito.
  3. Malware Scan Completo: Eseguire un scan offline del sistema con Defender offline o un tool EDR dedicato.
  4. Credential Reset: Se l’esecuzione è confermata, resettare le password dell’utente come misura precauzionale.
  5. Threat Hunt Laterale: Verificare i log di accesso di rete per identificare tentativi di movimento laterale.

Ho automatizzato parte di questo in PowerShell per velocità:

: Playbook di IR automatizzato
function Invoke-CVE202696951Response {
    param(
        [string]$ComputerName
    )
    
    # 1. Isolamento di rete
    Set-NetFirewallProfile -Profile Domain, Public -Enabled True
    New-NetFirewallRule -DisplayName "CVE-2026-96951 Isolation" -Direction Outbound -Action Block -Profile Domain
    
    # 2. Cattura log di processo
    $processes = Get-WinEvent -FilterHashtable @{
        LogName = 'Security'
        Id = 4688
        StartTime = (Get-Date).AddHours(-4)
    } -ComputerName $ComputerName
    
    # 3. Ricerca file ZIP/ISO/IMG estratti di recente
    $suspiciousFiles = Invoke-Command -ComputerName $ComputerName -ScriptBlock {
        Get-ChildItem -Path "$env:USERPROFILEDownloads", "$env:TEMP" -Recurse -Include *.zip, *.iso, *.img -File | `
            Where-Object { $_.LastWriteTime -gt (Get-Date).AddHours(-4) }
    }
    
    # 4. Avvia scan offline
    Start-MpWDOScan -ComputerName $ComputerName
    
    # 5. Log per IR team
    Write-Output @{
        ComputerName = $ComputerName
        IsolationTime = Get-Date
        ProcessEvents = $processes.Count
        SuspiciousFiles = $suspiciousFiles
    } | Export-Csv -Path "C:IRCVE-2026-96951-$ComputerName-$(Get-Date -Format 'yyyyMMdd-HHmmss').csv"
}

FAQ

Questo riguarda solo Windows 11?

I prodotti interessati includono Windows 10, più versioni di Windows 11, edizioni di Windows Server e Outlook.com prima della sua correzione lato servizio. Nel mio caso, ho dovuto patchiare anche server legacy con Windows Server 2016 e 2019.

Se applico il patch, sono completamente protetto?

Il patch risolve il vettore specifico di CVE-2026-96951, ma non è una soluzione completa. Le minacce di phishing e malware continuano. Il patch rimuove un bypass noto, non ogni rischio basato su file. Per questo ho aggiunto WDAC in cima al patch.

WDAC bloccherà le mie applicazioni?

Probabile, se non eseguito correttamente. Questo è il motivo per cui sempre inizio in Audit Mode per almeno 1-2 settimane. Ho visto troppe implementazioni WDAC fallire in 24 ore perché nessuno aveva documentato tutte le applicazioni in uso.

Come rilevo se la mia organizzazione è stata compromessa via CVE-2026-96951?

Cerca: (1) File estratti da ZIP/ISO/IMG senza MotW, (2) Processi figli inaspettati da documenti Office aperti, (3) Accessi di rete improvvisi da un client di zona precedentemente dormiente. Ho incluso una query SIEM sopra per automatizzare questo.

Devo disabilitare WinRAR o software di compressione?

No, ma puoi aggiungere regole WDAC per forzare il propagamento del MotW quando WinRAR estrae file. La vulnerabilità è in Windows Shell, non negli estrattori stessi.

Conclusione

CVE-2026-96951 rappresenta una minaccia reale e attiva. Nella mia esperienza, la migliore difesa è un approccio multi-layer: (1) patch critico di ottobre 2026 applicato immediatamente, (2) WDAC in Audit Mode per aumentare la visibilità, (3) Event monitoring per rilevare tentativi di bypass, (4) un IR playbook ben documentato.

Non è solo un patch da installare e dimenticare. È l’occasione per ripensare il tuo approccio al code integrity e all’application control. Se stai ancora usando AppLocker, ora è il momento di pianificare la migrazione a WDAC. Se gestisci infrastrutture critiche, considera di deployare WDAC in enforce mode dopo aver completato l’audit.

Se hai domande sulla configurazione WDAC nel tuo ambiente specifico, o se hai riscontrato problemi di compatibilità durante l’implementazione, lascia un commento qui sotto. Sono sempre disponibile per aiutare i colleghi IT a navigare queste sfide.

Azioni immediate: Applica KB5127646 o l’equivalente per la tua versione Windows entro questa settimana. Configura l’auditing di Zone.Identifier ADS. Avvia una valutazione WDAC nel tuo ambiente di test. Documenta tutte le applicazioni in uso prima di transitare a enforce mode.

Share: