Резюме управління
Sei зв’язався з Sayfer Security, щоб провести тестування на проникнення MetaMask Snap від Sei у січні 2024 року.
Перш ніж оцінити вищевказані послуги, ми провели стартову нараду з технічною командою Sei і отримали огляд системи та цілей цього дослідження.
За 2 тижні дослідження ми виявили 3 уразливості в системі.
Підсумовуючи, слід зазначити, що після звіту слід внести кілька виправлень, але стан безпеки системи є компетентним.
Після перевірки командою Sayfer ми засвідчуємо, що всі проблеми безпеки, згадані в цьому звіті, були розглянуті командою Sei.
Методологія ризиків
У Sayfer ми прагнемо надавати нашим клієнтам найвищу якість тестування на проникнення. Ось чому ми запровадили комплексну модель оцінки ризиків, щоб оцінити серйозність наших висновків і надати нашим клієнтам найкращі рекомендації щодо пом’якшення.
Наша модель оцінки ризиків базується на двох ключових факторах: ВПЛИВ та ЙМОВІРНІСТЬ. Вплив означає потенційну шкоду, яку може спричинити проблема, наприклад фінансові втрати, репутаційні збитки або непрацююча система. Ймовірність стосується ймовірності виникнення проблеми з урахуванням таких факторів, як складність атаки та кількість потенційних зловмисників.
Об’єднавши ці два фактори, ми можемо створити всебічне розуміння ризику, пов’язаного з певною проблемою, і надати нашим клієнтам чітку та практичну оцінку серйозності проблеми. Такий підхід дозволяє нам визначити пріоритетність наших рекомендацій і гарантувати, що наші клієнти отримають найкращі можливі поради щодо захисту свого бізнесу.
Ризик визначається таким чином:
Уразливості за ризиком
Високий – Пряма загроза ключовим бізнес-процесам.
Medium – Непряма загроза ключовим бізнес-процесам або часткова загроза бізнес-процесам.
низький – Прямої загрози немає. Уразливість може бути використана за допомогою інших уразливостей.
Інформаційний – Цей висновок не вказує на вразливість, але містить коментар, який сповіщає про недоліки дизайну та неправильну реалізацію, які можуть спричинити проблему в довгостроковій перспективі.
Підхід
Методологія оцінки безпеки
Сейфер використовує 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 |
Замовити аудит у Сайфер
Результати оцінки безпеки
[L] Функції повертаються у разі невдачі без повідомлення про помилку
ID | СКАЖИ-01 |
Статус | Виправлено |
Risk | низький |
Вплив на бізнес | Якщо станеться помилка, програма завершиться без звуку. Це може бути проблемою для користувачів, які, якщо dApp не впорається з цим особисто, не отримають конкретного опису помилки. |
Місце розташування | – src/api.ts:30, 65 |
Опис
При дзвінку на signDirect
та signAmino
обробники, якщо account
or account.privateKey
не існують, програма завершує роботу, не повертаючи повідомлення про помилку. Хоча це не становить загрози з точки зору безпеки, користувач не отримає жодного корисного відгуку, що пояснює, чому знімок не вдалося.
- src/api.ts:30, 65
if (!account?.privateKey) return;
Пом'якшення
Коли програма виходить з ладу, вона повинна завжди повертати повідомлення про помилку та відображати його користувачеві.
[I] Невикористана функція
ID | СКАЖИ-02 |
Статус | Виправлено |
Risk | Інформаційний |
Вплив на бізнес | Цей висновок не впливає на функціональність або зручність використання знімка. Тому її віднесли до категорії інформаційних. |
Місце розташування | – src/snapWallet.ts:80; getWallet(число, рядок) |
Опис
Команда getWallet
функція в snapWallet.ts
не викликається жодним обробником RPC, визначеним у знімку. Крім того, ідентична функція з таким самим вмістом уже існує в базовому пакеті.
Пом'якшення
Існування цього дублюваного методу, здається, не виконує жодних функцій. Його можна безпечно видалити.
[I] Відсутня документація
ID | СКАЖИ-03 |
Статус | Виправлено |
Risk | Інформаційний |
Вплив на бізнес | Відсутність документації може стати перешкодою для користувачів і розробників, які створюють dApps із підтримкою Snap. Це також ускладнює таким аудиторам, як ми, оцінку того, чи відповідає код вимогам до дизайну, і вказує на точки збою. |
Місце розташування | - |
Опис
Схоже, що знімок не має будь-якої форми технічної документації, що пояснює окремі методи RPC, їх застосування або функціональні вимоги, яким повинен відповідати код. Хорошою практикою є наявність опису кожної точки входу, яка надається користувачам для використання.
Пом'якшення
Ми пропонуємо створити технічну документацію із зазначенням опису кожного RPC-обробника, а також описом методів спілкування з ними з рівня dApp.