Дырка в Parity Multisig Wallet
Опять уязвимость в коде смарт-контракта, и опять огромные деньги выведены (~ 30 млн$ ). И опять в чатиках те, кто не в курсе, и валит все проблемы на Ethereum и Виталика (которого даже прозвали Кидаликом :)).
Еще немного про устройство смарт-контрактов на эфире. Смарт-контракт - это фактически объект класса, который деплоится на конкретный адрес в блокчейне. У этого объекта можно вызывать методы снаружи, причем вместе с вызовом метода можно передавать эфир, который упадет на счет контракта. Потом, вызывая методы этого смарт-контракта можно пересылать эфир со счета контракта куда угодно, разумеется с теми ограничениями, которые указаны в методе, например "этот метод может вызывать только тот, кто задеплоил сам смарт-контракт".
Из за отсутствия проверок кому позволено вызывать какие методы (так вышло видимо из за попытки сделать правильный паттерн управления несколькими контрактами) любой участник мог вызывать метод initWallet, который записывал в контракт адреса тех, кто имеет права выводить средства из контракта (с мультиподписью). Тaк что атакующий просто вызвал метод initWallet и указал свои адреса в качестве owner-ов контракта. После этого он просто вывел эфир. Никаких хитростей, ситуация как будто банк выставил наружу API позволяющее любому получить правам менеджера банка и делать транзакции между счетами.
Если я правильно понял, в фиксе баги принала участие и white-hat группа, которая также проэкплойтила этот же контракт (захватив его) и вывела деньги с адресов куда-то к себе, чтобы потом вернуть владельцам. Клёво - да ?
Отличный пример того, какую цену имеют сейчас ошибки в смарт-контрактах. Многие говорят, что программирование смарт-контрактов это эдакое новое направление, и всячески пытаются подать это как охренеть какую экспертизу, но в реале - практически любой нормальный разраб может спокойно освоить Solidity за пару дней. При этом многие инвесторы продолжают думать, что если заплатить за конракт разрабу не 50тыс, а 500, то надежность решения вырастет в 10 раз:) Конечно, это не так, и очевидно, что такие инциденты будут происходить и дальше, пока не подрастут фреймворки и команды для масштабного тестирования безопасности смарт-контрактов.
Так что не доверяйте контрактам большие суммы - напоминаю, на текущем хайпе вы можете загореться золотой лихорадкой, забыв, что фактически там все держится на коде, который всё еще в стадии beta версии, а сообщество разработчиков очень молодое и ненадёжное. Всем peace...