An Analysis of Modern Web Security Vulnerabilities Inside WebAssembly Applications

Questo studio dimostra come le vulnerabilità binarie nei moduli WebAssembly possano compromettere i meccanismi di sicurezza delle applicazioni web, facilitando attacchi come SQL Injection e XS-Leaks, e propone strategie difensive per mitigare tali rischi.

Lorenzo Corrias, Lorenzo Pisu, Davide Maiorca, Giorgio Giacinto

Pubblicato Wed, 11 Ma
📖 6 min di lettura🧠 Approfondimento

Each language version is independently generated for its own context, not a direct translation.

Immagina che il mondo dei siti web sia come una grande città. Per anni, tutti gli edifici (le applicazioni web) sono stati costruiti con un unico tipo di mattoni: JavaScript. È un materiale flessibile, facile da usare, ma a volte un po' lento per costruire grattacieli complessi.

Poi è arrivato un nuovo materiale da costruzione, chiamato WebAssembly (WASM). È come un mattone di acciaio pre-confezionato: incredibilmente veloce, robusto e permette di costruire cose che prima sembravano impossibili (come Google Earth o Figma direttamente nel browser).

Tuttavia, c'è un problema. Questi "mattoni di acciaio" sono stati forgiati in officine molto vecchie e pericolose (linguaggi come il C), dove gli operai a volte commettono errori grossolani: lasciano buchi nelle fondamenta, dimenticano di chiudere le porte o confondono i piani.

Questo articolo è un avviso di sicurezza che ci dice: "Attenzione! Anche se il vostro edificio sembra solido e veloce grazie a questi nuovi mattoni, se dentro ci sono questi errori di costruzione, un ladro può entrare e fare danni terribili, non solo rompendo il mattone, ma distruggendo l'intero quartiere."

Ecco come funziona, spiegato con analogie semplici:

1. Il Ladro e la Cassaforte (Le Vulnerabilità)

Immagina che il tuo sito web abbia una cassaforte (il database) e un sistema di allarme. Normalmente, JavaScript è molto attento e controlla tutto. Ma il WebAssembly è come un sotto-fornitore che lavora nella cantina. Se il sotto-fornitore è disattento, può creare dei buchi.

Gli autori del paper hanno trovato tre modi principali in cui questi buchi vengono creati:

  • Il Muro che crolla (Buffer Overflow): Immagina di dover scrivere una nota su un foglietto di 10 righe. Se scrivi 50 righe, il testo in eccesso "esplode" fuori dal foglio e cancella o modifica ciò che c'è scritto sul muro accanto. Nel mondo WebAssembly, questo significa che un attaccante può scrivere dati dove non dovrebbe, modificando le istruzioni del programma.
  • La Chiave Rubata (Use After Free): Immagina di aver preso in prestito un'auto, la restituisce al parcheggio, ma il custode non la toglie dal registro. Qualcuno prende un'altra auto, la parcheggia nello stesso posto, e il custode pensa che sia la tua. Se tu provi a usare la chiave della tua "vecchia" auto, apri quella nuova. Nel codice, questo permette di prendere il controllo di parti di memoria che dovrebbero essere state cancellate.
  • Il Conto alla Rovescia (Integer Overflow): È come un contachilometri di un'auto vecchia che, arrivato a 99999, torna a 00000. Se un sistema di sicurezza dice "non entrare se il numero è 0", un ladro può ingannarlo facendogli credere che il numero sia enorme, ma che in realtà sia tornato a zero per un errore di calcolo.

2. Il Danno Collaterale (Come questi errori attaccano il sito)

Il punto geniale (e spaventoso) della ricerca è che questi errori "di cantina" non restano lì. Possono essere usati per attaccare la parte pubblica del negozio.

Ecco tre scenari reali descritti nel paper:

  • L'Iniezione SQL (Il Falso Ordine):

    • La scena: Il tuo sito chiede al database: "Dammi i dati del cliente X".
    • L'attacco: Grazie al "muro che crolla" (Buffer Overflow), il ladro modifica la richiesta mentre è ancora nella cantina. Invece di chiedere "Dati di Mario", la richiesta diventa "Cancella tutti i dati".
    • Il risultato: Anche se il database è protetto, l'ordine arriva corrotto. È come se un ladro cambiasse l'ordine di un pacco prima che il corriere lo consegni.
  • L'Iniezione di Template (Il Falso Messaggio):

    • La scena: Il WebAssembly genera un messaggio sicuro (un "nonce", come un codice di sicurezza) che il sito web mostra all'utente.
    • L'attacco: Il ladro usa la "chiave rubata" per scrivere dentro quel codice di sicurezza un comando segreto. Quando il sito web legge quel codice, invece di mostrarlo, esegue il comando del ladro.
    • Il risultato: Il sito web pensa che il messaggio sia sicuro, ma in realtà sta eseguendo codice maligno. È come se il postino consegnasse una lettera che, una volta aperta, fa esplodere la casa.
  • Le XS-Leaks (L'Orecchio che Ascolta):

    • La scena: Il sito web ha dei segreti (come la password di un utente) che non dovrebbero essere visibili.
    • L'attacco: Il ladro non riesce a leggere direttamente il segreto. Ma usa un trucco: fa fare al WebAssembly un calcolo complicatissimo (come cercare un ago in un pagliaio) che richiede molto tempo solo se il segreto è corretto.
    • Il risultato: Il ladro misura quanto tempo impiega il sito a rispondere. Se risponde lentamente, capisce: "Aha! Il segreto inizia con la lettera 'A'". Ripetendo questo gioco, ricostruisce l'intera password solo misurando i tempi, senza mai vedere i dati. È come indovinare la combinazione di una cassaforte ascoltando il ticchettio della serratura.

3. Cosa possiamo fare? (Le Soluzioni)

Il paper non si limita a spaventare, ma dà consigli pratici per i costruttori (gli sviluppatori):

  1. Non fidarsi ciecamente: Anche se il WebAssembly viene da "fuori", non trattarlo come un amico. Controlla tutto ciò che entra ed esce, come un doganiere severo.
  2. Usa le cinture di sicurezza: Quando si compila il codice (trasformandolo in WebAssembly), bisogna attivare tutti i sistemi di sicurezza moderni (come i "canari" che avvisano se qualcuno tocca le fondamenta).
  3. Meno porte, meno finestre: Non esporre al mondo tutte le funzioni del WebAssembly. Se non serve, chiudile. Meno porte ci sono, meno facile è per il ladro entrare.
  4. Verifica i numeri: Controlla attentamente che i numeri non facciano "salti" strani (come il contachilometri che torna a zero).

In sintesi

Questo studio ci dice che WebAssembly è potente, ma non è magico. Se portiamo dentro i nostri siti web codice vecchio e pericoloso senza proteggerlo, stiamo aprendo la porta a ladri che possono fare danni enormi, non solo rompendo il codice, ma rubando dati, cancellando database o spiando gli utenti.

La soluzione? Trattare questi nuovi "mattoni di acciaio" con la stessa cautela e le stesse protezioni che useremmo per un edificio storico pieno di crepe: ispezionarli, rinforzarli e non fidarsi mai ciecamente di ciò che dicono.