Резюме управления
Компания Qtum связалась с Sayfer Security для проведения тестирования на проникновение в MetaMask Snap от Qtum в 05/2024 г.
Прежде чем оценить вышеуказанные услуги, мы провели стартовую встречу с технической командой Qtum и получили обзор системы и целей этого исследования.
За период исследования в 2 недели мы обнаружили 5 уязвимостей в системе, ни одна из них не является критической.
В заключение следует отметить, что после отчета необходимо внести несколько исправлений, но уровень безопасности системы является компетентным.
После проверки командой Sayfer мы подтверждаем, что все проблемы безопасности, упомянутые в этом отчете, были решены командой Qtum.
Методология риска
В Sayfer мы стремимся предоставлять нашим клиентам тестирование на проникновение высочайшего качества. Вот почему мы внедрили комплексную модель оценки рисков, чтобы оценить серьезность наших выводов и предоставить нашим клиентам наилучшие рекомендации по их снижению.
Наша модель оценки рисков основана на двух ключевых факторах: ВЛИЯНИЕ и ВЕРОЯТНОСТЬ. Под воздействием понимается потенциальный вред, который может возникнуть в результате проблемы, например финансовые потери, репутационный ущерб или неработоспособность системы. Вероятность означает вероятность возникновения проблемы с учетом таких факторов, как сложность атаки и количество потенциальных злоумышленников.
Объединив эти два фактора, мы можем получить полное представление о риске, связанном с конкретной проблемой, и предоставить нашим клиентам четкую и действенную оценку серьезности проблемы. Такой подход позволяет нам расставлять приоритеты в наших рекомендациях и гарантировать, что наши клиенты получат наилучшие советы о том, как защитить свой бизнес.
Риск определяется следующим образом:

Уязвимости по рискам
Высокий – Прямая угроза ключевым бизнес-процессам.
Средний – Косвенная угроза ключевым бизнес-процессам или частичная угроза бизнес-процессам.
Низкий – Прямых угроз нет. Уязвимость может быть использована с использованием других уязвимостей.
Информационный - Этот вывод не указывает на уязвимость, но содержит комментарий, который уведомляет о недостатках дизайна и неправильной реализации, которые могут вызвать проблему в долгосрочной перспективе.
Подход
Методология оценки безопасности
Сайфер использует ОВАСП ВСТГ в качестве нашего технического стандарта при рассмотрении веб-приложений. Получив полное представление о системе, мы решили, какие тесты OWASP необходимы для ее оценки.
Оценка безопасности
После понимания и определения области применения, выполнения моделирования угроз и оценки правильных тестов, необходимых для полной проверки приложения на наличие недостатков безопасности, мы провели оценку безопасности.
Описание таблицы проблем
Название проблемы
| ID | СКАЗАТЬ-??: Идентификатор для удобного информирования о каждой уязвимости. |
| Статус | Открытый/фиксированный/подтвержденный |
| Снижение | Представляет фактор риска проблемы. Дальнейшее описание см. Уязвимости по рискам . |
| Влияние на бизнес | Основной риск уязвимости на бизнес-уровне. |
| Локация | URL-адрес или файл, в котором была обнаружена эта проблема. Проблемы без местоположения не имеют конкретного местоположения и относятся к продукту в целом. |
Описание
Здесь мы даем краткое описание проблемы и того, как она возникла, шаги, которые мы предприняли для ее обнаружения или использования, а также доказательство концепции (если таковое имеется), а также то, как эта проблема может повлиять на продукт или его пользователей.
риска
Предлагаемые варианты решения этой проблемы и ссылки на рекомендованные сайты для дальнейшего устранения.
Оценка безопасности
В ходе аудита системы были проведены следующие тесты
Сбор информации
| Сбор информации | Название теста |
| ВСТГ-ИНФО-01 | Проведение поисковой разведки на предмет утечки информации |
| ВСТГ-ИНФО-02 | Веб-сервер отпечатков пальцев |
| ВСТГ-ИНФО-03 | Проверка метафайлов веб-сервера на предмет утечки информации |
| ВСТГ-ИНФО-04 | Перечислить приложения на веб-сервере |
| ВСТГ-ИНФО-05 | Проверка содержимого веб-страницы на предмет утечки информации |
| ВСТГ-ИНФО-06 | Определите точки входа приложения |
| ВСТГ-ИНФО-07 | Сопоставление путей выполнения через приложение |
| ВСТГ-ИНФО-08 | Платформа веб-приложений отпечатков пальцев |
| ВСТГ-ИНФО-09 | Веб-приложение для отпечатков пальцев |
| ВСТГ-ИНФО-10 | Архитектура картографического приложения |
Тестирование управления конфигурацией и развертыванием
| Тестирование управления конфигурацией и развертыванием | Название теста |
| WSTG-CONF-01 | Конфигурация тестовой сетевой инфраструктуры |
| WSTG-CONF-02 | Конфигурация тестовой платформы приложений |
| WSTG-CONF-03 | Проверка обработки расширений файлов для конфиденциальной информации |
| WSTG-CONF-04 | Просмотрите старые резервные копии и файлы без ссылок на конфиденциальную информацию |
| WSTG-CONF-05 | Перечисление интерфейсов администрирования инфраструктуры и приложений |
| WSTG-CONF-06 | Тестовые HTTP-методы |
| WSTG-CONF-07 | Тестирование строгой транспортной безопасности HTTP |
| WSTG-CONF-08 | Проверка междоменной политики RIA |
| WSTG-CONF-09 | Разрешение тестового файла |
| WSTG-CONF-10 | Тест на захват поддомена |
| WSTG-CONF-11 | Протестировать облачное хранилище |
Тестирование управления идентификацией
| Тестирование управления идентификацией | Название теста |
| ВСТГ-ИДНТ-01 | Определения тестовых ролей |
| ВСТГ-ИДНТ-02 | Процесс регистрации тестового пользователя |
| ВСТГ-ИДНТ-03 | Процесс создания тестового аккаунта |
| ВСТГ-ИДНТ-04 | Тестирование перечисления учетных записей и угадываемой учетной записи пользователя |
| ВСТГ-ИДНТ-05 | Тестирование на слабую или несоблюдение политики имени пользователя |
Проверка подлинности
| Проверка подлинности | Название теста |
| ВСТГ-АТН-01 | Проверка учетных данных, передаваемых по зашифрованному каналу |
| ВСТГ-АТН-02 | Проверка учетных данных по умолчанию |
| ВСТГ-АТН-03 | Проверка механизма слабой блокировки |
| ВСТГ-АТН-04 | Тестирование обхода схемы аутентификации |
| ВСТГ-АТН-05 | Тестирование на наличие уязвимого пароля |
| ВСТГ-АТН-06 | Тестирование уязвимостей кэша браузера |
| ВСТГ-АТН-07 | Проверка политики ненадежных паролей |
| ВСТГ-АТН-08 | Тестирование на слабый ответ на контрольный вопрос |
| ВСТГ-АТН-09 | Тестирование функций смены или сброса слабого пароля |
| ВСТГ-АТН-10 | Тестирование на более слабую аутентификацию в альтернативном канале |
Авторизация Тестирование
| Авторизация Тестирование | Название теста |
| ВСТГ-АТХЗ-01 | Тестирование файла обхода каталога Include |
| ВСТГ-АТХЗ-02 | Тестирование обхода схемы авторизации |
| ВСТГ-АТХЗ-03 | Проверка на повышение привилегий |
| ВСТГ-АТХЗ-04 | Тестирование небезопасных прямых ссылок на объекты |
Тестирование управления сессиями
| Тестирование управления сессиями | Название теста |
| ВСТГ-СЭСС-01 | Тестирование схемы управления сеансом |
| ВСТГ-СЭСС-02 | Проверка атрибутов файлов cookie |
| ВСТГ-СЭСС-03 | Тестирование фиксации сеанса |
| ВСТГ-СЭСС-04 | Тестирование открытых переменных сеанса |
| ВСТГ-СЭСС-05 | Тестирование на подделку межсайтовых запросов |
| ВСТГ-СЭСС-06 | Тестирование функциональности выхода из системы |
| ВСТГ-СЭСС-07 | Время ожидания сеанса тестирования |
| ВСТГ-СЭСС-08 | Тестирование на загадку сеанса |
| ВСТГ-СЭСС-09 | Тестирование на перехват сеанса |
Проверка данных
| Проверка данных | Название теста |
| ВСТГ-ИНПВ-01 | Тестирование отраженного межсайтового скриптинга |
| ВСТГ-ИНПВ-02 | Тестирование сохраненных межсайтовых сценариев |
| ВСТГ-ИНПВ-03 | Тестирование на подделку глагола HTTP |
| ВСТГ-ИНПВ-04 | Тестирование на загрязнение параметров HTTP |
| ВСТГ-ИНПВ-05 | Тестирование на SQL-инъекцию |
| ВСТГ-ИНПВ-06 | Проверка внедрения LDAP |
| ВСТГ-ИНПВ-07 | Тестирование XML-инъекций |
| ВСТГ-ИНПВ-08 | Тестирование на инъекцию SSI |
| ВСТГ-ИНПВ-09 | Тестирование XPath Injection |
| ВСТГ-ИНПВ-10 | Тестирование IMAP SMTP Injection |
| ВСТГ-ИНПВ-11 | Тестирование на внедрение кода |
| ВСТГ-ИНПВ-12 | Тестирование на внедрение команд |
| ВСТГ-ИНПВ-13 | Тестирование на внедрение строки формата |
| ВСТГ-ИНПВ-14 | Тестирование инкубационной уязвимости |
| ВСТГ-ИНПВ-15 | Тестирование контрабанды разделения HTTP |
| ВСТГ-ИНПВ-16 | Тестирование входящих HTTP-запросов |
| ВСТГ-ИНПВ-17 | Тестирование внедрения заголовка хоста |
| ВСТГ-ИНПВ-18 | Тестирование внедрения шаблонов на стороне сервера |
| ВСТГ-ИНПВ-19 | Тестирование подделки запросов на стороне сервера |
Обработка ошибок
| Обработка ошибок | Название теста |
| ВСТГ-ЭРРХ-01 | Тестирование на неправильную обработку ошибок |
| ВСТГ-ЭРРХ-02 | Тестирование трассировки стека |
Криптография
| Криптография | Название теста |
| WSTG-CRYP-01 | Тестирование слабой безопасности транспортного уровня |
| WSTG-CRYP-02 | Тестирование для заполнения Oracle |
| WSTG-CRYP-03 | Тестирование конфиденциальной информации, отправляемой по незашифрованным каналам |
| WSTG-CRYP-04 | Тестирование на слабое шифрование |
Тестирование бизнес-логики
| Тестирование бизнес-логики | Название теста |
| ВСТГ-БУСЛ-01 | Протестируйте проверку данных бизнес-логики |
| ВСТГ-БУСЛ-02 | Проверить способность подделывать запросы |
| ВСТГ-БУСЛ-03 | Тестовые проверки целостности |
| ВСТГ-БУСЛ-04 | Тест на синхронизацию процесса |
| ВСТГ-БУСЛ-05 | Проверка количества раз, когда функция может быть использована Ограничения |
| ВСТГ-БУСЛ-06 | Тестирование обхода рабочих процессов |
| ВСТГ-БУСЛ-07 | Проверка средств защиты от неправильного использования приложений |
| ВСТГ-БУСЛ-08 | Тестовая загрузка файлов неожиданных типов |
| ВСТГ-БУСЛ-09 | Тестовая загрузка вредоносных файлов |
Тестирование на стороне клиента
| Тестирование на стороне клиента | Название теста |
| ВСТГ-КЛНТ-01 | Тестирование межсайтового скриптинга на основе DOM |
| ВСТГ-КЛНТ-02 | Тестирование выполнения JavaScript |
| ВСТГ-КЛНТ-03 | Тестирование HTML-инъекций |
| ВСТГ-КЛНТ-04 | Тестирование перенаправления URL на стороне клиента |
| ВСТГ-КЛНТ-05 | Тестирование CSS-инъекций |
| ВСТГ-КЛНТ-06 | Тестирование манипулирования ресурсами на стороне клиента |
| ВСТГ-КЛНТ-07 | Протестируйте совместное использование ресурсов между источниками |
| ВСТГ-КЛНТ-08 | Тестирование межсайтовой перепрошивки |
| ВСТГ-КЛНТ-09 | Проверка на кликджекинг |
| ВСТГ-КЛНТ-10 | Тестирование веб-сокетов |
| ВСТГ-КЛНТ-11 | Тестирование веб-сообщений |
| ВСТГ-КЛНТ-12 | Тестирование хранилища браузера |
| ВСТГ-КЛНТ-13 | Тестирование включения межсайтового скрипта |
Тестирование API
| Тестирование API | Название теста |
| ВСТГ-АПИТ-01 | Тестирование GraphQL |
Заказать аудит у Sayfer
Результаты оценки безопасности
Нет способа удалить добавленные сети
| ID | САЙ-01 |
| Статус | Исправлена |
| Снижение | Низкий |
| Влияние на бизнес | Невозможно удалить отдельные сети, добавленные из привязки. |
| Локация | — пакеты/snap/src/helpers.ts:105 |
Описание
В коде реализована возможность добавления дополнительных сетей, расширяя их список за пределы списка по умолчанию. Однако было отмечено, что удалить их невозможно, кроме как переустановкой оснапа. Вероятно, эта функциональность была запланирована, поскольку функция RemoveNetwork() есть, но вызвать ее из общедоступных методов невозможно.
export const networks = {
get: getNetworks,
setCurrent: setCurrentNetwork,
add: addNetwork,
remove: removeNetwork,
};
риска
Мы рекомендуем реализовать этот метод, как, вероятно, и было задумано.
Отсутствует запрос подтверждения экспорта закрытых ключей
| ID | САЙ-02 |
| Статус | Исправлена |
| Снижение | Низкий |
| Влияние на бизнес | Риск утечки закрытого ключа при его ошибочном отображении на экране, например, в общественном месте. |
| Локация | — пакеты/snap/src/index.ts:145 |
Описание
В большинстве критичных функций в снапе отображается диалоговое окно, которое информирует пользователя о выполняемом действии и запрашивает его одобрение.
Однако эта мера безопасности отсутствует в методе WalletExportPrivateKey, который используется для отображения закрытого ключа на экране привязки. В случае ошибочного вызова он немедленно отобразит закрытый ключ.
риска
Прежде чем отображать закрытый ключ, добавьте запрос подтверждения с запросом одобрения пользователя.
Несколько нереализованных методов
| ID | САЙ-03 |
| Статус | Исправлена |
| Снижение | Низкий |
| Влияние на бизнес | Существует риск, что некоторые из нереализованных методов могут оказаться важными для функциональности Snap и будут случайно пропущены. |
| Локация | — packages/snap/src/index.ts:163, 169, 260, 266, 272, 278, 284, 290, 296, 302, 308, 314, 320, 326, 472, 509, 541, 568, 574, 580 , 586, 592, 609, 615, 637, 643, 649, 655, 696, 735, 741, 747, 753, 759, 765, 771, 777, 783 |
Описание
Огромная часть методов, присутствующих в снапе, по-видимому, осталась неиспользованной. Существует только окружающий их шаблон, но нет какой-либо конкретной логики.
риска
Мы рекомендуем просмотреть методы, которые вы хотели бы реализовать в своей оснастке, и убедиться, что все они содержат реальную логику. Пользователь не должен иметь возможности вызывать ненужные методы, которые вы не собираетесь реализовывать.
Дублирующий код
| ID | САЙ-04 |
| Статус | Исправлена |
| Снижение | Информационный |
| Влияние на бизнес | Методы, которые делают то же самое и возвращают одни и те же данные, неоправданно увеличивают размер базы кода Snap. |
| Локация | — пакеты/snap/src/index.ts:332, 338 |
Описание
В ходе анализа мы заметили, что два метода RPC, EthRequestAccounts и EthAccounts, похоже, делают одно и то же и возвращают одни и те же значения.
case RPCMethods.EthRequestAccounts: {
const wallet = await getWallet();
return [wallet.address];
}
case RPCMethods.EthAccounts: {
console.log('RPCMethods.EthAccounts');
console.log('request.params', JSON.stringify(request.params));
const wallet = await getWallet();
return [wallet.address];
}
В обоих случаях эти методы извлекают данные активного кошелька с помощью getWallet(), а затем возвращают его адрес. В настоящее время единственная разница заключается в том, что EthAccounts регистрируется, а EthRequestAccounts — нет.
риска
Рассмотрите возможность удаления одного из методов или изменения одного, чтобы отличить его от другого.
Оставшиеся комментарии TODO
| ID | САЙ-05 |
| Статус | Исправлена |
| Снижение | Информационный |
| Влияние на бизнес | Комментарии TODO и закомментированные разделы кода могут предоставить потенциальным злоумышленникам ценную информацию, помимо того, что они выглядят непрофессионально. |
| Локация | — пакеты/snap/src/index.ts:460, 550 — пакеты/snap/src/polyfill.ts:7 — packages/snap/src/helpers/parsers/tx.ts:55 |
Описание
База кода содержит несколько комментариев TODO, а также разделы закомментированного кода, который больше не используется.
Хотя это приемлемо в тестовой среде, в производственной среде от этого следует отказаться. Такие комментарии могут предоставить потенциальному заинтересованному лицу ценную информацию об отсутствующих функциях, мерах безопасности и мыслях разработчиков, которые можно использовать для профилирования атак.
риска
Мы предлагаем удалить комментарии, помеченные как TODO, и неиспользуемые фрагменты кода в вашей производственной ветке.




