CVE-2025-54070 in openzeppelin-contracts
Сводка
по VulDB • 25.05.2026
OpenZeppelin Contracts — это библиотека для безопасной разработки смарт-контрактов. Начиная с версии 5.2.0 и вплоть до версии 5.4.0 (включительно), функция `lastIndexOf(bytes,byte,uint256)` библиотеки `Bytes.sol` может обращаться к неинициализированной памяти при соблюдении следующих двух условий: 1) длина предоставленного буфера пуста (т. е. `buffer.length == 0`), а позиция не равна `2**256 - 1` (т. е. `pos != type(uint256).max`). Аргумент `pos` может быть использован для доступа к произвольным данным за пределами границ буфера. Это может привести к исчерпанию газа (out of gas) или возврату недействительного индекса (за пределами пустого буфера). Обработка этого недействительного результата при доступе к `buffer` в нормальных условиях вызывает откат транзакции (revert). При срабатывании функция читает память по смещению `buffer + 0x20 + pos`. Если память по этому адресу (вне `buffer`) совпадает с шаблоном поиска, функция возвращает индекс за пределами допустимых границ вместо ожидаемого значения `type(uint256).max`. Это создает непредвиденное поведение, при котором вызывающие стороны получают индекс, который выглядит корректно, но указывает на данные за пределами границ буфера. Последующие обращения к памяти, которые не проверяют границы и используют возвращенный индекс, должны тщательно оценивать потенциальное влияние в зависимости от их конфигурации. Код, полагающийся на то, что эта функция возвращает `type(uint256).max` для пустых буферов, или использующий возвращенный индекс без проверки границ, может демонстрировать неопределенное поведение. Пользователям следует обновиться до версии 5.4.0, чтобы получить исправление.
If you want to get best quality of vulnerability data, you may have to visit VulDB.