Релейер Solana от Risk Labs потерял примерно 4,5 миллиона долларов 17 июля 2026 года, когда злоумышленник воспользовался отсутствующей проверкой 8-байтового дискриминатора в коде обработки ончейн-событий во внешнем (offchain) режиме, чтобы подделать 1 627 депозитных событий, которые так и не произошли в блокчейне. Уязвимость позволила мошенническим запросам на вывод средств на сумму в номинале примерно 41,7 миллиона долларов, из которых 581 был исполнен до того, как команда отключила маршрутизацию через Solana и развернула исправление в течение пяти часов после обнаружения. Средства пользователей не были потеряны или под угрозой, потому что Across работает как протокол intents, где релейеры продвигают собственный капитал, а не используют общий пользовательский эскроу, удерживая весь финансовый эффект в операционных резервах Risk Labs.
Отсутствующая проверка дискриминатора позволила поддельные депозитные события
Уязвимость находилась в компоненте SvmCpiEventsClient релейера Risk Labs: он принимал любое внутреннее (inner) действие, адресованное контракту SpokePool через PDA event_authority, как подлинное событие, не проверяя 8-байтовый Anchor event discriminator. Злоумышленник развернул обёрточную (wrapper) программу, которая вызывала безопасную read-only вспомогательную функцию SpokePool — get_unsafe_deposit_id — и дописывала к ней поддельные полезные нагрузки FundsDeposited. Со стороны релейера это выглядело как легитимные депозитные события, хотя в блокчейне не происходило движения средств, не менялись балансы и не трогались контракты. Risk Labs уточнила, что get_unsafe_deposit_id не был самой уязвимостью, а лишь служил средством, которым злоумышленник воспользовался; первопричина — отсутствующая проверка дискриминатора в кодовой базе релейера.
Злоумышленник отправил 1 627 поддельных депозитов в 18 цепочек
В период с 05:07 до 06:14 UTC 17 июля злоумышленник отправил 1 627 поддельных депозитов из 1 627 одноразовых кошельков, распределив их по 18 целевым сетям с номиналом примерно 41,7 миллиона долларов, который консолидировался в один EVM-адрес получателя. Релейер Risk Labs исполнил 581 из этих мошеннических запросов, выплатив примерно 4,5 миллиона долларов собственных средств, прежде чем команда отключила Solana как цепочку-источник. Остальные примерно 37 миллионов долларов в поддельных депозитах обесценились, когда релейер перестал исполнять их. Ни один смарт-контракт не был скомпрометирован; программы Solana и все EVM-контракты в течение инцидента вели себя ровно так, как было предусмотрено.
Дизайн протокола intents предотвратил потерю средств пользователей
Ни в какой момент средства пользователей не были потеряны. Across работает как протокол intents: пользователи вносят активы в эскроу-контракт в цепочке-источнике, а независимые релейеры продвигают собственный капитал, чтобы выполнять переводы в цепочке назначения. Протокол возмещает релейерам средства только после отдельного процесса расчётов, который подтверждает каждый депозит, который релейер исполнил, поэтому поддельные депозиты не касались пользовательского эскроу. Каждый реальный депозит пользователя либо был завершён, либо полностью возвращён в тот же день. Risk Labs понёс валовую выплату примерно 4,5 миллиона долларов напрямую; при наличии примерно 500 000 долларов средств злоумышленника, застрявших внутри протокола, чистые потери составляют менее 4 миллионов долларов и продолжают сокращаться по мере продвижения усилий по восстановлению.
Risk Labs развернул исправление в течение пяти часов после обнаружения
Первый поддельный депозит был отправлен в 05:07 UTC 17 июля; поток поддельных депозитов закончился в 06:14 UTC, а первые адреса злоумышленника были внесены в чёрный список в 06:16 UTC. Solana была отключена как цепочка-источник и цепочка назначения в API в 08:23 UTC, Solana SpokePool был приостановлен в блокчейне в 08:35 UTC, и было выпущено первое публичное заявление в 08:36 UTC. Исправление первопричины было объединено в 09:37 UTC и задеплоено во всей инфраструктуре Risk Labs в 10:26 UTC — примерно через пять часов после обнаружения. Депозиты Solana были повторно включены через маршрутизацию CCTP в 17:05 UTC, восстановив полный сервис Solana примерно за 12 часов. Все остальные операции протокола оставались без изменений на протяжении всего инцидента.
Логика парсинга событий Solana прошла повторный аудит
Поток ордеров в Solana теперь маршрутизируется исключительно через fallback CCTP routing, который Risk Labs заявляет, что покрывает все основные цепочки. Маршрутизация intents в Solana и из Solana остаётся отключённой, пока команда повторно аудитит логику внешнего (offchain) парсинга событий Solana, чтобы подтвердить, что этот класс уязвимостей полностью закрыт, а модель безопасности вокруг обработки событий стандартизирована по всему стеку. Risk Labs работает с SEAL 911, которая предоставила почти мгновенную поддержку после сообщения об инциденте, и с правоохранительными органами США; адреса злоумышленника отмечены на биржах и в off-ramps. Процесс buyout токена ACX остаётся полностью неизменным и продолжается по плану.
FAQ
Какие-либо средства пользователей были потеряны в атаке на релейер Across в Solana?
Нет, ни в какой момент средства пользователей не были потеряны или под угрозой. Все реальные переводы были завершены или полностью возвращены 17 июля 2026 года.
Какова была техническая причина уязвимости безопасности в релейере Risk Labs?
Уязвимость была вызвана отсутствием проверки 8-байтового Anchor event discriminator во внешнем (offchain) коде релейера. Это позволило злоумышленнику подделывать депозитные события, которые релейер воспринимал как реальные, даже несмотря на то, что в блокчейне средства не двигались.
Как Risk Labs отреагировал на атаку с подделкой на своём релейере Solana?
Risk Labs отключил Solana как цепочку-источник, приостановил Solana SpokePool в блокчейне, развернул исправление первопричины в течение примерно пяти часов после обнаружения и полностью восстановил сервис Solana примерно за 12 часов, используя fallback CCTP routing.