< Назад к новостям

LavaMoat приходит в SSP — песочница времени исполнения для мультисига

·4 мин. чтения·Автор: SSP Editorial Team
Знак безопасности с иконками замка, щита с галочкой, чипа и молнии над заголовком «LavaMoat приходит в SSP».

2025-10-23 SSP Wallet v1.27.0 приземлился с самым глубоким изменением безопасности времени исполнения за год: LavaMoat, фреймворк компартментализации JavaScript, ставший пионером благодаря MetaMask, теперь интегрирован в SSP. Каждая сторонняя зависимость, которую загружает кошелёк, запечатана в собственной песочнице, так что скомпрометированный пакет — риск цепочки поставок npm, с которым сталкивается любой современный кошелёк, — больше не может читать или менять то, что делают другие части кошелька. Релиз также ужесточает Content Security Policy, прячет страницу проверки безопасности за пасхальным жестом и приносит горсть улучшений UI.

В SSP приходит изоляция времени исполнения

LavaMoat за 30 секунд: рантайм, который берёт дерево зависимостей JavaScript-приложения, изолирует каждый пакет в собственном отсеке и позволяет каждому отсеку касаться только тех глобалов и API, которые ему явно предоставлены в файле политики. По умолчанию сторонняя зависимость не может читать localStorage, не может вызвать fetch, не может дотянуться до keyring, не может подменить Object.prototype. Если попытается — рантайм её останавливает.

Это иная позиция безопасности, чем у большинства веб-приложений, где каждый импортированный пакет выполняется с теми же полномочиями, что и само приложение. Внутри SSP код, работающий с приватными ключами, интеграция swap, общающаяся с API бирж, и сторонние UI-хелперы прежде делили один глобальный scope. С v1.27.0 — больше нет.

Почему компартментализация важна

Угроза, которую призвана нейтрализовать компартментализация, — это атака на цепочку поставок npm. Этот сценарий неоднократно встречался в реальности: атакующий захватывает контроль над популярным пакетом, выпускает вредоносную версию и едет на волне транзитивных зависимостей в каждое приложение, которое его импортирует. Для кошелька последствие вредоносного пакета, запущенного с полными полномочиями приложения, катастрофично — он может читать материал seed в памяти, экфильтровать приватные ключи или переписывать адреса транзакций до того, как пользователь подпишет.

LavaMoat не мешает атаке достичь приложения. Он убирает её эффект. Скомпрометированная зависимость, даже зарытая на пять уровней вглубь дерева, выполняется внутри отсека, у которого нет доступа к поверхности подписания, нет сетевого доступа сверх того, что разрешает политика, и нет способа читать состояние другого отсека. Скомпрометированный пакет ≠ скомпрометированный кошелёк — это равенство впервые держится в v1.27.0.

Это дополняет, а не заменяет защиты, которые приземлились ранее в году. Исходный код SSP уже был верифицирован полным аудитом Halborn, а бинарь, который вы устанавливаете, уже был проверяем против этого исходника через детерминированные сборки и подписи GPG. LavaMoat закрывает зазор времени исполнения: даже если зависимость станет вредоносной после подписания сборки, она не сможет повысить себя до уровня кошелька.

Более строгая Content Security Policy

Вместе с изоляцией времени исполнения v1.27.0 также ужесточает Content Security Policy на уровне браузера. CSP — это бюджет, который кошелёк декларирует для самого себя: с каких источников он вправе загружать скрипты, с какими источниками он вправе разговаривать, какое inline-поведение разрешено. Более строгая CSP сужает пространство, в котором атакующий может действовать, ещё до того, как LavaMoat применит свою политику внутри страницы.

Совокупный эффект — два слоя удержания: браузер отказывается загружать ресурсы вне объявленной политики, а любой JavaScript, который всё-таки выполняется, затем компартментализуется LavaMoat. Каждый слой закрывает свой режим отказа — в этом и есть смысл защиты в глубину.

Скрытая страница проверки безопасности

Для внутренней верификации — и это единственная функция в релизе, поставляемая с намеренным пасхальным яйцом — v1.27.0 включает страницу проверки безопасности, не выведенную в обычную навигацию. Если несколько раз быстро кликнуть по номеру версии, она открывается. Страница прогоняет батарею проверок против политики LavaMoat и правил CSP, чтобы ревьюверы и red-team могли подтвердить, что защиты активны в той сборке, которую они инспектируют, без того чтобы самостоятельно инструментировать кошелёк. Она не предназначена для повседневных пользователей, и за ней нет ничего эксплуатируемого; это просто более удобный способ убедиться в том, что обещает v1.27.0.

Защита в глубину: аудит + воспроизводимость + песочница

Интересное в v1.27.0 — не LavaMoat в изоляции, а то, как соединяются три элемента. Аудированный исходный код (Halborn), воспроизводимый бинарь, который любой может сверить с этим исходником (детерминированные сборки), и рантайм, удерживающий любую скомпрометированную зависимость. Вместе они меняют вопрос с «доверяю ли я всему дереву зависимостей SSP?» на «доверяю ли я аудированному ядру?» — гораздо меньшая и более ответимая поверхность доверия.

UI-полировка идёт сверху: логотипы бирж в swap теперь отображаются корректно, а палитра бренда выровнена по экранам. Компартментализация — это то, что меняет, как кошелёк выживает.

Поделиться статьёй

Похожие статьи