#dusk $DUSK @Dusk $BTC 11 хост-запросы использовали один и тот же обёртчик. У восьми из них был одинаковый риск десериализации.
Это заставило меня присмотреться внимательнее.
Контракт управлял байтами. Именно нода их читала. Некорректный относительный указатель мог подтолкнуть хост к чтению за пределами допустимого диапазона. В этот момент проблема уже не оставалась внутри контракта.
Меня насторожило то, как было сделано исправление.
Dusk не патчил восемь запросов по отдельности. Он исправил общую границу и валидирует архивированные данные перед тем, как десериализовать их.
Этот порядок важен.
Сначала проверка. Потом десериализация.
Здесь не было полезного обходного решения на стороне пользователя. Нужно было исправить саму границу, и поскольку один и тот же обёртчик обслуживал 11 запросов, исправление этого слоя закрывало проблему для всей группы.
Тест простой. Подайте в эти запросы некорректные архивированные данные. Нода должна отклонить их до того, как обёртчик попытается интерпретировать байты.
Это заставило меня присмотреться внимательнее.
Контракт управлял байтами. Именно нода их читала. Некорректный относительный указатель мог подтолкнуть хост к чтению за пределами допустимого диапазона. В этот момент проблема уже не оставалась внутри контракта.
Меня насторожило то, как было сделано исправление.
Dusk не патчил восемь запросов по отдельности. Он исправил общую границу и валидирует архивированные данные перед тем, как десериализовать их.
Этот порядок важен.
Сначала проверка. Потом десериализация.
Здесь не было полезного обходного решения на стороне пользователя. Нужно было исправить саму границу, и поскольку один и тот же обёртчик обслуживал 11 запросов, исправление этого слоя закрывало проблему для всей группы.
Тест простой. Подайте в эти запросы некорректные архивированные данные. Нода должна отклонить их до того, как обёртчик попытается интерпретировать байты.