1. Введение
Предыдущие блоги включают:
- Интерпретация аудиторского отчета Polygon zkEVM Hexens
- Интерпретация аудиторского отчета Polygon zkEVM Spearbit (версия за декабрь 2022 г.)
- Интерпретация аудиторского отчета Polygon zkEVM Spearbit (версия от января 2023 г.)
- Интерпретация аудиторского отчета Polygon zkEVM Spearbit (версия от марта 2023 г.)
- Интерпретация аудиторского отчета Polygon zkEVM ROM Spearbit (обновленная версия Dragon Fruit в июне 2023 г.)
Смотрите основной контент:
Содержание аудита см.:
Этот раунд аудита длился 2 дня, всего было обнаружено 6 проблем, в том числе 1 уязвимость с низким уровнем риска и 5 информационных запросов.
В данном аудиторском отчете классификация рисков следующая:
уровень риска | Влияние: Высокое | Влияние: умеренное | Влияние: низкое |
---|---|---|---|
Вероятность: Высокая | смертельный | высокий | середина |
Вероятность: умеренная | высокий | середина | Низкий |
Вероятность: низкая | середина | Низкий | Низкий |
в:
- 1) Влияние:
- Высокий: приведет к потере >10% >10\% протокола.>10% активов могут нанести существенный вред большинству пользователей.
- Средний: потеря < 10 % <10\%<10% активов или потеря только части активов пользователя по-прежнему неприемлемы.
- Низкий: потеря раздражает, но приемлема. Подходит для сетевых атак, которые можно легко устранить даже при недостаточном количестве газа.
- 2) Вероятность:
- Высокая: почти наверняка произойдет, легко или не просто, но с привлекательными стимулами.
- Умеренный: Единственная реальная возможность или мотивация, но вероятность того, что произойдет, относительно велика.
- Низкий: требует совпадения звезд или имеет низкую мотивацию.
- 3) Уровень риска:
- Фатально: (если развернуто) Необходимо исправить как можно скорее.
- Высокий: (если не развернут), необходимо исправить перед развертыванием.
- Средний: Должно быть исправлено.
- Низкий: подлежит ремонту.
2. Уязвимости с низким уровнем риска
2.1 Уязвимость низкой степени серьезности 1: CREATE2 устанавливает txCalldataLen после сохранения указателя данных вызова.
Контекст см.:
Семейство опкодов CALL* и CREATE имеют общий шаблон:
- Сначала установите для txCalldataLen параметр argsLengthCall.
- Затем вызовите saveCalldataPointer.
Эти два действия в CREATE2 противоположны и не влияют на выходные данные помощника, но из соображений единообразия их следует сохранять в том же порядке, что и другие коды операций.
предположение:
- Сначала установите txCalldataLen, а затем вызовите saveCalldataPointer.
Для исправления PR см.:
3. Информационные подсказки
3.1 Информационный совет 1. Постоянная путаница в именах
Контекст см.:
Имя константы %CALLDATA_CTX сбивает с толку, поскольку существует также переменная calldataCTX.
предположение:
- Переименуйте константу %CALLDATA_CTX в %CALLDATA_RESERVED_CTX.
Для исправления PR см.:
3.2 Информационный совет 2:
Контекст см.:
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/calldata-returndata-code.zkasm#L27
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/calldata-returndata-code.zkasm#L134
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/calldata-returndata-code.zkasm#L161
В комментарии говорится, что выходная переменная помощника readFromCalldataOffset — это readFromCalldataOffset, но на самом деле это readXFromCalldataResult.
A :MSTORE(readXFromCalldataOffset), CALL(readFromCalldataOffset); in: [readXFromCalldataOffset: offset value, readXFromCalldataLength: length value], out: [readXFromCalldataOffset: result value]
предположение:
- Измените вывод в комментарии на readXFromCalldataResult.
Для исправления PR см.:
3.3 Информационный совет 3. Нет необходимости сохранять регистр D в помощнике readFromCalldataOffset.
Контекст см.:
Регистр D не изменяется в помощнике readFromCalldataOffset, поэтому нет необходимости сохранять его предыдущее значение и восстанавливать его в конце.
предположение:
- Удалена переменная tmpVarDReadXFromOffset и код сохранения и восстановления для регистра D.
Для исправления PR см.:
3.4 Информационный совет 4: Срок действия комментариев истек
Контекст см.:
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L388
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L625
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L744
- https://github.com/0xPolygonHermez/zkevm-rom-internal/blob/4339357ee536333f8c8cfcbee1a0aa7fd43cae3d/main/opcodes/create-terminate-context.zkasm#L830
Комментарии в кодах операций CALL и CREATE описывают контекст, который не соответствует фиксированной реализации.
; copy calldata from origin CTX to current CTX
предположение:
- Перепишите эти аннотации, чтобы отразить реализацию нового метода.
Для исправления PR см.:
3.5 Информационный совет 5. Ненужные теги
Контекст см.:
Тег addBatchHashByteByByteEnd, добавленный этим PR, на самом деле не используется и не имеет никакого отношения к этому исправлению.
предположение:
- Удалите эту метку.
Для исправления PR см.:
Приложение: Блог серии Polygon Hermez 2.0 zkEVM
- Как работают ZK-роллапы
- Polygon zkEVM - Знакомство с Hermez 2.0
- Узел сети Polygon zkEVM
- Основные понятия Polygon zkEVM
- Полигон zkEVM Prover
- Инструменты Polygon zkEVM — PIL и CIRCOM
- Анализ кода узла Polygon zkEVM
- Первый опыт работы с конечным автоматом Фибоначчи Пил-Старка Polygon zkEVM
- Анализ машинного кода состояний Фибоначчи от Polygon zkEVM
- Компилятор Polygon zkEVM PIL - анализ кода pilcom
- Polygon zkEVM Арифметический конечный автомат
- Постоянный полином полигона в zkEVM
- Polygon zkEVM Бинарный конечный автомат
- Конечный автомат памяти Polygon zkEVM
- Конечный автомат Polygon zkEVM Memory Align
- Компилятор Polygon zkEVM zkASM - zkasmcom
- Хеш-конечный автомат Polygon zkEVM — Keccak-256 и Poseidon
- Синтаксис Polygon zkEVM zkASM
- Простой пример конечного автомата с проверяемыми вычислениями Polygon zkEVM
- Polygon zkEVM zkASM и соответствующий набор кодов операций виртуальной машины Ethereum
- Анализ кода Polygon zkEVM zkROM (1)
- Коллекция функций в Polygon zkEVM zkASM
- Анализ кода Polygon zkEVM zkROM (2)
- Анализ кода Polygon zkEVM zkROM (3)
- Обзор формулы Polygon zkEVM
- Дерево Меркла в Polygon zkEVM
- Ограничения элемента домена Златовласки в Polygon zkEVM
- Ограничения Circom дерева Меркла Polygon zkEVM
- Polygon zkEVM FFT и ограничения окружности для вычислений полиномиальной оценки
- Преобразование схемы Polygon zkEVM R1CS и Plonk
- Система подограничений в Polygon zkEVM
- Анализ транзакций Polygon zkEVM
- Аудит Polygon zkEVM и рекурсивное доказательство
- Polygon zkEVM выпускает общедоступную тестовую сеть 2.0
- Тестовый набор Polygon zkEVM — создание контрактных транзакций
- Рекурсивные STARK в Polygon zkEVM
- Цены на газ Polygon zkEVM
- Polygon zkEVM zkProver: основные принципы проектирования и конечный автомат хранилища
- Техническая документация моста Polygon zkEVM
- Техническая документация по управлению состоянием Polygon zkEVM Trustless L2
- Пользовательские ошибки в Polygon zkEVM
- Сервис Polygon zkEVM RPC
- Функциональность RPC Polygon zkEVM Prover
- Полигон zkEVM PIL техническая документация
- Техническая документация по рекурсивному доказательству Polygon zkEVM (1) [В основном описывает комбинацию, рекурсию и агрегирование связанных инструментов и доказательств]
- Техническая документация по рекурсивному доказательству Polygon zkEVM (2) - Проект архитектуры Polygon zkEVM
- Техническая документация по рекурсивному доказательству Polygon zkEVM (3) - компиляция и работа кода
- Техническая документация по рекурсивному доказательству Polygon zkEVM (4) — C12 PIL Описание
- Техническая документация по рекурсивному доказательству Polygon zkEVM (5) — Приложение: Реализация композиции доказательства с помощью SNARKjs и PIL-STARK
- eSTARK: расширенный протокол STARK Polygon zkEVM — поддерживает поиск, перестановку, копирование и другие аргументы (1).
- eSTARK: расширенный протокол STARK Polygon zkEVM — поддерживает поиск, перестановку, копирование и другие аргументы (2)
- eSTARK: расширенный протокол STARK Polygon zkEVM — поддерживает поиск, перестановку, копирование и другие аргументы (3).
- Обновления Dragon Fruit и Inca Berry для Polygon zkEVM
- Управление протоколом Polygon zkEVM, обновление и обработка
- Журнал выпуска программного обеспечения узла Polygon zkEVM
- Журнал релизов сервиса Polygon zkEVM Bridge
- Polygon zkEVM DataStreamer
- Производительность вычислений в домене Polygon zkEVM Goldilocks
- Интерпретация аудиторского отчета Polygon zkEVM Hexens
- Интерпретация аудиторского отчета Polygon zkEVM Spearbit (версия за декабрь 2022 г.)
- Интерпретация аудиторского отчета Polygon zkEVM Spearbit (версия от января 2023 г.)
- Интерпретация аудиторского отчета Polygon zkEVM Spearbit (версия от марта 2023 г.)
- Интерпретация аудиторского отчета Polygon zkEVM ROM Spearbit (обновленная версия Dragon Fruit в июне 2023 г.)