Оригинал: 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