Патч для уязвимого контракта

in #eos6 years ago (edited)

Оригинал: https://medium.com/@eoscafeblock/contract-vulnerability-patch-57b948cacc3a

Уязвимость была обнаружена в нескольких контрактах использующих уведомления от других контрактов. Все параметры должны быть четко проверенны. Проверка только лишь contract name и action name не являеться достаточной.

Для всех контрактов полагающихся на уведомления при переводе из eosio.token следует сделать эту проверку незамедлительно:

if (transfer.to != _self) return;

Если вы выполняете бизнес-логику только для входящих трансферов, но повторно передаете действие как для входящих так и для исходящих трансферов, пожалуйста используйте:

if (transfer.from == _self || transfer.to != _self ) return;

Обратите внимание: Эта уязвимость на контрактном уровне, а не на системном уровне. Проверки упомянутые в этой статье есть также в примере кода от B1 здесь: https://gist.github.com/tbfleming/d230f3ab2998e8858d3e51af7e4d9aeb

Обновление: EOS Bet и многие другие контракты уже исправили эту уязвимость. Обязательно поделитесь данным патчем с разработчиками которые этого не знают.

Код для распространения будет выпущен позже чтобы обеспечить безопасность для неисправленных dApps.

Особая благодарность Кедару из LibertyBlock и Бену из shEOS за тестирование уязвимости.

Telegram — @eoscafeblock
Twitter — @eoscafeblock
Medium — @eoscafeblock
Steemit — @eoscafeblock
Website — www.eoscafeblock.com

Переведено CryptoLions

photo_122x122.jpg

Website

Telegram

Steemit

Twitter

GitHub

Meetup