Угрозы при загрузке пользовательских .onnx файлов

Использование ONNX Runtime Web в Javascript предоставляет возможность загружать и выполнять модели в формате .onnx непосредственно в браузере. Однако работа с файлами, полученными от пользователей, несет ряд потенциальных угроз, которые требуют тщательного анализа и мер защиты.

Вредоносные или некорректные модели

Файл .onnx представляет собой бинарный формат, описывающий структуру нейронной сети и веса. Загрузка произвольного файла может привести к:

  • Нарушению целостности приложения: модель может содержать некорректные или специально искаженные данные, вызывающие сбои при парсинге.
  • Переполнение буфера и уязвимости памяти: несмотря на то что ONNX Runtime Web работает в песочнице браузера, ошибки парсинга бинарного формата могут приводить к неожиданным состояниям в движке WebAssembly.
  • Непредвиденное поведение модели: пользователь может предоставить модель, обученную для выполнения нежелательных действий, таких как раскрытие данных или генерация вредоносного контента в рамках приложения.

Утечка данных

Модели могут быть сконструированы так, чтобы эксплуатировать обработку данных в приложении:

  • Скрытая логика извлечения информации: модель может обучаться на выявление и кодирование приватных данных, поступающих на вход модели, что приведет к их несанкционированной передаче.
  • Инференс на сторонние ресурсы: некоторые модели могут пытаться интегрировать внешние вызовы через специфические плагины или кастомные операции, что создаёт риск утечки информации в интернет.

Выполнение небезопасного кода

ONNX Runtime Web поддерживает кастомные операторы и расширения через WebAssembly. Загрузка произвольного .onnx файла с кастомными операторами может привести к:

  • Эксплуатации уязвимостей WebAssembly: возможность выполнения вредоносного кода в пределах браузера, обходя часть ограничений песочницы.
  • Дестабилизации приложения: некорректная реализация кастомного оператора может вызвать зависания или ошибки выполнения, что негативно влияет на пользовательский интерфейс и работу всей страницы.

Меры предосторожности

Для безопасной работы с пользовательскими .onnx файлами рекомендуется:

  1. Валидация структуры модели Проверять формат файла на соответствие спецификации ONNX. Это включает проверку:

    • типов данных входов и выходов,
    • количества и имен слоев,
    • наличия недопустимых кастомных операторов.
  2. Ограничение ресурсов модели Устанавливать лимиты на:

    • размер модели,
    • количество параметров и слоев,
    • объем используемой памяти и длительность инференса.
  3. Изоляция выполнения Выполнение в WebAssembly обеспечивает некоторую защиту, но стоит дополнительно:

    • ограничивать доступ к глобальным объектам браузера,
    • использовать безопасные контексты, например Web Workers.
  4. Мониторинг и логирование ошибок Любая попытка загрузки некорректной или потенциально опасной модели должна фиксироваться с подробным логированием исключений и предупреждений.

  5. Ограничение функциональности кастомных операторов Разрешать использование только проверенных операторов из официальной библиотеки ONNX Runtime Web, блокируя любые неопознанные расширения.

Практические рекомендации

  • Для публичных приложений лучше не доверять полностью пользовательским .onnx файлам, а предоставлять возможность использования только проверенных моделей.
  • При тестировании и отладке использовать изолированные окружения и песочницы, чтобы минимизировать потенциальный ущерб при некорректной работе модели.
  • Регулярно обновлять библиотеку ONNX Runtime Web, так как новые версии включают исправления уязвимостей и улучшения безопасности.

Безопасность при работе с пользовательскими моделями в браузере требует комплексного подхода, объединяющего валидацию данных, контроль ресурсов, изоляцию и мониторинг выполнения. Игнорирование этих аспектов может привести к сбоям приложения и утечке данных.