ПОСЛЕДНИЕ НОВОСТИ
ПОДОБРАНО ДЛЯ ВАС

Баг SP1 обнажил собственную Prover Network Succinct

АвторРанда МоузРанда Моуз 2 мин. чтения
Баг SP1 раскрыл уязвимость собственной Prover Network компании Succinct.
  • Высокоуровневая ошибка корректности SP1 оставила основную сеть провайдеров (Prover Network) Succinct открытой для недействительных доказательств.
  • Уязвимость содержалась в нативном Rust-верификаторе SP1 в версиях с 6.0.0 по 6.8.0.
  • Succinct развернула исправление версии 6.8.1 в своей основной сети провайдеров (Prover Network).

Высокоуровневая ошибка корректности в системе доказательств нулевого разглашения Succinct — SP1 — подвергла основную сеть провайдеров компании риску приема недействительных доказательств.

Согласно уведомлению о безопасности GitHub, опубликованному 11 октября, эта сеть была единственным известным Succinct развертыванием, затронутым проблемой.

Нативные Rust-верификаторы в версиях с 6.0.0 по 6.8.0 могли принимать недействительные доказательства

В рекомендациях, зарегистрированных под номером GHSA-p7v2-jjv3-8p8f, указано, что злоумышленник может отправить доказательство для недействительного выполнения, и верификатор сети его примет. Сеть провайдеров принимала доказательства от сторонних провайдеров.

Чтобы воспользоваться уязвимостью, доказательства должны были быть отправлены напрямую в нативный Rust-верификатор SP1. На этом пути были доступны Core и Compressed доказательства.

Проверки Groth16 и Plonk были безопасными, поскольку они использовали обернутые доказательства с фиксированной формой и никогда не взаимодействовали с форматом тензоров, контролируемым провайдером, который содержал уязвимость.

Смарт-контракты Solidity для проверки Plonk и Groth16 в блокчейне также не пострадали. Приложения, использующие функцию verify_sp1_proof для проверки Compressed доказательств, были безопасны только в том случае, если агрегация доказательств завершалась доказательством Groth16 или Plonk.

В рекомендациях указано, что версии с 6.0.0 по 6.8.0 затронуты модули sp1_hypercube, sp1_prover и sp1_sdk. Исправление было выпущено компанией Succinct в версии 6.8.1 24 сентября, за 17 дней до публикации рекомендаций.

Баг SP1 раскрыл уязвимость собственной Prover Network компании Succinct.
В рекомендациях по безопасности Succinct GHSA-p7v2-jjv3-8p8f на GitHub, имеющих высокий уровень серьезности, указано, что версии 6.0.0–6.8.0 компонентов sp1_hypercube, sp1_prover и sp1_sdk уязвимы, а проблема исправлена в версии 6.8.1.

Тензоры с несовпадающими длинами хранилища отбрасываются в версии 6.8.1

Уязвимость присутствовала в нативном Rust-верификаторе SP1. Это часть программы, которая проверяет корректность доказательства.

SP1 хранит многомерные данные в тензоре. Тензор состоит из буфера для хранения значений и объявленных измерений, определяющих его форму.

Оба значения должны совпадать для корректной проверки. Количество сохранённых элементов должно быть равно произведению заданных измерений.

На каждом фрагменте доказательных данных есть метка, указывающая его размер. Верификатор никогда не проверял, соответствует ли содержимое метке; он полагался только на саму метку.

Таким образом, злоумышленник мог отправить данные с поддельной меткой. Различные части проверки обращались бы к разным участкам одних и тех же данных, что позволяло бы ложному доказательству пройти верификацию.

Начиная с версии 6.8.1, при десериализации добавлена проверка длины. Любой тензор, у которого количество сохранённых элементов не равно произведению его объявленных измерений, отклоняется.

После публикации версии 6.8.1 команда Succinct развернула исправление в основной сети Prover Network.

Пользователям, запрашивающим доказательства через сеть, ничего менять не нужно. Тем же, кто запускает собственный нативный верификатор на Rust и принимает доказательства от недоверенных провайдеров, необходимо обновиться до версии 6.8.1.

Согласно уведомлению, уязвимость обнаружил Vitalis Salis и сообщил о ней через программу bug bounty платформы Immunefi.

В этом году Cryptopolitan сообщил о других ошибках корректности систем доказательств, включая ошибку корректности в защищенном пуле Orchard протокола Zcash. Cryptopolitan также рассмотрел эксплуатацию уязвимости на Foom.Cash, где злоумышленник подделал доказательства zkSNARK из-за неправильной настройки верификатора.

Если вы читаете это, вы уже впереди. Оставайтесь с нами, подписавшись на нашу рассылку.

Часто задаваемые вопросы

Что такое уязвимость SP1?

Ошибка корректности в нативном верификаторе Rust для SP1, позволявшая злоумышленнику-провозеру получить доказательство, принимаемое как действительное для некорректного выполнения.

Какие версии SP1 затронуты и какая из них исправляет проблему?

Затронуты версии с 6.0.0 по 6.8.0 включительно; проблема исправлена в версии 6.8.1.

Нужно ли пользователям SP1 предпринимать какие-либо действия?

Заказчикам в основной сети Prover Network от Succinct изменения не требуются. Командам, использующим отдельный нативный верификатор на Rust для обработки доказательств от недоверенных провайдеров, следует обновиться до версии 6.8.1.

Поделиться статьёй

Отказ от ответственности. Предоставленная информация не является торговой рекомендацией. Cryptopolitan.com не несет ответственности за любые инвестиции, сделанные на основе информации, представленной на этой странице. Мы настоятельно рекомендуем проводить независимые исследования и/или консультироваться с квалифицированным специалистом перед принятием любых инвестиционных решений.

Ранда Моуз

Ранда Моуз

Ранда Мозес — редактор и репортёр Cryptopolitan, освещающая технологии, ИИ, робототехнику, криптовалюты, мошенничество и взломы. Она работает в сфере криптовалют с 2017 года. Ранда занимала должности в Forward Protocol, AmaZix и Cryptosomniac. Ранда имеет степень в области электротехники и электроники, полученную в Университете Брэдфорда.

ЕЩЁ … НОВОСТИ