Перенаправление вознаграждений в MetaMask показывает, кто контролирует выплаты за стейкинг Ethereum
Ключевые выводы
- •Злоумышленник изменил настройки получателя комиссий для части валидаторов MetaMask Staking, при этом учётные данные вывода и застейканные средства остались защищёнными.
- •MetaMask завершила предохранительные выходы всех затронутых валидаторов, но некоторые клиенты столкнулись с задержками вывода и неоценёнными потерянными вознаграждениями.
- •MetaMask не сообщила, сколько валидаторов затронуто, как был получен доступ и будет ли клиентам выплачена компенсация.
- •Этот риск широко применим к стороннему стейкингу, поскольку операторы контролируют конфигурации получателя комиссий отдельно от адресов вывода.
- •Действующая политика Lido направляет вознаграждения уровня исполнения валидаторов в её Rewards Vault, а предлагаемые изменения ePBS гарантируют суммы платежей, но не защищают адрес получателя независимо.

MetaMask подтвердила, что злоумышленник ненадолго перенаправил вознаграждения уровня исполнения отдельных валидаторов Ethereum, использующих её сервис стейкинга, выведя около 0,385 ETH до того, как изменение было обнаружено и отменено в тот же день. Подробности изложены в обновлении об инциденте от 5 ноября, последней записи по инциденту в области безопасности, который компания впервые выявила 28 сентября. Хотя перенаправленная сумма была небольшой, эпизод подчеркивает часто упускаемую из виду особенность дизайна Ethereum: различие между тем, куда в итоге попадает застейканный ETH валидатора, и куда направляется его текущий доход в виде вознаграждений.
Что MetaMask раскрыла на данный момент
Согласно обновлению, злоумышленник получил несанкционированный доступ к части инфраструктуры, стоящей за MetaMask Staking, где централизованно хранились адреса, собирающие вознаграждения уровня исполнения валидаторов. Злоумышленник изменил эти адреса для ряда валидаторов. MetaMask сообщает, что обнаружила и исправила изменение в тот же день, после того как около 0,385 ETH вознаграждений было перенаправлено. Компания не раскрыла, сколько валидаторов затронуто и как злоумышленник получил доступ.
Сторона вывода средств осталась защищённой. MetaMask Staking не хранит ключи вывода для застейканного ETH клиентов, и компания заявляет, что не нашла свидетельств компрометации застейканного капитала, ключей вывода или кошельков MetaMask. Обычным пользователям кошелька MetaMask не нужно предпринимать никаких действий.
0,385 ETH — это не полная стоимость инцидента. MetaMask в качестве предосторожности инициировала выход каждого затронутого валидатора, и все эти выходы уже завершены. Некоторые клиенты столкнулись с временными задержками вывода, и компания признаёт, что вознаграждения могли быть упущены, пока валидаторы выходили или ожидали повторного стейкинга. MetaMask не оценила эти потери и не сообщила, будут ли перенаправленные вознаграждения компенсированы, указав лишь, что работает напрямую с затронутыми клиентами и партнёрами.
Само перенаправление вознаграждений упоминается только в записи от 5 ноября. Уведомления MetaMask от 30 сентября и 1 октября описывали инцидент и предохранительные выходы, указывая, что на тот момент не было признаков затрагивания кошельков или средств клиентов. Число затронутых валидаторов, точка проникновения злоумышленника и вопрос компенсации остаются открытыми пунктами, за которыми стоит следить в будущих обновлениях MetaMask.
Почему застейканные средства уцелели, а доход — нет
Каждый валидатор Ethereum привязан к двум адресам, которые задаются в разных местах. Руководство Ethereum по выводу средств рассматривает учётные данные вывода и получателя комиссий как отдельные настройки, даже если обе могут указывать на один и тот же кошелёк.
Учётные данные вывода регистрируются в beacon chain. После того как они указывают на адрес уровня исполнения, этот адрес нельзя изменить, и именно туда поступает ETH валидатора при выходе. Ни один сервер оператора не может его перенаправить.
Получатель комиссий работает иначе. Это программная настройка, задаваемая тем, кто управляет валидатором. В некастодиальном сервисе это оператор, который также хранит ключи, которыми подписывает валидатор. Эта настройка сообщает сети, куда направлять доход уровня исполнения каждый раз, когда валидатор предлагает блок: приоритетные комиссии за транзакции и платежи от конструкторов блоков. Базовая комиссия, напротив, сжигается и никогда не доходит до валидатора. Оператор может обновить получателя комиссий в любой момент без ключа вывода стейкера. Именно эту настройку MetaMask хранила централизованно — и именно её изменил злоумышленник.
То же разделение объясняет, почему потери остались небольшими. Вознаграждения уровня консенсуса либо остаются в балансе валидатора, либо автоматически переводятся на адрес вывода, поэтому изменённая настройка их не затронула. Доход уровня исполнения поступает только когда валидатор предлагает блок, что для отдельного валидатора происходит нечасто, а MetaMask устранила изменение в течение суток. Лишь предложения, сделанные в этом окне, заплатили не по тому адресу.
Этот же риск присутствует в пуловом стейкинге
Ничто в этом риске не уникально для MetaMask. Где бы третья сторона ни управляла валидатором, получатель комиссий находится в её конфигурации, что делает этот риск структурной особенностью стороннего стейкинга, а не недостатком одного провайдера. Lido, чьи валидаторы управляются независимыми операторами узлов, решает риск правилом: действующая политика MEV требует, чтобы каждый валидатор Lido указывал Execution Layer Rewards Vault протокола в качестве получателя комиссий, и нарушения уже имеют собственный процесс обработки.
Хранилище — это контракт. Согласно документации Lido, оно собирает доход уровня исполнения, включая MEV и приоритетные комиссии, и только основной контракт Lido может выводить из него средства, направляя ETH в учёт протокола для держателей stETH. Платёж, отправленный куда-либо ещё, в этот учёт не попадает.
Держатели stETH находятся на шаг дальше от этих настроек, чем клиенты MetaMask Staking. Они владеют передаваемым токеном, а не учётными данными вывода конкретного валидатора, поэтому их защита полностью зависит от контрактов и правил операторов Lido.
ePBS гарантирует платёж, но не адрес
4 ноября Lido опубликовала предложение по обновлению политики MEV для встроенного разделения proposer-builder (ePBS) — дизайна, описанного в EIP-7732. Валидаторы, которые сегодня передают построение блоков на аутсорс, полагаются на реле — посредников, которым доверяют гарантии того, что победивший конструктор действительно заплатит. Lido описывает ePBS как снижение необходимости в таком доверии за счёт того, что протокол сам гарантирует платежи конструкторов.
У гарантии есть пределы. В описанном Lido дизайне одна заявка может сочетать бездоверительную стоимость, причитающуюся сразу после включения заявки пропоузером, даже если конструктор никогда не раскроет свой блок, с опциональным доверительным платежом, расчёт по которому происходит вне протокола и несёт тот же риск контрагента, что и нынешний рынок. Lido позволит любому зарегистрированному конструктору выигрывать её слоты с полностью бездоверительными заявками, но лишь конструкторы из проверенного Allowed List смогут добавлять доверительные платежи.
Что важнее для стейкеров, гарантия покрывает сумму платежа, а не то, куда он попадает. По этому дизайну валидаторы транслируют подписанные предпочтения, называя получателя комиссий на предстоящие слоты, и бездоверительная стоимость уходит получателю комиссий, указанному в заявке. Этот адрес по-прежнему исходит от оператора. Изменённый получатель комиссий в том виде, как описала MetaMask, получал бы гарантированные платежи с той же определённостью, что и правильный.
Проект Lido сохраняет правило получателя комиссий в своей основе. Оба типа платежей должны поступать в EL Rewards Vault, и политика распространялась бы на каждый узел, способный предлагать блоки для Lido, включая резервные и failover-машины. Lido сообщила, что предложение будет вынесено на голосование в ноябре и вступит в силу только после достижения апгрейдом Glamsterdam мейннета Ethereum. До этого момента действующая политика MEV — с правилом хранилища — остаётся стандартом, которому подчиняются валидаторы Lido.
Что выявят проверки Lido
Поскольку ePBS открывает дополнительные маршруты доставки блока, предложение расширяет мониторинг Lido. Валидатор будет помечен за указание любого адреса, кроме хранилища, или за принятие доверительного платежа от конструктора вне Allowed List. Пометки также будут охватывать доверительные платежи, не поступившие в полном объёме в расчётный период, и локально построенные блоки, предложенные при наличии доступных подходящих внешних заявок выше минимального порога.
Проверка стоимости заявки сравнивает каждую выбранную заявку с самой высокой подходящей заявкой, которую наблюдал мониторинг Lido, и помечает всё, что ниже исходного порога в 90–95% от неё. Порог — это повод задать вопросы, а не обещанная доля дохода. Проект позволяет операторам пропускать лучшую заявку по законным операционным причинам и соображениям надёжности, а сравнение охватывает только заявки, которые зафиксировала собственная система Lido.
Пометка не возвращает деньги. Нарушения по получателю комиссий остаются в рамках текущего процесса Lido, а другие пометки будут проходить путь уведомления и эскалации в Разделе E её Standard Node Operator Protocol. Lido также планирует обновить публичную Fees Monitoring Dashboard, чтобы показывать, по какому треку прошёл каждый блок Lido.
Как проверить собственную настройку стейкинга
Платежи уровня исполнения записываются в блокчейне — именно так изменённые адреса в MetaMask стали видимыми. Стейкер, знающий индексы своих валидаторов, может открыть каждый блок, предложенный этими валидаторами, в обозревателе beacon chain и проверить, какой адрес получил платёж пропоузера. Для Lido панель комиссий является публичным отображением мониторинга пула.
Выходы заслуживают того же внимания. Как отмечается в обновлении MetaMask, выход валидатора и вывод его ETH — это отдельные процессы: вышедший валидатор всё ещё должен пройти обработку вывода Ethereum, прежде чем ETH станет доступным, как описано в документации Ethereum по стейкингу. С апгрейда Pectra EIP-7002 позволяет держателю адреса вывода уровня исполнения валидатора инициировать его выход напрямую, без участия оператора.
Четыре вопроса любому провайдеру стейкинга охватывают пробелы, которые выявил этот инцидент:
Кто может изменить моего получателя комиссий? Ищите именованные роли, подтверждение перед любым изменением и журнал всех правок, а не одну централизованно хранимую настройку.
Как быстро вы обнаружите неверный адрес? Ищите автоматические проверки каждого предложенного блока с оповещениями вместо периодического ручного обзора.
Какие платежи конструкторов гарантированы? При ePBS ожидайте разбивку протокольно обеспеченной стоимости и доверительных платежей, а также объяснение, как взыскиваются неоплаченные суммы.
Могу ли я выйти без вас? Убедитесь, что ваши учётные данные вывода поддерживают самостоятельно инициируемые выходы, и спросите, кто покрывает вознаграждения, упущенные во время предохранительного выхода.