Contrabbando HTML: HTML Smuggling (T1027.006)
La tecnica T1027.006 — HTML Smuggling rappresenta una delle metodologie di evasione più eleganti e diffuse nel panorama offensivo contemporaneo. Classificata sotto la tattica TA0005 (Defense Evasion), sfrutta caratteristiche legittime delle specifiche HTML5 — in particolare i JavaScript Blob, le Data URL e l'attributo download — per trasportare payload attraverso proxy, gateway di posta e web content filter che ispezionano il traffico basandosi sui MIME type dichiarati.
Il meccanismo è concettualmente semplice ma micidiale: un file HTML apparentemente innocuo, con MIME text/html, contiene al suo interno una rappresentazione codificata (spesso base64 o array di byte) del payload reale. Quando il browser della vittima renderizza la pagina, il codice JavaScript ricostruisce localmente il file binario tramite l'API Blob, invoca URL.createObjectURL e forza il salvataggio su disco tramite msSaveOrOpenBlob o un tag anchor con attributo download. Il payload non transita mai come binario sulla rete: viene assemblato client-side, aggirando qualsiasi ispezione perimetrale.
L'impatto operativo è significativo. Gruppi come APT29 hanno adottato questa tecnica per veicolare ISO cifrati attraverso allegati HTML in campagne di spear phishing, mentre famiglie malware come QakBot e loader dedicati come EnvyScout ne fanno un pilastro della fase di Initial Access. La tecnica si colloca a cavallo tra Initial Access e Defense Evasion nella kill chain, precedendo di norma tecniche di User Execution e Deobfuscate/Decode Files.
Per simulare HTML Smuggling in un contesto red team autorizzato, la prima scelta ricade su SharpHound-independent PoC basati su codice JavaScript custom. Il framework di riferimento pubblico più utilizzato è HTML Smuggler di Outflank (open source, disponibile sul repository GitHub del team), che genera pagine HTML con payload embedded via base64 e ricostruzione Blob lato client.
Un payload minimale funzionante prevede la lettura del file target, la conversione in array di byte, l'incapsulamento in un oggetto Blob con MIME application/octet-stream e il trigger del download. In JavaScript la sequenza tipica è:
const blob = new Blob([byteArray], {type: 'application/octet-stream'});
const url = URL.createObjectURL(blob);
seguito dalla creazione dinamica di un elemento con attributo download impostato sul nome file desiderato e invocazione programmatica di click(). Su Internet Explorer legacy o browser Edge in modalità compatibilità si usa navigator.msSaveOrOpenBlob(blob, filename).
Per laboratorio, la catena d'attacco realistica prevede:
- Generazione del payload finale (per esempio un loader in C# compilato con Nim o Go per ridurre le firme AV)
- Compressione in archivio ZIP o incapsulamento in ISO/IMG per bypassare Mark-of-the-Web (tecnica MOTW bypass sfruttata da APT29)
- Encoding base64 e integrazione nel template HTML
- Consegna via allegato email o link a pagina hostata
Strumenti utili in fase di sviluppo:
- HTML Smuggler di Outflank (open source) — generatore di template
- Nimcrypt2 (open source) — packer per payload finale
- CyberChef (open source, self-hostable) — per manipolazione base64 e verifica encoding
- Burp Suite Community (freemium) — per validare il transito attraverso proxy di test
Durante l'esecuzione lab, verificare che il payload venga effettivamente scritto in %USERPROFILE%\Downloads con la corretta Zone.Identifier ADS. Un test rilevante è confrontare il comportamento con e senza Attack Surface Reduction rules attive (in particolare Block JavaScript or VBScript from launching downloaded executable content, regola GUID D3E037E1-3EB8-44C8-A917-57927947596D).
Per aumentare il realismo dell'esercizio, combinare la tecnica con T1204.002 (User Execution: Malicious File) obbligando l'utente ad aprire l'archivio contenitore, e con T1140 (Deobfuscate/Decode Files) per la fase di decoding client-side. Documentare sempre nel report la percentuale di detection ottenuta su gateway mail e EDR di riferimento del cliente.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo