Важный баг Ethereum (ETH), возможно, наконец исправлен

ETH
отравление кэша публичных ключейбезопасность валидаторовисправление уязвимостейконсенсусный клиентGlamsterdamфорк GloasEthereum
21 часов назадИсточник: u.today
Важный баг Ethereum (ETH), возможно, наконец исправлен

Один из консенсус-клиентов Ethereum объединил исправление для атаки отравления кэша публичных ключей валидаторов, согласно пул-реквесту на GitHub. Патч устраняет уязвимость, связанную с форком Gloas, которая могла привести к тому, что некоторые узлы отклоняли бы действительные подписи из-за ошибки в глобальном кэше публичных ключей.

Gloas — это часть уровня консенсуса предстоящего обновления Glamsterdam.

Три депозита, две цепочки

Проблема заключается в механизме, при котором клиент хранит публичные ключи валидаторов и их индексы в глобальном кэше.

Технически депозиты, которые уже финализированы, должны давать одних и тех же валидаторов в каждой цепочке, хотя на границе форка ситуация иная.

Article image
Источник: Github

Атакующему нужно 3 ожидающих депозита непосредственно перед форком. Первый — это крупное пополнение для существующего валидатора. Другие два — это новые ключи: A с учётными данными билдера и B с обычными учётными данными валидатора.

В канонической цепочке пополнение расходует балансовый оборот, поэтому A и B обрабатываются после форка. A становится билдером, а B получает следующий индекс валидатора.

В боковой цепочке атакующего пополненный валидатор подвергается слэшингу до форка, и его депозит пропускается. Это приводит к тому, что A обрабатывается раньше, по сути занимая индекс B.

Ошибочный кэш предполагал, что обе цепочки создадут одних и тех же валидаторов, и глобально импортировал ключ A.

На форке затронутые узлы отклоняли бы все действительные подписи от B в канонической цепочке и отделялись бы в форк.

В реальности атака довольно сложна, поскольку требует слэшинга в нужный момент и боковой цепочки, поэтому вряд ли произойдёт случайно.

Что меняет исправление?

Согласно PR, исправление заключается в том, чтобы добавлять ключи в глобальный кэш публичных ключей только после того, как финализируется эпоха их права на активацию.

Новая структура HeadPubkeys также объединяет ключи из состояния головы и глобального кэша, чтобы узлы не пропускали ключи, если цепочка финализируется без новых блоков.

Предстоит подтвердить, была ли аналогичная проблема у других консенсус-клиентов. Иными словами, чем ближе Glamsterdam, тем больше краевых случаев вокруг границы форка приходится отлавливать разработчикам.