Аудит безпеки контрактів Nym mixnet і vesting
Аудит безпеки змішувальної мережі Nym та контрактів на передачу активів
Вступ
У грудні 2022 року компанія Nym провела незалежний аудит безпеки, що його реалізувала Oak Security, консалтингова компанія з кібербезпеки, яка базується в Німеччині та спеціалізується на аудиті блокчейнів третього покоління та децентралізованих протоколів. З великою досвідченістю в таких екосистемах, як Cosmos, Terra, Polkadot і Flow, Oak Security отримав завдання оцінити два критичних компоненти екосистеми Nym: (1) Nym mixnet та контракти на розподіл (див. повний звіт) та (2) Nym Wallet (див. повний звіт). Аудит був спрямований на оцінку надійності цих компонентів, виявлення потенційних уразливостей та забезпечення дотримання найкращих практик у розробці коду. Щоб спростити стеження за знайденими даними, ми розділили результати за кожним компонентом. Ви можете ознайомитися з підсумком аудиту гаманця Nym тут.
Аудит безпеки контрактів Nym mixnet і vesting
Аудит, що тривав 2 тижні, включав команду з 4-х експертів. Команда Nym надала Oak Security повний доступ до кодової бази проекту, детальних специфікацій проекту та супутньої документації. Обсяг аудиту охоплював контракти/mixnet, контракти/репозиторії розподілу та відповідні імпорти цими контрактами для Nym mixnet та контрактів на розподіл.
Компанія Oak Security ретельно перевірила код, поєднуючи автоматизований аналіз вихідного коду та залежностей з ручною перевіркою рядок за рядком, щоб виявити вразливості безпеки, оцінити якість коду та оцінити відповідність принципам безпечного кодування. Цей комплексний підхід включав глибокий аналіз критичних областей, таких як вразливості до станів гонок, проблеми підпорожнє і переповнення, практики управління ключами, криптографічна надійність, ризики витоку даних, обробка паролів, а також контроль доступу і авторизації.
Основною метою аудиту було забезпечити правильну роботу протоколів, виявити будь-які вразливості, які можуть бути використані, або помилки смарт-контрактів, а також надати рекомендації щодо покращення безпеки коду та його читабельності.
Огляд висновків
Контракти Nym mixnet і vesting характеризувалися високою читабельністю та зрозумілістю, з надійним покриттям тестами, що підтримує їх надійність. Аудит виявив 19 знахідок, зокрема дев'ять вразливостей безпеки—серед яких критичні та серйозні проблеми—та десять загальних слабкостей, які класифікуються як незначні або інформаційні.
Команда Nym швидко вирішила всі критичні та серйозні проблеми. Команда Oak Security перевірила та затвердила наші виправлення.
NYM-MIX-VEST-CONTRACT-1: Виконання події епохи або інтервалу, що не вдалося, постійно блокує просування епохи (Критично)
Аудит виявив вразливість у обробці повідомлень AdvanceCurrentEpoch у contracts/mixnet/src/interval/transactions.rs. Послідовний цикл обробляє всі очікуючі події безпосередньо в контексті транзакції, що означає, що одна невдала подія може скасувати всю транзакцію, ефективно зупиняючи прогрес епохи та інтервалу і змушуючи протокол застрягнути.
Щоб вирішити цю проблему, аудитори рекомендували обгортати виконання подій у підповідомлення з політикою відповіді. Цей підхід дозволить системі обробляти збої коректно, не скасовуючи всю транзакцію. Проте ми навмисно обрали не дотримуватися цієї рекомендації. Виникнення помилки під час виконання події вказує на значний логічний збій, який може зіпсувати механізм винагороди, роблячи за краще зупинити просування епохи для ручної перевірки, аніж ризикувати працювати в пошкодженому стані. Замість цього ми реалізували покращений моніторинг у Nym API для виявлення та сповіщення про невдалі етапи просування. Цей підхід забезпечує своєчасне виявлення таких збоїв, що дозволяє вжити заходів для вирішення проблем.
NYM-MIX-VEST-CONTRACT-2: Зловмисники можуть змусити втрачені змішані вузли приєднатися до родини без їхньої згоди, щоб об'єднати велику кількість з них в одному шарі (Критично)
У уразливості, виявленій в повідомленні JoinFamilyOnBehalf, може бути можливість для атакуючого додати змішувальний вузол до сім’ї без його згоди. Створюючи зловмисну сім'ю та використовуючи ідентифікатор вузла змішування жертви, підписаний його приватним ключем, зловмисник може заманити вузол змішування в цю сім'ю. Це може потенційно дозволити зловмиснику об'єднати орфанні змішувачі в єдину родину, порушуючи мережу шляхом концентрації вузлів в одному шарі та збільшуючи шанси зловмисника на вплив на маршрутизацію.
Щоб вирішити вразливість у повідомленні JoinFamilyOnBehalf, механізм підпису контракту був перероблений. Замість простого підписання ідентичності mix node, підписи були оновлені для включення повідомлення з чітким наміром і унікальним nonce. Ця зміна гарантує, що підписи не можуть бути повторно використані чи відтворені.
NYM-MIX-VEST-КОНТРАКТ-3: Безкінечна ітерація в обробці повідомлення TrackUndelegation може призвести до того, що користувач не зможе анулювати делегування, що також назавжди заважає просуванню епохи (Критично)
Необмежена ітерація повідомлення TrackUndelegation може призвести до виснаження газу під час обробки облікових записів з численними делегаціями, що заважає користувачам анулювати делегування. Ця помилка також зупинить просування епохи, залишивши протокол застряглим у поточному стані.
Щоб вирішити цю проблему, ми запровадили обмеження в 25 делегувань, що надходять по одному рахунку. Це рішення ґрунтувалося на найбільшій зафіксованій кількості делегувань прав у момент часу.
Оновлення: Станом на 2024 рік, можливість створення делегацій із правом на участь повністю вимкнена.
NYM-MIX-VEST-CONTRACT-4: Зловмисник може випередити повідомлення BondMixnodeOnBehalf та CreateFamilyOnBehalf й змінити їх вміст (Критично)
Ця уразливість дозволяє зловмиснику випередити повідомлення BondMixNodeOnBehalf і CreateFamilyOnBehalf, витягти підпис та змінити корисне навантаження. У випадку з BondMixNodeOnBehalf, зловмисник також міг би виступати як проксі, отримавши повний контроль над зареєстрованим бондом.
Щоб вирішити цю вразливість, ми реалізували двоступеневе рішення. По-перше, ми застосували зміни до створення підпису, описані в NYM-MIX-VEST-CONTRACT-2, які додали чіткий намір та унікальний nonce. По-друге, ми обмежили юридичну адресу проксі на обліковому записі на користь, що забезпечує неможливість атаки з встановленням себе як проксі та отримання несанкціонованого контролю над зареєстрованими облігаціями.
Оновлення: Станом на 2024 рік всі операції через проксі заблоковані, що робить атаку недіяльною.
NYM-MIX-VEST-КОНТРАКТ-5: Підписи можна відтворювати в рамках транзакцій «від імені», щоб підробити користувачів (Критично)
Ця уразливість дозволяє повторно використовувати підписи в транзакціях "від імені", що дозволяє зловмисникам видати себе за користувачів. Оскільки підписи містять лише необроблені дані без додаткових метаданих, таких як ненумератор або ідентифікатори повідомлень, зловмисник може повторно використати підпис з одного повідомлення для іншого, щоб примусово виключити членів сім'ї. Крім того, зловмисники можуть повторно використовувати підписи для того ж типу повідомлень, що дозволяє учаснику повторно приєднатися до сім'ї кілька разів, використовуючи ту ж підпис.
Рішення цієї проблеми відображає те, що впроваджено в NYM-MIX-VEST-CONTRACT-4.
NYM-MIX-VEST-CONTRACT-6: Генерація ключів для пар (власник, проксі) може призвести до зіткнень (Критично)
Ця вразливість дозволила б парі адрес (власник, проксі) створювати той самий результат XOR у функції generate_owner_storage_subkey, що може призвести до колізій ключів і перезапису даних.
Рішення обмежити юридичний проксі лише адресою контракту, що надає права, яке було застосовано в NYM-MIX-VEST-CONTRACT-4, також вирішує цю вразливість. Забезпечуючи, що операція XOR завжди виконується на постійний рядок, ця зміна ефективно усуває ризик зіткнень.
NYM-MIX-VEST-CONTRACT-7: track_delegation може перезаписати існуючу делегацію, якщо обробляється більше ніж одна в рамках одного блоку (Критично)
Ця проблема може призвести до випадкових зіткнень ключів, якщо в межах одного блоку буде здійснено кілька делегацій, що може спричинити перезапис функції save_delegation існуючої делегації, в результаті чого буде втрачена попередня делегація.
Щоб вирішити проблему, ми змінили логіку функції save_delegation, щоб спочатку зчитувати існуючу суму делегування, перш ніж зберегти нову. Якщо делегація вже існує для того ж ключа, ми отримуємо поточну суму, додаємо нову делегацію та зберігаємо оновлену загальну суму, гарантуючи, що жодна існуюча делегація не буде перезаписана.
Власник облігацій не може виконувати операції, якщо облігація створена "від імені" довіреної особи (основної особи)
Ця проблема перешкоджатиме власнику облігації виконувати будь-які операції з їхньою облігацією, якщо облігація була створена "від імені" іншої особи, а поточна транзакція ініційована власником, а не представником. Оскільки проксі може бути скомпрометовано або втрачено, а власник не має змоги його змінити, це може призвести до втрати контролю власника над його бондом.
Ми не вважаємо це проблемою, оскільки це навмисна поведінка за задумом. Коли вузол змішування закріплений (або здійснюються делегування) через контракт на надання, всі подальші взаємодії з облігацією або делегуванням очікується, що відбуватимуться лише через контракт на надання.
Оновлення: Станом на 2024 рік договір про надання прав скасовано.
NYM-MIX-VEST-CONTRACT-9: Виконання повідомлень LeaveFamily та LeaveFamilyOnBehalf може завершитися невдачею, якщо значна кількість вузлів змішування є членами родини (Major)
Ця проблема призведе до збою повідомлень LeaveFamily та LeaveFamilyOnBehalf через вичерпання газу при ітерації через велику кількість членів родини в мапі MEMBERS. Це запобігло б виходу змішаних вузлів з родини, ефективно блокуючи їх у поточній родині.
Рішення: Рішення полягало в перебудові логіки для прямого доступу до карти ЧЛЕНІВ та перевірки членства вузла змішування. Ця зміна усунула потребу в ітераціях, що могло призвести до помилок недостатньої кількості газу, і забезпечила можливість членам успішно покидати сім'ю, навіть коли в сім'ї є багато членів.
Оновлення: Станом на 2024 рік, сім'ї вузлів видалено.
Останні слова
Ми хочемо подякувати команді Oak Security за їхній досвід і відданість протягом цього аудитного процесу. Ми також висловлюємо вдячність за співпрацю та професіоналізм, проявлені під час планування та виконання аудиту. Наша безперервна відданість безпеці залишається пріоритетом, і ми з нетерпінням чекаємо на продовження партнерства з експертами з безпеки для підтримки найвищих стандартів для нашої екосистеми.