Если ты используешь в своих смарт-контрактах:
• версию от 0.8.28 до 0.8.33,
• --via-ir для промежуточной компиляции Solidity в YUL,
• хранение в transient storage,
, то тебе срочно нужно задуматься! Ну, или взять на заметку в будущем.
Ребята из hexens нашли критическую уязвимость компилятора. Solidity в спешном порядке выкатили версию 0.8.34 с исправлениями.
Суть: наличие переменной в transient storage того же типа, что и в обычном storage, при операции очистки transient-слота затирает слот в обычном storage.
Если не вдаваться в детали работы компилятора, то под капотом просто происходит коллизия ключей кеша при генерации через
--via-ir. В итоге удаляется storage-переменная вместо transient-storage переменной.Никогда не задумывался, но ошибка компилятора затрагивает всех. Независимо от типа протокола, его разработчиков или количества аудитов.
Когда transient storage только появился как концепт, мы с коллегой обсуждали мнения разработчиков. Они были неоднозначными: одни считали, что это небезопасно, другие (например, Uniswap) ждали, чтобы использовать это в своих контрактах.
Тогда мы решили, что время покажет и, как минимум, одну проблему transient storage уже принёс в наш мир.
P.S. Команда компилятора говорит, что сейчас в сети всего три контракта, которые пострадали от этой уязвимости.
#павел_найданов
🤟 Сайт | ТГ-канал | Наш чат
