Биржи останавливают работу с токенами стандарта ERC-20
Годы идут - ничего не меняется. Люди по прежнему пишут уязвимые смарт-контракты, допуская детские ошибки.
22 апреля (аккурат на день рождение Ленина. Совпадение? Не думаю) в сети стала распространятся информация о уязвимости batchOverflow
Криптовалютная биржа OKEx распространила сообщение, что уязвимость позволяет генерировать любые объемы токенов и переводить их на адреса стандартных кошельков. Поэтому, используя уязвимость, рынок токенов ERC-20 может подвергнуться манипуляциям. Биржей OKEx принято решение временно приостановить операции с токенами ERC-20 до полного устранения недостатков. Кроме того биржа разослала всем участникам рынка предупреждение о создавшейся ситуации, и призвала проверить свои смарт-контракты.
На бирже Huobi зарегистрирована успешная транзакция, в результате которой было создано токенов ERC-20 на 880 трлн долларов. В связи с этим биржа блокирует все транзакции с криптовалютой.
По сути уязвимость это классический integer overflow.
Как указано в строке 257, локальная переменная суммы перевода вычисляется как произведение cnt и _value. Второй параметр, т. е. _value, может быть произвольным 256-битным целым числом, например 0x8000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000. Имея двух получателей (_receivers), переданных в batchTransfer (), с этим чрезвычайно большим значением, мы можем переполнить сумму перевода и сделать ее равной нулю. При обнулении суммы злоумышленник может затем пройти проверки в строках 258-259 . Самое интересное: как показано в строках 262-265, эта огромная сумма будет добавлена на кошельки двух получателей, при этом у отправителя не спишется ни токена - см. строку 261!
В сети находятся более десятка контрактов с подобной уязвимостью, а сколько еще появится путем бездумного copy&paste.
Любопытно, что атакующий, в случае если уязвимый токен (такой как BEC) торгуется на бирже, может одномоментно полностью обрушить курс, ведь у него в распоряжении токенов может быть больше чем totalSupply.