Em 2025-10-23, a SSP Wallet v1.27.0 chegou com a mudança de segurança em tempo de execução mais profunda do ano: o LavaMoat, framework de compartimentalização de JavaScript pioneiro da MetaMask, agora está integrado ao SSP. Cada dependência de terceiros que a carteira carrega fica selada no próprio sandbox, de modo que um pacote comprometido — o risco de cadeia de suprimentos npm que toda carteira moderna enfrenta — não consegue mais ler nem alterar o que outras partes da carteira fazem. A release também aperta a Content Security Policy, esconde uma página de testes de segurança atrás de um gesto easter-egg e traz alguns ganhos de polimento de UI.
Sandboxing em tempo de execução chega ao SSP
O LavaMoat, em 30 segundos: um runtime que pega a árvore de dependências de um app JavaScript, isola cada pacote em seu próprio compartimento e só permite que cada compartimento toque os globais e APIs que seu arquivo de política conceder explicitamente. Por padrão uma dependência de terceiros não pode ler localStorage, não pode chamar fetch, não pode alcançar o keyring, não pode monkey-patchear Object.prototype. Se tentar, o runtime barra.
Essa é uma postura diferente da da maioria dos apps web, onde todo pacote importado roda com a mesma autoridade do app. Dentro do SSP, o código que cuida das chaves privadas, a integração de swap que conversa com APIs de exchanges e os helpers de UI de terceiros costumavam compartilhar um único escopo global. A partir da v1.27.0, não mais.
Por que a compartimentalização importa
A ameaça que a compartimentalização foi projetada para neutralizar é o ataque de cadeia de suprimentos via npm. O padrão já apareceu em campo várias vezes: um atacante toma controle de um pacote popular, publica uma versão maliciosa e surfa a onda de dependências transitivas até cada app que o importa. Para uma carteira, o impacto de um pacote malicioso rodando com autoridade total do app é catastrófico — pode ler material de seed em memória, exfiltrar chaves privadas ou reescrever destinos de transação antes de o usuário assinar.
O LavaMoat não impede o ataque de chegar ao app. Ele remove o impacto. Uma dependência comprometida, mesmo enterrada cinco níveis fundo na árvore, roda dentro de um compartimento que não tem acesso à superfície de assinatura, nem acesso de rede além do que a política permite, nem maneira de ler estado de outro compartimento. Pacote comprometido ≠ carteira comprometida — a equivalência se mantém pela primeira vez na v1.27.0.
Isso complementa, em vez de substituir, as proteções que chegaram antes neste ano. O código-fonte do SSP já foi verificado pela auditoria completa da Halborn, e o binário que você instala já era comprovável contra esse código por meio de builds determinísticos e assinatura GPG. O LavaMoat fecha a brecha do runtime: mesmo que uma dependência fique maliciosa depois que o build é assinado, ela não consegue escalar até o nível da carteira.
Content Security Policy mais forte
Junto com o sandboxing em tempo de execução, a v1.27.0 também aperta a Content Security Policy na camada do navegador. A CSP é o orçamento que a carteira declara para si mesma — de quais origens pode carregar scripts, com quais origens pode conversar, quais comportamentos inline são permitidos. Uma CSP mais estrita reduz o espaço em que um atacante pode operar mesmo antes de o LavaMoat aplicar a política dele dentro da página.
O efeito combinado são duas camadas de contenção: o navegador se recusa a carregar recursos fora da política declarada, e qualquer JavaScript que rode é então compartimentalizado pelo LavaMoat. Cada camada cobre um modo de falha diferente, que é justamente o ponto da defesa em profundidade.
Uma página de testes de segurança escondida
Para verificação interna — e este é o único recurso da release que vem com um easter egg deliberado — a v1.27.0 inclui uma página de testes de segurança não exposta na navegação normal. Clicar várias vezes seguidas no número da versão a revela. A página roda uma bateria de checagens contra a política do LavaMoat e as regras de CSP, para que revisores e red-teamers possam confirmar que as proteções estão ativas no build que estão inspecionando sem precisar instrumentar a carteira eles mesmos. Não é para usuários do dia a dia, e não há nada explorável por trás dela; é só uma forma mais conveniente de verificar o que a v1.27.0 promete.
Defesa em profundidade: auditado + reproduzível + em sandbox
A parte interessante da v1.27.0 não é o LavaMoat isolado; é como as três peças se compõem. Código-fonte auditado (Halborn), binário reproduzível que qualquer um pode verificar contra essa fonte (builds determinísticos) e um runtime que contém qualquer dependência comprometida. Juntas mudam a pergunta de "confio em toda a árvore de dependências do SSP?" para "confio no núcleo auditado?" — uma superfície de confiança bem menor e mais respondível.
Polimento de UI vem por cima: os logos das exchanges no swap agora renderizam corretamente, e a paleta da marca foi alinhada nas telas. A compartimentalização é o que muda como a carteira sobrevive.