Il 2025-10-23, SSP Wallet v1.27.0 è atterrato con il cambiamento di sicurezza a runtime più profondo dell'anno: LavaMoat, il framework di compartimentazione JavaScript pioniere di MetaMask, è ora integrato in SSP. Ogni dipendenza di terze parti che il wallet carica è sigillata nel proprio sandbox, così un pacchetto compromesso — il rischio di supply chain npm che ogni wallet moderno affronta — non può più leggere o alterare ciò che fanno le altre parti del wallet. La release stringe anche la Content Security Policy, nasconde una pagina di test di sicurezza dietro un gesto easter-egg, e porta una manciata di rifiniture UI.
Il sandboxing a runtime arriva in SSP
LavaMoat, in 30 secondi: un runtime che prende l'albero delle dipendenze di un'app JavaScript, isola ogni pacchetto in un proprio compartimento, e lascia che ciascun compartimento tocchi solo i global e le API che il file di policy gli concede esplicitamente. Per default una dipendenza di terze parti non può leggere localStorage, non può chiamare fetch, non può raggiungere il keyring, non può fare monkey-patch di Object.prototype. Se ci prova, il runtime la blocca.
È una postura diversa da quella della maggior parte delle web app, dove ogni pacchetto importato gira con la stessa autorità dell'app stessa. Dentro SSP, il codice che gestisce le chiavi private, l'integrazione swap che dialoga con le API degli exchange e gli helper UI di terze parti condividevano un unico scope globale. Dalla v1.27.0, non più.
Perché la compartimentazione conta
La minaccia che la compartimentazione è progettata per neutralizzare è l'attacco alla supply chain npm. Il pattern si è visto sul campo più volte: un aggressore prende il controllo di un pacchetto popolare, pubblica una versione malevola, e cavalca l'onda delle dipendenze transitive fino a ogni app che lo importa. Per un wallet, l'impatto di un pacchetto malevolo che gira con l'autorità completa dell'app è catastrofico — può leggere il seed in memoria, esfiltrare chiavi private, o riscrivere i destinatari delle transazioni prima che l'utente firmi.
LavaMoat non impedisce all'attacco di raggiungere l'app. Rimuove l'impatto. Una dipendenza compromessa, anche sepolta cinque livelli in profondità nell'albero, gira dentro un compartimento che non ha accesso alla superficie di firma, né accesso di rete oltre ciò che la policy permette, né modo di leggere lo stato di un altro compartimento. Pacchetto compromesso ≠ wallet compromesso — l'equivalenza tiene per la prima volta nella v1.27.0.
Questo completa, anziché sostituire, le protezioni atterrate prima quest'anno. Il codice sorgente di SSP è già stato verificato dall'audit completo di Halborn, e il binario che installi era già dimostrabile contro quel sorgente tramite build deterministiche e firma GPG. LavaMoat chiude il varco a runtime: anche se una dipendenza diventa malevola dopo che la build è firmata, non può scalare a un accesso a livello di wallet.
Una Content Security Policy più forte
Insieme al sandboxing a runtime, la v1.27.0 stringe anche la Content Security Policy a livello browser. La CSP è il budget che il wallet dichiara per sé stesso — da quali origini può caricare script, con quali origini può parlare, quali comportamenti inline sono permessi. Una CSP più stretta riduce lo spazio in cui un aggressore può operare anche prima che LavaMoat applichi la propria policy dentro la pagina.
L'effetto combinato sono due livelli di contenimento: il browser rifiuta di caricare risorse fuori dalla policy dichiarata, e qualsiasi JavaScript che gira viene poi compartimentato da LavaMoat. Ogni livello copre una modalità di guasto diversa, che è proprio il senso della difesa in profondità.
Una pagina di test di sicurezza nascosta
Per la verifica interna — ed è l'unica funzione della release che arriva con un easter egg deliberato — la v1.27.0 include una pagina di test di sicurezza non esposta nella navigazione normale. Cliccare più volte rapidamente sul numero di versione la rivela. La pagina esegue una batteria di controlli contro la policy di LavaMoat e le regole CSP, così che revisori e red-teamer possano confermare che le protezioni sono attive nella build che ispezionano senza dover strumentare il wallet loro stessi. Non è pensata per gli utenti quotidiani, e non c'è nulla di sfruttabile dietro; è semplicemente un modo più comodo per verificare ciò che v1.27.0 promette.
Difesa in profondità: audit + riproducibile + sandboxato
La parte interessante della v1.27.0 non è LavaMoat in isolamento; è come le tre pezzi si compongono. Codice sorgente sotto audit (Halborn), binario riproducibile che chiunque può verificare contro quel sorgente (build deterministiche), e un runtime che contiene ogni singola dipendenza compromessa. Insieme cambiano la domanda da «mi fido dell'intero albero di dipendenze di SSP?» a «mi fido del nucleo sottoposto ad audit?» — una superficie di fiducia molto più piccola e rispondibile.
Le rifiniture UI arrivano sopra: i loghi degli exchange dello swap ora vengono renderizzati correttamente, e la palette del brand è stata allineata su tutte le schermate. La compartimentazione è ciò che cambia il modo in cui il wallet sopravvive.