Zeitgeist завершил все аудиты кода

playforfun9
Zeitgeist Seer Program
4 min readAug 18, 2022

Недавно мы завершили два раунда аудита кода нашего программного обеспечения, и в данной статье мы представляем подробное резюме по последнему отчету команды Chaintroopers.

Недавно мы завершили два раунда аудита кода нашего программного обеспечения, и в данной статье мы представляем подробное резюме по последнему отчету команды Chaintroopers.

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

В то время как мы сотрудничали с другой группой блокчейн разработчиков на Substrate, имеющих большой опыт работы с проектами Polkadot, мы также воспользовались услугами Chaintroopers, которые гордятся тем, что являются одними из самых передовых экспертов по блокчейн безопасности в экосистеме. Chaintroopers были достаточно любезны, чтобы обнародовать свой подробный отчет, поэтому в свете этого и в целях прозрачности мы хотели бы поделиться с вами некоторыми ключевыми выводами, которые они сделали в ходе аудита (отметим, что этот конкретный отчет является одним из двух аудитов кода, выполненных для программного обеспечения Zeitgeist).

Chaintroopers разделили обнаруженные ими недостатки на четыре категории:

1. Высокий риск.

2. Средний риск.

3. Низкий риск.

4. Информационные замечания.

Компания обнаружила в общей сложности 14 проблем с кодом Zeitgeist, по которым стоило принять меры, из которых четыре попали в категорию высокого риска, три были отнесены к категории среднего риска, четыре были признаны “низким риском”, а последние три проблемы были признаны “информационными”.

Высокорисковые проблемы.

Высокорисковые проблемы были связаны в основном с бизнес-логикой и валидацией данных, при этом проблемы бизнес-логики позволили бы злоумышленникам использовать наш протокол, что привело бы к атакам типа “отказ в обслуживании”. Высокорисковые проблемы с проверкой данных были связаны с рынками без разрешений, что позволило бы злоумышленникам злоупотреблять ролями “авторизации рынка” и принудительно отклонять рынки по своему выбору, а другая проблема с проверкой данных обнаружила, что общедоступный диспетчерский колл для создания категориальных рынков не был помечен как транзакционный (это привело бы к тому, что средства пользователя оставались зарезервированными в случае ошибки).

Проблемы среднего уровня.

Уязвимости среднего уровня также были связаны с проверкой данных и бизнес-логикой, на этот раз одна из них была связана с проверкой данных, а две — с бизнес-логикой. Существовал пул субсидий, в котором не было минимально необходимой суммы, что позволило бы злоумышленникам злоупотреблять доступными средствами пула. Что касается проблем бизнес-логики среднего уровня, была обнаружена проблема, при которой функция “отклонить рынок” игнорировала состояние рынка (что потенциально могло привести к ненужному удалению успешных рынков из приложения). И третья проблема среднего уровня была напрямую связана с проблемой “отклоненного рынка”, когда соответствующие доли исходов рынка не обрабатывались функцией отклонения, что означало, что в случае отклоненного рынка с соответствующими активами исходов, зарезервированные средства не будут освобождены.

Проблемы с низким риском.

Три из низкорисковых проблем были связаны с административными функциями, а одна — с итоговыми долями рынка на категориальных рынках. Первая функция администратора позволяет паллету инициировать события, когда она хочет уведомить внешние сущности об изменениях или условиях во времени выполнения для внешних сущностей, но было рекомендовано скорее инициировать события, связанные с конкретной административной функциональностью. Вторая проблема с низким риском была связана с тем, что типы рынка предоставлялись в функциях “admin_set_pool_as_stale” и “set_pool_as_stale”, но эта информация могла храниться в сущности пула, чтобы избежать принятия последующих решений по безопасности на основе параметров, предоставленных пользователем.

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

Информационные замечания.

Информационные замечания в основном связаны с документацией Zeitgeist и могут затруднить разработчикам поиск и устранение уязвимостей. Сотрудники Chaintroopers обнаружили следующие документы/информационные проблемы, требующие исправления:

Первая выявленная информационная проблема заключалась в том, что диспетчерская функция Substrate, связанная с товарами из кодовых блоков “impl”, не была включена в документацию исследованной паллеты. Вторая проблема заключалась в том, что для значения “range.end” рыночных периодов не были определены верхние границы, а третья информационная проблема заключалась в том, что “admin_move_market_to_closed” не обрабатывает случаи, когда “current_block” или “ T::MarketCommons::now()” меньше значения “range.start”.

Заключение.

Все вышеперечисленные проблемы были должным образом и во всех подробностях доведены до сведения команды разработчиков Zeitgeist, и мы немедленно приступили к их устранению. В течение двух недель после выхода отчета мы связались с Chaintroopers, чтобы проверить каждый вопрос и убедиться, что всё было решено надлежащим образом. Мы рады сообщить, что Chaintroopers тщательно изучили наши исправления и остались довольны тем, как мы их выполнили.

Таким образом, команда Chaintroopers завершила аудит несколько недель спустя и составила этот обширный отчет, который мы рады предоставить для ознакомления вам.

Мы благодарны за работу Chaintroopers по экспертизе нашего программного обеспечения и высоко ценим их профессиональное и коммуникативное отношение на протяжении всего времени. Мы всегда заявляем, что наша цель — создать лучшее программное обеспечение по Рынкам Предсказаний, и такой аудит кода является обязательным условием для достижения этой цели. Мы уверены, что благодаря работе Chaintroopers и других участников этих проверок у нас есть гораздо более лучший протокол, и нам не терпится выпустить наше усовершенствованное программное обеспечение в мир.

--

--