Сегодня мы выпустили Lisk Core 2.0.1 как для тестовой, так и для основной сети. Этот патч был выпущен из-за уязвимости в способе управления узлами списков пиров. Это, в свою очередь, привело к неустойчивому росту использования ЦП и памяти для всех узлов сети. Это обновление предназначено только для операторов узлов - все средства в безопасности, и нет необходимости в каких-либо действиях со стороны пользователей Lisk Network.

15 июля мы получили заявку Bug Bounty Program с рядом уязвимостей. Мы приняли три из них как действительные. Два из трех относятся к уровню P2P нашего приложения. Одним из них был возможный вектор атаки, связанный с рассылкой спама в сети огромным количеством недействительных пиров. Тем временем на GitHub была открыта еще одна проблема, в которой говорилось о том, что недоступные одноранговые узлы не удаляются. Мы хотели исправить все проблемы, связанные с P2P, в рамках предстоящего выпуска Lisk Core 2.1.0 (на основе Lisk SDK 2.3.0). Это связано с тем, что этот выпуск уже внесет множество изменений и улучшений в наш протокол P2P и сделает некоторые из этих векторов атак более невозможными.

Однако два дня назад в сети Testnet был проведен несколько иной вариант спам-атаки недействительных одноранговых узлов. Почти 30 000 недействительных одноранговых узлов были объявлены в сети, а затем распространены в течение следующих часов. Узлы продолжали пытаться подключиться ко всем одноранговым узлам одновременно, и количество одновременных подключений, открываемых за короткий промежуток времени, подавляло их. Тестовая сеть потеряла стабильность, потому что узлы были слишком заняты, чтобы вовремя подделывать и проверять блоки. Вскоре после этого мы получили два дополнительных сообщения о программе Bug Bounty, в которых подробно описывалась эта атака.

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

  • Удалите однорангового узла при первой неудачной попытке подключения (ранее одноранговые узлы оставались отключенными, а узел пытался восстановить соединение каждые 30 секунд).
  • Когда узел обнаруживает новых одноранговых узлов (через удаленный вызов процедуры list), он принимает только 100 (ранее он принимал их всех, даже если количество было огромным).
  • Для процесса обнаружения одноранговых узлов узел объявляет только подключенных одноранговых узлов в ответ на вызовы RPC от другого узла (ранее он возвращал до 100 известных одноранговых узлов, независимо от статуса соединения)
  • При вычислении консенсуса и при отправке запросов другим одноранговым узлам мы выбираем только один узел на каждый IP-адрес (это предотвращает негативное влияние множества узлов с одного и того же IP-адреса на сеть).

Ситуация в Testnet стабилизируется, так как операторы узлов обновляются довольно быстро. Полные примечания к выпуску теперь доступны на GitHub.

Команда платформы Lisk

Задача Lisk - дать разработчикам возможность создавать децентрализованные, эффективные и прозрачные блокчейн-приложения. Присоединяйтесь к нам: