Ответ Nym на аудит безопасности Cure53 (Июль 2024)
Полная проверка Nym кода, сети и приложений
Введение
NymVPN разработан для обеспечения конфиденциальной, безопасной и надёжной защиты ваших онлайн-коммуникаций. В Nym ценятся прозрачность и доверие пользователей, поэтому весь код проекта открыт и регулярно проходит независимые аудиты для обеспечения максимального уровня безопасности и конфиденциальности.
В июле 2024 года Nym прошёл независимую проверку, проведённую компанией Cure53 — берлинской кибербезопасной фирмой с более чем 15-летним опытом тестирования ПО и аудита кода. Их тщательная проверка охватила ключевые компоненты инфраструктуры Nym, включая мобильные и десктопные приложения, VPN-инфраструктуру, криптографические реализации и общую архитектуру системы.
Все выявленные критические и уязвимости высокой степени были устранены. В настоящее время мы ожидаем от Cure53 обратной связи по нашему отчёту и внесённым исправлениям.
Полный отчёт Cure53 опубликован здесь. Вы также можете посмотреть доклад доктора Надима Кобейси для OSTIF, в котором он обсуждает аудит Nym и подробно рассматривает некоторые из обнаруженных проблем.
Резюме аудита Nym от Cure53
Cure53 провела комплексную оценку безопасности экосистемы Nym, включая тестирование на проникновение, аудит исходного кода и ревизию архитектуры. Основное внимание уделялось оценке безопасности мобильных и десктопных приложений Nym, API, VPN и криптографии. Команда Nym оказывала Cure53 постоянную поддержку, обеспечив прозрачность и плодотворное сотрудничество.
Cure53 использовала подход «crystal-box» — аудиторы имели полный доступ к исходному коду, сборкам, документации, тестовым средам и научным публикациям. Аудит длился 56 рабочих дней и проводился командой из шести старших экспертов по кибербезопасности. Работа была разделена на пять рабочих пакетов (WP):
- WP1: Мобильные приложения Nym
- WP2: Настольные приложения Nym
- WP3: Backend и API
- WP4: VPN-программное обеспечение и инфраструктура
- WP5: Криптография
Аудит охватил широкий спектр компонентов в рамках установленной области проверки и выявил 43 проблемы, включая 7 уязвимостей безопасности — в том числе критические и высокой степени серьёзности — а также 24 общих недостатка, классифицированных как имеющие средний или низкий потенциал для эксплуатации и представляющих собой возможности для дальнейшего укрепления системы.
Программное обеспечение и инфраструктура NymVPN были признаны находящимися в превосходном состоянии с точки зрения безопасности — в ходе аудита не было выявлено ни одной уязвимости. Компания Cure53 пришла к выводу, что все проверенные компоненты имеют прочную основу с точки зрения безопасности, демонстрируя в целом устойчивую защитную архитектуру. Настольные приложения были оценены как находящиеся в хорошем состоянии с точки зрения безопасности — существенных уязвимостей обнаружено не было. Аудиторы отметили, что реализация в целом выполнена качественно. Бэкенд и API Nym также были оценены как находящиеся в удовлетворительном состоянии с точки зрения безопасности. Особенно подчёркивается, что несколько критических уязвимостей были эффективно устранены и предотвращены, что свидетельствует о нашем проактивном подходе к обеспечению безопасности и внимательной реализации.
Ключевые выводы
WP1: Пентесты по методу "crystal-box" и аудит исходного кода мобильных приложений Nym
В рамках WP1 компания Cure53 провела как статический, так и динамический анализы в сочетании с тестированием в режиме "white-box" для мобильных приложений NymVPN на Android и iOS. Целью было выявление потенциальных уязвимостей, неправильных конфигураций и рисков безопасности в приложениях. В целом, выявленные проблемы имели низкую степень серьёзности — критических или высокоопасных уязвимостей обнаружено не было. Все найденные недостатки в основном относились к среднему, низкому или информационному уровню и могут быть эффективно устранены в рамках общего процесса усиления безопасности приложений. Статический анализ был направлен на поиск неоптимальных настроек и конфигураций, которые могли бы привести к уязвимостям. Однако каких-либо рисков высокого уровня выявлено не было.
Кроме того, Cure53 провела детальное исследование распространённых векторов атак на Android, включая потенциальный доступ к неэкспортируемым компонентам, обход аутентификации, уязвимые широковещательные приёмники и недостаточную проверку параметров intent. Ни одна из этих уязвимостей обнаружена не была, что говорит о высокой надёжности встроенных механизмов защиты платформы.
Также Cure53 подтвердила, что ни Android-, ни iOS-приложения не содержали жёстко заданной чувствительной информации или секретов, что является важным аспектом безопасности.
В целом, мобильные приложения продемонстрировали хорошее состояние с точки зрения безопасности и имели минимальную площадь для возможных атак. За исключением нескольких незначительных недочётов, таких как некорректное использование штатного безопасного хранилища в приложении iOS (NYM-01-024), значительных проблем в безопасности выявлено не было.
WP2: Пентесты по методу "crystal-box" и аудит исходного кода настольных приложений Nym
WP2 был посвящён настольным приложениям NymVPN для Windows, Linux и macOS. Команда тестирования провела всесторонний анализ как компонентов интерфейса (frontend) на предмет уязвимостей на стороне клиента, так и коммуникационного слоя на языке Rust, отвечающего за взаимодействие с серверной частью. В целом, настольные приложения продемонстрировали высокие стандарты безопасности.
Среди ключевых положительных аспектов стоит отметить использование фреймворка React для компонентов интерфейса, что существенно снижает потенциальную площадь атаки. Команда не выявила серьёзных уязвимостей на стороне клиента, за исключением одного специфического сценария, при котором при определённых условиях клик по вредоносному URL-адресу репозитория мог бы привести к выполнению произвольного JavaScript-кода (XSS). Однако данная проблема была классифицирована как низкоуровневая, поскольку не затрагивала чувствительные данные и не представляла критической угрозы. Что касается серверной части, коммуникация с демон-процессом через Unix-сокеты (в Linux) и именованные каналы (в Windows) была тщательно проанализирована и в ходе проверки не было выявлено серьёзных уязвимостей или рисков безопасности.
Несмотря на то, что были отмечены некоторые незначительные проблемы, они касались лишь возможных направлений по дальнейшему укреплению безопасности, а не устранения критических недостатков.
WP3: Пентесты по методу "crystal-box" и аудит исходного кода backend API Nym
WP3 был сосредоточен на API серверных компонентов Nym, включая шлюзы (gateways) и миксноды (mix nodes), за исключением валидаторов. В ходе тестирования была проведена тщательная проверка таких аспектов, как сериализация/десериализация, SQL-инъекции, механизмы аутентификации и авторизации, уязвимости типа SSRF, атаки по времени и потенциальные точки выполнения кода. В целом, backend Nym продемонстрировал удовлетворительный уровень безопасности: не были выявлены уязвимости, позволяющие выполнить произвольный код, риски SQL-инъекций или серьёзные SSRF-уязвимости. Механизмы аутентификации и авторизации реализованы в соответствии с безопасными стандартами, эффективно предотвращая попытки обхода защиты. Хотя серверные компоненты в целом продемонстрировали высокий уровень безопасности, были выявлены несколько заметных проблем. Среди них две находки были классифицированы как высокого или критического уровня серьёзности (NYM-01-027, NYM-01-030 и NYM-01-032), которые мы рассматриваем ниже.
NYM-01-027 WP3: Повторное использование nonce-ключа в AES-CTR в шлюзах Nym (критическая уязвимость)
В ходе ревизии исходного кода репозитория Nym было выявлено, что связь между шлюзом и клиентами страдает от серьёзного криптографического недостатка. В частности, было обнаружено, что в процессе рукопожатия между шлюзами Nym и клиентами используется шифрование данных с помощью AES-CTR с уникальным, но не изменяющимся ключом и постоянным нулевым nonce. Это ставит под угрозу всю коммуникацию в случае утечки хотя бы одного открытого текста (plaintext), поскольку злоумышленник сможет взломать шифрование, применив простые операции XOR между шифротекстами и известным открытым текстом.
Хотя конфиденциальность данных, передаваемых между клиентом и шлюзом, под угрозой лишь при утечке открытого текста, мы полностью признаём серьёзность данной проблемы. Команда Nym оперативно отреагировала, заменив шифрование AES-CTR на рекомендованную схему AES-GCM-SIV, что значительно повысило безопасность коммуникаций в релизе 2024.12-aero
NYM-01-030 WP3: Шлюз пропускает проверку серийного номера учётных данных (критическая уязвимость)
Отсутствие проверки серийных номеров учётных данных на уровне шлюза не ставит под угрозу безопасность системы, поскольку протокол zk-nym основан на модели оффлайн электронных денег (e-cash), которая изначально разработана для обнаружения и предотвращения двойного расходования. В онлайн-схемах электронных денег провайдеры поддерживают постоянное соединение с центральным органом (например, банком или блокчейном) и проверяют серийные номера в реальном времени перед подтверждением платежа. Если бы это применялось к NymVPN, шлюзы активно проверяли бы серийные номера учётных данных во время транзакций. В отличие от этого, оффлайн e-cash устраняет необходимость в постоянном соединении — провайдеры могут принимать платежи и позже вносить их, с криптографической гарантией того, что любые попытки двойного расходования будут выявлены при проверке транзакций. Протокол zk-nym следует этой модели оффлайн e-cash, обеспечивая, что даже без локальной проверки серийных номеров на шлюзе, валидаторы nym-API могут обнаруживать и предотвращать двойное расходование при верификации билетов. Это значит, что проверка серийных номеров на уровне шлюза не требуется для безопасности. Однако локальные проверки на шлюзе могли бы добавить дополнительный уровень раннего обнаружения, ускоряя выявление попыток двойного расходования в рамках одного и того же шлюза. Хотя такие проверки могут повысить эффективность, они не являются обязательными для основной безопасности протокола. Встроенные криптографические гарантии протокола zk-nyms обеспечивают надёжное выявление двойного расходования на более позднем этапе, позволяя выявлять и блокировать злоумышленников. Таким образом, проверки двойного расходования на шлюзе следует рассматривать как необязательное улучшение эффективности, а не как фундаментальное требование безопасности.
Кроме того, в нашей системе каждые zk-nym учётные данные имеют фиксированную дату истечения, сейчас установленную на одну неделю. По истечении этого срока просроченные учётные данные больше не принимаются нодами входа в сеть. Этот механизм истечения дополнительно ограничивает влияние любых попыток двойного расходования, обеспечивая безопасность системы даже без проверок серийных номеров на уровне шлюза.
NYM-01-032 WP3: Параметры фильтра Блума приводят к ложным срабатываниям (высокая степень серьезности)
Отмечаем, что эта часть кода находилась в активной разработке и не использовалась в приложении NymVPN на момент аудита. Представленные параметры были предназначены исключительно для тестирования. Как объясняется в пункте NYM-01-030 WP3, фильтры Блума были добавлены в качестве дополнительной проверки на двойное расходование. Однако, поскольку наш протокол по дизайну обрабатывает проблему двойного расходования иначе, а фильтры Блума создавали слишком большую нагрузку (требовалась их синхронизация между шлюзами и nym-api), было принято решение отказаться от них.
Помимо этих проблем высокой приоритетности, аудит также выявил несколько уязвимостей средней серьезности, связанных с возможными векторами атак типа отказа в обслуживании (DoS). Эти находки указывают на области, в которых backend NymVPN может повысить устойчивость к сбоям сервиса. Мы планируем решить эти вопросы в рамках дорожной карты на 2025 год.
В целом, API и backend компоненты продемонстрировали достойный уровень безопасности, при этом уязвимости в основном ограничены отдельными случаями или возможностями для усиления защиты.
WP4: Кристал-бокс пентесты и аудит исходного кода программного обеспечения и инфраструктуры NymVPN
WP4 включал комплексную оценку безопасности программного обеспечения NymVPN с акцентом на:
- Основной функционал: обработка протоколов, шифрование, управление сетью, разрешение DNS, реализация IP-маршрутизации, туннелирования и интеграция сетевого стека в целом.
- Интеграция фронтенда: оценка пользовательского интерфейса на базе Tauri по дизайну, удобству использования и эффективной интеграции с Rust-ядром через FFI, а также по платформенной производительности на Windows, macOS и Linux.
- Ключевые меры безопасности: надежное хранение учетных данных, предотвращение утечек, управление ключами и смягчение известных уязвимостей VPN.
Реализация на Rust для обработки протоколов, шифрования, маршрутизации IP, туннелирования и интеграции сетевого стека была подтверждена как надежная, уязвимостей не выявлено. Ключевые меры безопасности, такие как хранение учетных данных, предотвращение утечек и управление ключами шифрования, соответствуют высоким стандартам безопасности и эффективно снижают риски.
Фронтенд настольного приложения успешно сочетает удобство использования с эффективной интеграцией в Rust-ядро. Механизмы обработки ошибок и логирования оказались всесторонними и продуманными, предоставляя ценную информацию для отладки без раскрытия чувствительных данных.
В ходе анализа WP4 уязвимости не были обнаружены, и программное обеспечение NymVPN подтвердило отличное состояние безопасности.
WP5: Кристал-бокс пентесты и аудит исходного кода криптографии Nym
WP5 был сосредоточен на тщательной оценке криптографии, используемой в платформе Nym. Это включало ключевые компоненты, такие как библиотека Coconut crate, zk-nym (e-cash), протокол Sphinx, протокол Outfox и другие часто используемые криптографические примитивы. Исходный код всех криптографических схем, полностью написанный на Rust, был отмечен за отличную организацию, что позволило аудиторам быстро ознакомиться с реализацией.
Протоколы Coconut и e-cash были тщательно проверены и показали эффективное использование механизмов затенения (blinding) для защиты конфиденциальной информации, при этом утечек информации не выявлено. Два применяемых в протоколе NIZKP (независимых доказательств с нулевым разглашением) не содержали уязвимостей, которые позволяли бы обойти проверяющего или обмануть его. Кроме того, выбор используемых криптографических библиотек, особенно bls12_381, обеспечивал строгую проверку принадлежности, предотвращая атаки с использованием некорректных точек кривой или неверных подгрупп. Также подтверждено, что генерация случайных чисел для криптографических ключей и nonce выполняется с помощью надежных, криптографически безопасных методов, поддерживая целостность процесса генерации ключей во всей платформе.
Несмотря на эти сильные стороны, аудит выявил несколько проблем, классифицированных как критические или высокого риска. Каждую из них мы рассматриваем ниже.
NYM-01-009 WP5: Обход проверки подписи на кривой BLS12-381 в библиотеке Coconut (Критично)
Cure53 обнаружила, что функция verify_partial_blind_signature, предназначенная для проверки частичных слепых подписей на этапе выдачи, не включает всех необходимых проверок для предоставленной подписи. Однако мы хотим уточнить, что в рамках протокола Coconut функция, проверяющая расходование учетных данных, включает необходимые проверки и надежно отклоняет недействительные учетные данные. В результате, учитывая конструкцию протокола, любая попытка атаки окажется безуспешной, так как поддельные учетные данные будут обнаружены и отклонены на более позднем этапе. Это гарантирует, что безопасность и целостность системы на практике не будут скомпрометированы.
Тем не менее, мы признаём, что дополнительные проверки, рекомендованные Cure53, могут повысить надёжность этих функций, если их использовать вне конкретного контекста протокола Coconut. Поскольку наш код является открытым и мы стремимся предоставлять переиспользуемые компоненты для широкой аудитории, мы внедрили рекомендуемые проверки подписей на бесконечные точки в качестве дополнительной меры предосторожности в релизе 2024.13-magura. Это гарантирует, что функции могут использоваться надёжно в других контекстах при сохранении высоких стандартов безопасности.
NYM-01-014 WP5: Обход проверки частичной подписи в офлайн eCash (Критическая)
Эта проблема схожа с описанной выше, но касается схемы e-cash вместо Coconut. Как и в реализации Coconut, все необходимые проверки уже были реализованы на этапе расходования средств в протоколе, что гарантирует, что любая попытка атаки окажется безуспешной. Это означает, что на практике безопасность и целостность системы не подвергались угрозе, несмотря на классификацию проблемы как критической.
Тем не менее, как и в случае с Coconut, мы проактивно внедрили дополнительные проверки подписей, рекомендованные Cure53, во всех соответствующих функциях в релизе 2024.13-magura. Хотя эти проверки не были необходимы для обеспечения безопасности текущего протокола, они повысили надежность кода и гарантировали, что эти функции могут быть надежно использованы в других контекстах. Такой подход подчеркивает нашу приверженность высоким стандартам безопасности как для нашей системы, так и для широкой сообщества с открытым исходным кодом.
NYM-01-033 WP5: Подделка подписи в схеме Pointcheval-Sanders (Критическая)
Cure53 выявила уязвимость в нашей реализации функции подписи (sign) в схеме подписи Pointcheval-Sanders. Конкретно, уязвимость возникает из-за того, что в нашей реализации случайное значение h в кортеже подписи (h, s) не выбирается случайным образом. В результате, если бы мы подписывали только публичные атрибуты, подпись была бы уязвима к подделке.
Однако важно подчеркнуть, что эта уязвимость, связанная с подделкой подписи, не представляет никакой угрозы в контексте протоколов Coconut или e-cash. Оба этих протокола по своей конструкции опираются на приватные атрибуты и используют процесс слепой выдачи (blind issuance) для вычисления подписи. В протоколе слепой выдачи использование коммита к сообщениям в качестве входа для хеш-функции гарантирует, что разные наборы сообщений будут генерировать уникальные значения для h. Таким образом, уязвимость могла бы проявиться только в случае использования протоколов Coconut или e-cash исключительно с публичными атрибутами, чего не происходит в сети Nym. Следовательно, риск, выявленный Cure53, не применим к нашей системе, поскольку используемые протоколы изначально устраняют эту проблему.
NYM-01-042 WP5: Ошибочная агрегация недействительных подписей офлайн eCash (Критическая)
Эта проблема схожа с проблемами NYM-01-009 и NYM-01-014, где отдельная функция агрегации подписей могла бы создать недействительную подпись, если злоумышленник сможет манипулировать частичными подписями так, чтобы результатом стал бесконечный элемент (infinity point). Однако в протоколах Coconut и e-cash процесс проверки явно отвергает любые подписи, приводящие к бесконечному элементу, поэтому эта проблема не компрометирует безопасность или целостность ни одного из протоколов. Тем не менее, в соответствии с мерами, принятыми по проблемам NYM-01-009 и NYM-01-014, мы внедрили дополнительные проверки в функцию агрегации, чтобы еще больше укрепить нашу кодовую базу и предотвратить потенциальное неправильное использование в других контекстах (https://github.com/nymtech/nym/blob/nym-binaries-v2024.13-magura/CHANGELOG.md).
NYM-01-005 WP5: Отсутствие проверки бесконечного элемента (infinity point) раскрывает открытый текст для ElGamal (Высокая серьёзность)
Текущая реализация протоколов Coconut и e-cash не использует шифрование ElGamal (и не использовалось во время аудита). Вместо этого мы используем более эффективные обязательства Педерсена (Pedersen commitments), которые не несут таких же рисков. Поэтому проблема, связанная с ElGamal, не представляла угрозы безопасности для нашей существующей системы. Кроме того, мы уже удалили Coconut crate и, соответственно, схему ElGamal.
Заключение
Мы хотели бы поблагодарить команду Cure53 за их экспертность и преданность делу на протяжении всего процесса аудита. Также ценим сотрудничество и профессионализм, проявленные как на этапе планирования, так и во время проведения аудита. Наша постоянная приверженность безопасности остаётся главным приоритетом, и мы с нетерпением ждём дальнейшего сотрудничества с экспертами по безопасности для поддержания высоких стандартов нашей экосистемы.