# Объяснение уязвимости аргент-контракта Zero-Click **Published by:** [CryptoHedonism](https://paragraph.com/@cryptohedonism/) **Published on:** 2022-12-08 **URL:** https://paragraph.com/@cryptohedonism/zero-click ## Content Мы обнаружили критическую уязвимость в контрактах Argent, развернутых с версией 5.0.x приложения кошелька Argent-X, что позволяет любому получить полный контроль над учетной записью Argent. Уязвимость эксплуатируется путем отправки транзакции определенным образом в обход логики проверки подписи Argent Contract. Это позволит злоумышленнику отправить любую транзакцию с пустой или ложной подписью, которая будет выполнена и принята в сети. Мы продемонстрировали уязвимость, отправив транзакцию Transfer с пустой подписью на контракт учетной записи Argent и переведя ETH на кошелек по нашему выбору. Об этой проблеме сообщили в Argent, и она быстро приняла меры по ее устранению.Сказка о двух версиях В недавней версии StarkNet v0.10.0, выпущенной около месяца назад, протокол представил новый уровень версии транзакции (v1), который изменяет способ проверки транзакций контрактами учетной записи Starknet путем отделения логики проверки транзакций от логики выполнения транзакций (сама проверка по-прежнему сделано как часть контракта с учетной записью, но теперь это вызывает ОС StarkNet). Это полезно, поскольку позволяет операционной системе StarkNet проверять достоверность транзакции перед ее запуском, тем самым предотвращая DDoS-атаки со стороны злоумышленника, который не может создать действительную подпись.Поддержка транзакций, выполняемых в старой версии (v0), оставалась неизменной, что позволяло пользователям постепенно переходить на новую схему проверки контракта с учетной записью ОС. Поскольку ОС поддерживает обе версии транзакций (v0 и v1), контракт учетной записи также должен поддерживать обе версии.Процесс проверки подписи Сила кошельков на основе смарт-контрактов (так называемых абстракций учетных записей) заключается в том, что они позволяют, среди прочего, использовать произвольную логику проверки. Но, как говорится, с большой силой приходит и большая ответственность.Разрешение произвольной логики проверки означает, что контракт учетной записи может решить, какую логику проверки запускать — он может запускать проверку собственного протокола или ту, которая закодирована самостоятельно. (опять же, разница между транзакцией v0 и v1 заключается в том, кто вызывает эту функцию логики проверки — контракт или ОС). Однако в текущем состоянии сети учетная запись должна ожидать получения транзакций обоих типов, но может решить, что она поддерживает только более новую версию транзакций — v1.*Уязвимость В последней реализации контракта Argent, которая была развернута в сети 4 ноября и была доступна как часть Argent-X v5.0.x ранее на этой неделе, неявно предполагалось, что контракт будет обрабатывать только транзакции v1. как видно из приведенного ниже фрагмента кода. Однако утверждение было помещено в функцию проверки, которая в случае транзакции v1 вызывается ОС, а в транзакции v0 должна вызываться функцией _execute_ контракта. Таким образом, контракт учетной записи, который хочет поддерживать только транзакцию v1, должен поместить утверждение версии в функцию _execute_, поскольку ОС не вызывает функцию _validate_. Подразумеваемое Учитывая вышеуказанную уязвимость, злоумышленник может отправить любую транзакцию v0 с пустой (или тарабарской) подписью, и она пройдет без проблем и будет включена в блок как действительная транзакция.Важно отметить, что это атака с нулевым кликом, которая не требует каких-либо действий или взаимодействия со стороны пользователя. Злоумышленник мог просто просмотреть все новые и обновленные развернутые учетные записи Argent и перенести все активы из каждой учетной записи в учетную запись по своему выбору.Обнаружение проблемы Мы твердо верим в Браавос и поэтому уделяем большое внимание испытаниям. Особенно контрактные испытания. В рамках нашей подготовки к выпуску поддержки нашего кошелька для версии 0.10.x мы создали обширный набор тестов, и в ходе этого процесса возникла тонкая проблема, связанная с тем, где проверять версию транзакции.Поскольку это довольно деликатная проблема, которую трудно воспроизвести с помощью стандартных инструментов Starknet Dev, мы подумали, что она может ускользнуть от других разработчиков контрактов с учетными записями, поэтому, как только мы закончили наш набор тестов, мы переключили наше внимание на проверку, является ли это проблемой. реальная проблема или просто ошибочное беспокойство. И действительно, когда мы начали проверять договор учетной записи Argent, проблема сразу же проявилась. Нам удалось воспроизвести уязвимость очень быстро. Ниже приведен пример транзакции, принятой в сети и отправленной непосредственно в инфраструктуру Starknet без какого-либо взаимодействия с приложением кошелька. Подпись транзакции представляет собой пустую подпись и переносит ETH с уязвимой учетной записи Argent на произвольную учетную запись. ## Publication Information - [CryptoHedonism](https://paragraph.com/@cryptohedonism/): Publication homepage - [All Posts](https://paragraph.com/@cryptohedonism/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@cryptohedonism): Subscribe to updates