← Torna ai Quaderni
Quaderno storico 4 min di lettura

Redirect tramite CSS: esecuzione e reindirizzamento senza tag script

L'analisi dell'exploit del marzo 2009: sfruttare XML Binding Language (XBL) in Firefox e HTML Components (HTC) in Internet Explorer per eseguire codice tramite fogli di stile.

Autore: Vincenzo Lombino
Data:
#CSSRedirection#XBL#HTC#SecurityExploits

1. Eseguire codice senza tag script: l'evasione via CSS

Nel marzo 2009 pubblicai una tecnica non convenzionale per eseguire un redirect automatico di pagina senza inserire alcun tag <script> visibile all'interno del markup HTML.

Il quesito dell'epoca era semplice: è possibile far eseguire codice JavaScript a un browser agendo esclusivamente tramite le proprietà di un foglio di stile?

La risposta era affermativa, e si basava su due tecnologie proprietarie supportate dai due principali browser dell'epoca (Mozilla Firefox e Microsoft Internet Explorer), che insieme coprivano la quasi totalità degli utenti web mondiali.

2. L'implementazione tecnica: il codice originale

L'architettura del redirect si articolava in tre file distinti:

Nel file principale index.html, la pagina dichiarava un blocco di stile apparentemente innocuo:

html
<style>
body {
  behavior: url("./redirect.htc");
  -moz-binding: url('./redirect.xml#redirect');
}
</style>

Per i visitatori con Mozilla Firefox, la proprietà proprietaria -moz-binding invocava il file redirect.xml (scritto in XBL, XML Binding Language), che agganciava un costruttore JavaScript all'evento di caricamento:

xml
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">
  <binding id="redirect" applyauthorstyles="false">
    <implementation>
      <constructor>
        window.addEventListener('load', function() {
          location.href = 'https://kerouac3001.com';
        }, false);
      </constructor>
    </implementation>
  </binding>
</bindings>

Per gli utenti con Internet Explorer, la proprietà behavior richiamava il file redirect.htc (HTML Component), eseguendo il reindirizzamento al verificarsi dell'evento di sistema ondocumentready:

html
<attach event="ondocumentready" handler="redirect" />
<script language="JScript">
function redirect() {
  window.document.location.href = 'https://kerouac3001.com';
}
</script>

3. Perché ingannava i crawler e come è stata blindata la sicurezza

Questa tecnica risultava particolarmente efficace nell'elusione dei controlli antispam:

  • Gli spider dell'epoca cercavano redirect nei meta tag (<meta http-equiv="refresh">), nei blocchi <script> convenzionali o negli header HTTP 301/302.
  • I fogli di stile venivano considerati mere istruzioni di presentazione visiva: quasi nessun crawler scaricava ed eseguiva i file ausiliari XML/HTC referenziati all'interno delle proprietà CSS.

Nel web moderno, entrambe le tecnologie sono state totalmente eradicate: XBL è stato deprecato e rimosso dal motore Gecko di Mozilla, e HTC è scomparso con il pensionamento di Internet Explorer. La sicurezza moderna è presidiata da rigide policy Content Security Policy (CSP), che impediscono l'esecuzione di script non autorizzati e bloccano l'associazione di comportamenti esterni ai selettori CSS.