MetaMask Snap Audit Report для Polkadot

Резюме управління

У серпні 2023 року Polkadot зв’язався з компанією Sayfer Security, щоб провести перевірку безпеки програми Polkadot Metamask Snap.

Перед оцінкою вищевказаних послуг ми провели стартову нараду з технічною командою та отримали огляд системи та цілей цього дослідження.

Протягом 2 тижнів дослідження ми виявили 5 вразливостей у кодовій базі знімка.

Підсумовуючи, слід зазначити, що після звіту слід внести кілька виправлень, але стан безпеки системи є компетентним.

Методологія ризиків

У Sayfer ми прагнемо надавати нашим клієнтам найвищу якість тестування на проникнення. Ось чому ми запровадили комплексну модель оцінки ризиків, щоб оцінити серйозність наших висновків і надати нашим клієнтам найкращі рекомендації щодо пом’якшення.

Наша модель оцінки ризиків базується на двох ключових факторах: ВПЛИВ та ЙМОВІРНІСТЬ. Вплив означає потенційну шкоду, яку може спричинити проблема, наприклад фінансові втрати, репутаційні збитки або непрацююча система. Ймовірність стосується ймовірності виникнення проблеми з урахуванням таких факторів, як складність атаки та кількість потенційних зловмисників.

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

Ризик визначається таким чином:

Уразливості за ризиком

Високий – Пряма загроза ключовим бізнес-процесам.
Medium – Непряма загроза ключовим бізнес-процесам або часткова загроза бізнес-процесам.
низький – Прямої загрози немає. Уразливість може бути використана за допомогою інших уразливостей.
Інформаційний – Цей висновок не вказує на вразливість, але містить коментар, який сповіщає про недоліки дизайну та неправильну реалізацію, які можуть спричинити проблему в довгостроковій перспективі.

Строгість
Кількість випусків
Високий
0
Medium
2
низький
2
Інформаційний
1

Підхід

Вступ

Компанія Chainsafe зв’язалася із Sayfer для проведення тестування на проникнення в додатку Polkadot Metamask Snap.

У цьому звіті задокументовано дослідження, проведене Sayfer, спрямоване на вибрані ресурси, визначені в рамках дослідження. Зокрема, у цьому звіті відображається огляд стану безпеки для двох додатків MetaMask Snap та їхньої інфраструктури та реалізацій процесів.

Життєвий цикл нашого проекту тестування на проникнення:

01

Огляд сфери застосування

02

Технічний огляд

03

Перевірка обсягу

04

Модель загрози

05

Оцінка безпеки

06

Оцінка безпеки

Огляд сфери застосування

Під час нашої першої зустрічі та після розуміння потреб компанії ми визначили область дії програми, яка знаходиться за такими URL-адресами, як область проекту:

горошок
Аудиторське зобов'язання: 61787c6d2193e7ec6dee6cf3ecfae4b855717092
Виправляє фіксацію:

Наші тести були проведені в серпні 2023 року

Нехай не буде надто пізно!

Почніть свій аудит із Sayfer

Перевірка обсягу

Ми почали з того, що переконалися, що обсяг, визначений нам клієнтом, є технічно логічним. Вирішення того, яка область підходить для даної системи, є частиною початкового обговорення. Правильне визначення обсягу є ключовим для отримання максимальної цінності для бізнесу від дослідження.

Модель загрози

Під час наших стартових зустрічей з клієнтом ми визначили найважливіші активи, якими володіє додаток.

Ми визначили, що найбільшою загрозою для системи є вкрадені кошти користувачів

Нехай не буде надто пізно!

Почніть свій аудит із Sayfer

Методологія оцінки безпеки

Сейфер використовує OWASP WSTG як наш технічний стандарт під час перевірки веб-додатків. Отримавши повне розуміння системи, ми вирішили, які тести OWASP потрібні для оцінки системи.

Оцінка безпеки

Після розуміння та визначення обсягу, виконання моделювання загроз та оцінки правильних тестів, необхідних для повної перевірки програми на наявність недоліків безпеки, ми виконали нашу оцінку безпеки.

Опис таблиці проблем

Назва випуску

ID КАЗАТИ-??: ідентифікатор для легкого спілкування щодо кожної вразливості
Статус Відкрито/Виправлено/Підтверджено
Risk Представляє фактор ризику проблеми. Додатковий опис див Уразливості за ризиком .
Вплив на бізнес Основний ризик уразливості на рівні бізнесу.
Місце розташування URL-адреса або файл, у якому виявлено цю проблему. Проблеми без розташування не мають конкретного місця та стосуються продукту в цілому.

Опис

Тут ми надаємо короткий опис проблеми та її виникнення, кроки, які ми вжили для її пошуку чи використання, разом із доказом концепції (якщо є) і як ця проблема може вплинути на продукт або його користувачів.

Пом'якшення

Запропоновані варіанти вирішення цієї проблеми та посилання на рекомендовані сайти для подальшого усунення.

Оцінка безпеки

Під час перевірки системи було проведено наступні тести

Збір інформації

Збір інформації Назва тесту
WSTG-INFO-01 Проведіть розвідку пошукових систем на предмет витоку інформації
WSTG-INFO-02 Веб-сервер відбитків пальців
WSTG-INFO-03 Перегляньте метафайли веб-сервера на предмет витоку інформації
WSTG-INFO-04 Перерахуйте програми на веб-сервері
WSTG-INFO-05 Перегляньте вміст веб-сторінки на наявність витоку інформації
WSTG-INFO-06 Визначте точки входу програми
WSTG-INFO-07 Зіставте шляхи виконання через додаток
WSTG-INFO-08 Fingerprint Web Application Framework
WSTG-INFO-09 Веб-програма відбитків пальців
WSTG-INFO-10 Архітектура програми карти

Тестування керування конфігурацією та розгортанням

Тестування керування конфігурацією та розгортанням Назва тесту
WSTG-CONF-01 Перевірка конфігурації мережевої інфраструктури
WSTG-CONF-02 Перевірка конфігурації платформи програми
WSTG-CONF-03 Перевірте обробку розширень файлів для конфіденційної інформації
WSTG-CONF-04 Перегляньте старі резервні копії та файли без посилань на конфіденційну інформацію
WSTG-CONF-05 Перелічіть інтерфейси адміністрування інфраструктури та програм
WSTG-CONF-06 Перевірити методи HTTP
WSTG-CONF-07 Перевірте HTTP Strict Transport Security
WSTG-CONF-08 Перевірте політику між доменами RIA
WSTG-CONF-09 Тестовий дозвіл на файл
WSTG-CONF-10 Тест на захоплення субдоменів
WSTG-CONF-11 Перевірте хмарне сховище

Тестування управління ідентифікацією

Тестування управління ідентифікацією Назва тесту
WSTG-IDNT-01 Визначення ролі тесту
WSTG-IDNT-02 Тестовий процес реєстрації користувача
WSTG-IDNT-03 Тестовий процес надання облікових записів
WSTG-IDNT-04 Тестування для перерахування облікових записів і вгадування облікових записів користувачів
WSTG-IDNT-05 Тестування на наявність слабкої або невимушеної політики імен користувачів

Тестування автентифікації

Тестування автентифікації Назва тесту
WSTG-ATHN-01 Тестування облікових даних, що передаються через зашифрований канал
WSTG-ATHN-02 Тестування облікових даних за замовчуванням
WSTG-ATHN-03 Перевірка слабкого механізму блокування
WSTG-ATHN-04 Тестування на обхід схеми автентифікації
WSTG-ATHN-05 Тестування вразливого пароля для запам'ятовування
WSTG-ATHN-06 Тестування на недоліки кешу браузера
WSTG-ATHN-07 Тестування політики щодо слабких паролів
WSTG-ATHN-08 Тестування на слабку відповідь на питання безпеки
WSTG-ATHN-09 Тестування на слабкі функції зміни або скидання пароля
WSTG-ATHN-10 Тестування слабкішої автентифікації в альтернативному каналі

Тестування авторизації

Тестування авторизації Назва тесту
WSTG-ATHZ-01 Тестування файлу проходження каталогу
WSTG-ATHZ-02 Тестування на обхід схеми авторизації
WSTG-ATHZ-03 Тестування на підвищення привілеїв
WSTG-ATHZ-04 Тестування незахищених прямих посилань на об’єкти

Тестування керування сеансами

Тестування керування сеансами Назва тесту
WSTG-SESS-01 Тестування схеми керування сеансами
WSTG-SESS-02 Тестування атрибутів файлів cookie
WSTG-SESS-03 Тестування на фіксацію сесії
WSTG-SESS-04 Тестування відкритих змінних сеансу
WSTG-SESS-05 Тестування на підробку міжсайтових запитів
WSTG-SESS-06 Тестування функціональності виходу з системи
WSTG-SESS-07 Тайм-аут тестового сеансу
WSTG-SESS-08 Тестування для Session Puzzling
WSTG-SESS-09 Тестування на викрадення сесії

Тестування перевірки даних

Тестування перевірки даних Назва тесту
WSTG-INPV-01 Тестування відображеного міжсайтового сценарію
WSTG-INPV-02 Тестування збережених міжсайтових сценаріїв
WSTG-INPV-03 Перевірка HTTP Verb Tampering
WSTG-INPV-04 Тестування на забруднення параметрів HTTP
WSTG-INPV-05 Тестування для впровадження SQL
WSTG-INPV-06 Тестування ін’єкції LDAP
WSTG-INPV-07 Тестування для впровадження XML
WSTG-INPV-08 Тестування для введення SSI
WSTG-INPV-09 Тестування для впровадження XPath
WSTG-INPV-10 Тестування ін’єкції IMAP SMTP
WSTG-INPV-11 Тестування на впровадження коду
WSTG-INPV-12 Тестування для введення команд
WSTG-INPV-13 Тестування ін'єкції рядка формату
WSTG-INPV-14 Тестування на інкубовану вразливість
WSTG-INPV-15 Тестування контрабанди HTTP Splitting
WSTG-INPV-16 Тестування вхідних запитів HTTP
WSTG-INPV-17 Тестування для впровадження заголовка хосту
WSTG-INPV-18 Тестування впровадження шаблону на стороні сервера
WSTG-INPV-19 Тестування на підробку запитів на стороні сервера

Обробка помилок

Обробка помилок Назва тесту
WSTG-ERRH-01 Тестування на неправильну обробку помилок
WSTG-ERRH-02 Тестування трасування стека

Криптографія

Криптографія Назва тесту
WSTG-CRYP-01 Тестування на слабку безпеку транспортного рівня
WSTG-CRYP-02 Тестування для Padding Oracle
WSTG-CRYP-03 Тестування конфіденційної інформації, надісланої через незашифровані канали
WSTG-CRYP-04 Тестування на слабке шифрування

Тестування бізнес-логіки

Тестування бізнес-логіки Назва тесту
WSTG-BUSL-01 Перевірте перевірку даних бізнес-логіки
WSTG-BUSL-02 Перевірте здатність підробляти запити
WSTG-BUSL-03 Перевірка цілісності тесту
WSTG-BUSL-04 Тест на час процесу
WSTG-BUSL-05 Перевірте обмеження кількості разів, коли функція може бути використана
WSTG-BUSL-06 Тестування для обходу робочих потоків
WSTG-BUSL-07 Перевірте захист від неправильного використання програми
WSTG-BUSL-08 Тестове завантаження файлів неочікуваних типів
WSTG-BUSL-09 Тестове завантаження шкідливих файлів

Тестування на стороні клієнта

Тестування на стороні клієнта Назва тесту
WSTG-CLNT-01 Тестування міжсайтового сценарію на основі DOM
WSTG-CLNT-02 Тестування на виконання JavaScript
WSTG-CLNT-03 Тестування ін'єкції HTML
WSTG-CLNT-04 Тестування перенаправлення URL-адрес на стороні клієнта
WSTG-CLNT-05 Тестування впровадження CSS
WSTG-CLNT-06 Тестування маніпуляції ресурсами на стороні клієнта
WSTG-CLNT-07 Перевірте спільний доступ до ресурсів між джерелами
WSTG-CLNT-08 Тестування міжсайтового перепрошивки
WSTG-CLNT-09 Тестування на Clickjacking
WSTG-CLNT-10 Тестування WebSockets
WSTG-CLNT-11 Перевірте веб-повідомлення
WSTG-CLNT-12 Тестування сховища браузера
WSTG-CLNT-13 Тестування на включення міжсайтового сценарію

Тестування API

Тестування API Назва тесту
WSTG-APIT-01 Тестування GraphQL

Замовити аудит у Сайфер





    Цей сайт захищено reCAPTCHA і Google Політика Конфіденційності та Умови обслуговування застосовувати.

    Результати оцінки безпеки

    URL-адреси RPC визначаються як wsRpcUrl під час використання HTTP

    ID СКАЖИ-01
    Статус відкритий
    Risk Medium
    Вплив на бізнес Важко визначити вплив без робочої демонстрації. Якщо зміна помилкова, це може порушити знімок, інакше це проста проблема документації/іменування змінних.
    Місце розташування packages/snap/src/configuration/predefined.ts:11,22,33

    Опис

    URL-адреси RPC окремих протоколів були змінені в останній версії знімка. HTTP (http://) використовується замість WebSocket (wss://).

    Це несподівано, тому що офіційна документація Polkadot вказує лише адреси веб-сокетів у своїх ресурсах. Крім того, у багатьох місцях коду імена змінних все ще містять префікс ws, наприклад wsRpcurl.

    predefined.ts:

    wsRpcUrl: 'https: /
    
    wsRpcUrl: 'https: /kusama-rpc.polkadot.io/'
    {...}
    wsRpcUrl: 'https: /westend-rpc.polkadot.io/'
    {...}
    wsRpcUrl: 'https: /rpc.polkadot.io/'
    

    Пом'якшення

    Переконайтеся, що передбачається використовувати протокол HTTP. Якщо так, змініть офіційну документацію, щоб відобразити це, і змініть відповідні назви змінних.

     

    конформації для ключових функцій не обробляються у разі відхилення

    ID СКАЖИ-02
    Статус відкритий
    Risk Medium
    Вплив на бізнес Якщо користувач відхиляє транзакцію, нічого не буде повернено, що призведе до помилки JavaScript, загальної невизначених повідомлення або взагалі нічого. Це може спричинити невизначену або неочікувану поведінку.
    Місце розташування – packages/snap/src/rpc/exportSeed.ts:14
    – packages/snap/src/rpc/substrate/sign.ts:33,53

    Опис

    Для ключових функцій Snap (таких як відображення закритого ключа або підписання повідомлення) для користувача відображаються діалогові вікна, щоб підтвердити, чи він знає, що він приймає. Якщо користувач підтверджує транзакцію, вона виконується. І навпаки, коли користувач відхиляє транзакцію, не обробляється взагалі.

    exportSeed(SnapsGlobalObject), зауважте, що блоку else немає

    if (confirmation) {
        const bip44Node = (await snap.request({
        method: "snap_getBip44Entropy",
        params: { coinType: kusamaCoinType },
    })) as JsonBIP44CoinTypeNode;
    

    signPayloadJSON(SnapsGlobalObject, ApiPromise, SignerPayloadJSON)

    if (confirmation) {
        const extrinsic = api.registry.createType('ExtrinsicPayload', payload, { version: payload.version });
        return extrinsic.sign(keyPair);
    }
    

    signPayloadRaw(SnapsGlobalObject, ApiPromise, SignerPayloadRaw)

    if (confirmation) {
        const signedBytes = keyPair.sign(hexToU8a(payload.data));
        return {
        signature: u8aToHex(signedBytes)
    };
    

    На жаль, оскільки автоматизовані тести не спрацювали, ми не змогли остаточно перевірити та підтвердити цей сценарій.

    Пом'якшення

    Обробляти ще випадку, коли користувач відхиляє транзакцію, у цьому випадку має відображатися відповідна помилка.

     

    Немає діалогового вікна підтвердження під час надсилання

    ID СКАЖИ-03
    Статус відкритий
    Risk низький
    Вплив на бізнес Без діалогового вікна підтвердження існує ризик того, що потенційний користувач помилково виконає транзакцію, надіславши кошти не на той рахунок.
    Місце розташування – packages/snap/src/rpc/send.ts:7-34

    Опис

    Під час підписання повідомлень або відображення закритого ключа знімок відображає діалогове вікно із запитом користувача, чи впевнений він, що хоче продовжити. Однак під час надсилання таке діалогове вікно підтвердження не відображається.

    Пом'якшення

    Реалізуйте діалогове вікно з запитом у користувача підтвердити транзакцію.

     

    увімкнути PolkadotSnap Повертає помилку під час використання параметра за замовчуванням ім'я мережі

    ID СКАЖИ-04
    Статус відкритий
    Risk низький
    Вплив на бізнес Невідповідність бізнес-припущенням, що Westend є мережею за умовчанням.
    Місце розташування – packages/adapter/src/index.ts:27-29

    Опис

    Було помічено, що незважаючи на вибір Westend як мережі за замовчуванням у snap/src/configuration/predefined.ts, якщо адаптер виконує свою єдину відкриту функцію enablePolkadotSnap(), не вказуючи config.networkName, буде повернено помилку.

    Це суперечить припущенням Snap, описаним серед інших у файлі README.md адаптера, який вказує на те, що вказівка ​​конфігурації замінить конфігурацію за замовчуванням.

    packages/snap/src/configuration/predefined.ts; рядки 13-22, 35

    
    export const westendConfiguration: SnapConfig = {
        addressPrefix: 42,
        networkName: "westend",
        unit: {
            decimals: 12,
            image: "https: /svgshare.com/i/L2d.svg",
            symbol: "WND",
        },
        wsRpcUrl: "wss: /westend-rpc.polkadot.io/",
    };
    [ .]
    export const defaultConfiguration: SnapConfig = westendConfiguration;
    

    packages/snap/src/configuration/predefined.ts; рядки 27-29

    if (!config.networkName) {
    throw new Error("Configuration must at least define network type");
    }
    
    

    Пом'якшення

    Судячи з документації та з коду в попередньо визначені.ц, ця помилка не повинна повертатися, і слід використовувати Westend. І навпаки, Westend не слід встановлювати за замовчуванням, і в документацію слід вносити зміни, щоб відобразити це.

     

    Неробоча демонстрація

    ID СКАЖИ-05
    Статус відкритий
    Risk Інформаційний
    Вплив на бізнес Наявність робочої демонстрації може як допомогти користувачам перевірити функціональність Snap, так і допомогти аудиторам значно покращити їхнє тестування.
    Місце розташування -

    Опис

    Відповідно до документації командування yarn install & yarn run demo should run a working demo Snap, що дозволяє встановити його та використовувати різні функції. На жаль, під час інсталяції консоль браузера видала помилку. Таким чином, перевірити Snap як «живий організм» було неможливо}

    Пом'якшення

    Ми пропонуємо привести Snap у придатний для використання стан, а потім провести поглиблені тести на реальних транзакціях у мережі Polkadot.

    Ви можете знайти більше інформації про це в нашому блозі

    Блог Sayfer зосереджений на web3, безпеці та дослідженні вразливостей. Ми вважаємо, що в індустрії кібербезпеки вкрай важливо бути в курсі останніх тенденцій і досягнень. Наразі наша команда досвідчених дослідників із задоволенням вивчає передові технології блокчейн і web3.
    Зв'яжіться з нами

    Підтримувати зв'язок

    Телефони
    Місце розташування
    Тель-Авів, Ізраїль
    Електронна адреса
    Месенджери:
    Будь ласка, не соромтеся звертатися до нас, ми будемо раді відповісти!





      Цей сайт захищено reCAPTCHA і Google Політика Конфіденційності та Умови обслуговування застосовувати.
      Перейти до вмісту