Команда Moonbeam выпускает срочное исправление безопасности для пользовательских Precompiles
В пятницу, 27 мая 2022 года, Moonriver и Moonbeam получили срочные обновления для сред выполнения 1503 и 1504, чтобы решить проблему безопасности, о которой ранее этим утром ответственно сообщил независимый белый хакер (ET). Проблема устранена, и уязвимость больше не используется ни в одной из сетей. Первоначальное указание на то, что ошибка никогда не использовалась, хотя команда продолжит расследование.
Подробности проблемы безопасности не были немедленно раскрыты общественности, чтобы предотвратить использование в наших собственных сетях и дать достаточно времени, чтобы уведомить другие парачейны о том, что мы знаем, что они используют тот же код, чтобы они могли исправлять свои собственные экземпляры. Мы подтвердили, что эти группы подтвердили, что они больше не подвержены влиянию, и теперь могут предоставить дополнительную информацию об аварийных обновлениях.
О проблеме безопасности
Утром 27 мая команда Moonbeam получила отчет об ошибке Immunefi , касающийся потенциальной уязвимости безопасности в Frontier (палитре Substrate, которая обеспечивает основные функции совместимости Ethereum в экосистеме Polkadot, которую Moonbeam помог создать). Команды эксплуатации и разработки немедленно отправили этот отчет и исследовали уязвимость. После проверки было подготовлено исправление и разработан план развертывания. Команда Parity также была уведомлена и начала работу с несколькими командами парачейнов.
К полудню среда выполнения 1503 была развернута и запущена на Moonbeam и Moonriver. Хотя эта среда выполнения действительно устранила уязвимость, она привела к непреднамеренной ошибке, которая была исправлена позже вечером в среде выполнения 1504. Проблема была полностью решена, и сети работали, как и ожидалось, к 21:00 по восточному времени — через 12 часов после получения первоначального отчета.
Область уязвимости
Уязвимость касается вызовов нестандартных прекомпиляций Ethereum. Это адреса, позволяющие EVM через смарт-контракты получить доступ к некоторым основным функциям Moonbeam (таким как наш XC-20, стекинг и демократические поддоны), которых нет в базовой EVM. Используя DELEGATECALL, вредоносный смарт-контракт может получить доступ к прекомпилированному хранилищу другой стороны через обратный вызов.
Это не проблема для обычных пользователей, так как от них потребуется отправить транзакцию вредоносному смарт-контракту. Однако это проблема для других смарт-контрактов, допускающих произвольные вызовы внешних смарт-контрактов. Например, так обстоит дело с некоторыми смарт-контрактами, допускающими обратные вызовы. В таких ситуациях злоумышленник может заставить DEX выполнить вызов вредоносного смарт-контракта, который сможет получить доступ к прекомпиляциям, выдающим себя за DEX, и, возможно, перевести свой баланс на любой другой адрес.
Исправление
Среда выполнения 1503 быстро отключила все вызовы DELEGATECALL, чтобы предотвратить использование уязвимости.
Среда выполнения 1504 восстановила DELEGATECALL для стандартных прекомпиляций Ethereum и для смарт-контрактов (оставив его отключенным для пользовательских прекомпиляций).
Между этими двумя обновлениями среды выполнения транзакции со смарт-контрактами, основанные на DELEGATECALL, завершились неудачно и были помечены как отмененные.
Исправленный код доступен здесь: https://github.com/PureStake/moonbeam/pull/1551/files#diff-1404c7c10c00572e96e647084d96576f592a2c18e70f53cdcfec2daa98adb60cR119
Существующие меры безопасности
Аудит кода
Команда Moonbeam поддерживает постоянные отношения с двумя аудиторскими фирмами (SR-Labs и NCC), которые проводят непрерывные, поэтапные и полные аудиты кода. Кодовые базы как Moonriver, так и Moonbeam подпадали под этот процесс аудита. Кроме того, команда рассматривает возможность привлечения третьей фирмы для дальнейшего расширения охвата аудита.
Программа вознаграждения за обнаружение ошибок
В прошлом году проект Moonbeam учредил программу поощрения ошибок Immunefi , чтобы стимулировать дополнительное тестирование безопасности кодовой базы Moonbeam. Этот выпуск был отправлен через эту программу и стал первым значительным отчетом, связанным с Moonbeam. Как видно из этого раскрытия, эта программа вознаграждения за обнаружение ошибок уже доказала свою исключительную ценность для поддержания защищенной кодовой базы.
Внутреннее тестирование
Перед каждым выпуском команда Moonbeam тщательно проверяет код на полноту и выявляет любые потенциальные технические проблемы, используя как автоматические, так и ручные тесты. Это внутреннее тестирование проводится в течение более одной недели и происходит в нескольких внутренних тестовых сетях в дополнение к общедоступной тестовой сети Moonbase Alpha. Как правило, выпуски Moonriver и Moonbeam разнесены примерно на две недели или более. В связи с неотложным характером этой проблемы был завершен сокращенный процесс тестирования, и обновления были развернуты в обеих сетях одновременно, чтобы ограничить окно воздействия.
Новые меры безопасности в результате этого события
Новый автоматизированный процесс тестирования в разработке
Несмотря на то, что для общедоступного кода уже существует комплексный процесс непрерывной интеграции (CI), команда Moonbeam планирует создать дополнительную частную сборку и стек CI, чтобы обеспечить быстрые выпуски в случае важных исправлений безопасности, которые необходимо защитить от общедоступных. раскрытие. Это поможет команде предотвратить появление технических проблем во время быстрого развертывания, помогая гарантировать, что новые проблемы не возникнут случайно.
Кроме того, команда может добавить задержки между обновлениями Moonriver и Moonbeam, когда это уместно и возможно, в зависимости от серьезности проблемы.
Коммуникации
Команда также работает над созданием дополнительных частных и общедоступных каналов раскрытия информации, чтобы быстрее узнавать о проблемах, делиться информацией и (когда это безопасно) делиться подробностями ради прозрачности и обучения.
График связи и ответа
Как только уведомление Immunefi было получено, команда Moonbeam быстро представила отчет о безопасности и начала работу над исправлением. Первоочередной задачей было как можно скорее устранить непосредственную уязвимость безопасности в обеих цепочках.
После того, как исправление было развернуто и сети Moonbeam/Moonriver больше не подвергались риску, команда начала предоставлять дополнительную информацию о проблеме командам экосистемы и другим парачейнам, использующим тот же набор Frontier. На выходных мы работали с этими другими командами парачейнов, чтобы определить степень их воздействия и порекомендовать путь исправления до того, как ошибка будет раскрыта. Мы не могли раскрыть все детали, пока не было подтверждено, что у этих сетей было достаточно времени, чтобы проверить отчет и при необходимости выпустить исправление.
Чтобы более подробно детализировать события, приведшие к исправлению безопасности, команда Moonbeam предоставила подробную информацию о предпринятых шагах и сообщениях, отправленных в связи с этим событием.
Все время указано по восточному летнему времени (EDT).
27.05.2022
8:54: Moonbeam Foundation получает через Immunefi два сообщения о критических ошибках, которые могут привести к потере средств на Moonbeam и Moonriver.
9:00: Операционные и инженерные группы Moonbeam встречаются, чтобы рассмотреть отчеты и подтвердить их серьезность и потенциальное воздействие.
10:31 утра: Сообщенные результаты подтверждены и признаны крайне серьезными. Команда инженеров начинает работу над патчем.
11:51: подготовлено предварительное исправление для выполнения, и начинается тестирование исправления.
13:45: Предлагается план развертывания исправлений, который будет обновлять как Moonriver, так и Moonbeam одновременно после успешного тестирования в Moonbase Alpha TestNet, чтобы уменьшить окно уязвимости.
14:00: После голосования совета оба обновления были одобрены и ускорены демократическим путем. После 30-минутного демократического голосования и 60-минутного ожидания до принятия обновления будут запущены.
14:19: Голоса за обновление переходят в демократию, и по ним голосуют.
https://moonriver.polkassembly.network/referendum/95
https://moonbeam.polkassembly.network/referendum/42
15:53: И Moonbeam, и Moonriver успешно обновлены до среды выполнения 1503.
16:00: После исправления уязвимости Moonbeam Foundation инициирует ответ репортеру об ошибках на Immunefi, подтверждая уязвимость и последующее исправление.
16:25: Получите первый отчет о технической проблеме со смарт-контрактами, развернутыми на Moonriver/Moonbeam.
16:40: Группа инженеров подтверждает новую техническую (не связанную с безопасностью) ошибку, появившуюся в среде выполнения 1503, которая мешает вызовам делегатов, влияя на проекты DeFi в обеих сетях. Команда начинает подготовку второго исправления для решения новой проблемы.
17:37: Команда Moonbeam уведомляет команду Parity о проблеме безопасности и ее решении. Команда Parity начинает уведомлять другие потенциально затронутые команды.
18:00: Сообщества Discord и Telegram уведомлены о прекращении контрактных звонков на Moonbeam и Moonriver и о том, что исправление будет развернуто в ближайшие несколько часов.
18:50: Совет голосует за второе исправление, среда выполнения 1504.
19:14: Голосование за демократию открыто для второго исправления.
https://moonriver.polkassembly.network/referendum/96
https://moonbeam.polkassembly.network/referendum/43
19:45: Референдум проходит, и обновление запланировано как для Moonbeam, так и для Moonriver.
20:35: В закрытой группе Element другим парачейн-командам выдается сообщение с рекомендациями по безопасности. Команда Moonbeam также начинает прямое взаимодействие с другими командами парачейнов, используя тот же код, чтобы гарантировать скорейшее исправление уязвимости.
20:55: Moonbeam и Moonriver обновлены до среды выполнения 1504 и работают должным образом.
21:56: Несколько проектов DeFi на Moonbeam подтверждают, что проблема решена и смарт-контракты работают должным образом.
22:04: Подтверждение обновлений рассылается в Twitter, Telegram и Discord.
28.05.2022
9:00: Команда подтверждает, что другие потенциально затронутые команды парачейнов, о которых нам известно, либо выпустили патч, либо определили, что они не уязвимы для эксплойта.
29.05.2022
11:30: Новый образ трассировки подготовлен и протестирован как на Moonbeam, так и на Moonriver и готов к использованию. Затронутым проектным группам отправляется уведомление с просьбой выполнить обновление.
Резюме
В общей сложности время от получения вопроса до разрешения и публичного признания составило немногим более двенадцати часов. Это временное окно включает в себя несколько этапов тестирования и координации не только с командой PureStake, Moonbeam Foundation и репортером об ошибках в Immunefi, но также с командой Parity и другими парачейнами, работающими в экосистеме. Из-за характера разработки с открытым исходным кодом эти раскрытия информации требуют как скорости, так и координации для разрешения большого количества потенциально затронутых сторон, работающих в разных часовых поясах по всему миру.
Мы хотели бы поблагодарить проектные группы Moonbeam и Moonriver за их усердие и скорость, поскольку мы работали над тем, чтобы решить проблему как можно быстрее.
Для получения дополнительной информации о программе вознаграждения за обнаружение ошибок Immunefi и о том, как вы можете принять в ней участие, посетите их веб-сайт: https://immunefi.com/bounty/moonbeamnetwork/
По дополнительным вопросам, касающимся этого отчета и полученного нами отчета о безопасности, свяжитесь с командой через Discord: https://discord.gg/PfpUATX .