Криптографические приложения отличаются повышенными требованиями к безопасности, поскольку даже незначительная уязвимость способна привести к компрометации ключей, утечке данных или подмене доверенных операций. Зависимости — сторонние библиотеки, пакеты и модули — формируют значительную часть современного JavaScript-стека, включая проекты, использующие Web Crypto API. Их аудит становится критическим элементом безопасной разработки.
Особенность криптографических проектов заключается в том, что даже
корректно реализованный код, использующий SubtleCrypto,
может быть уязвим из-за небезопасной зависимости, внедряющей вредоносную
логику или содержащей ошибки в обработке данных.
1. Уязвимости в стороннем коде Библиотеки могут содержать известные или неизвестные уязвимости: от неправильной генерации случайных чисел до ошибок сериализации.
2. Компрометация цепочки поставок (supply chain attacks) Атаки на npm-пакеты, подмена версий или внедрение вредоносного кода через обновления.
3. Устаревшие версии Использование устаревших зависимостей с известными CVE-уязвимостями.
4. Ложная криптография Некоторые библиотеки реализуют криптографию неправильно, игнорируя стандарты или допуская слабые алгоритмы.
5. Избыточные зависимости Чем больше зависимостей — тем выше вероятность наличия уязвимости.
Минимизация Использование только необходимых библиотек. Предпочтение встроенному Web Crypto API вместо внешних криптографических решений.
Проверка репутации Анализ популярности, активности разработки, количества загрузок и истории изменений.
Аудит исходного кода Просмотр ключевых участков кода, особенно связанных с криптографией и обработкой данных.
Проверка авторов Изучение информации о разработчиках, их активности и доверия сообщества.
npm audit Встроенный инструмент для анализа зависимостей на наличие известных уязвимостей:
npm audit
Вывод включает:
npm audit fix
npm audit fix
Автоматически обновляет зависимости до безопасных версий.
Snyk
Мощный инструмент для глубокого анализа:
Пример использования:
npx snyk test
OWASP Dependency-Check
Анализирует зависимости на основе базы CVE:
Dependabot (GitHub)
Автоматическое отслеживание уязвимостей:
1. Анализ package.json
Особое внимание:
crypto,
hash, jwt)axios,
fetch-обёртки)Пример:
{
"dependencies": {
"jsonwebtoken": "^8.5.1"
}
}
Важно проверять:
2. Проверка транзитивных зависимостей
Даже если основная библиотека безопасна, её зависимости могут быть уязвимы:
npm ls
3. Фиксация версий
Использование точных версий вместо диапазонов:
"library": "1.2.3"
Это предотвращает неожиданные изменения при установке.
4. Использование lock-файлов
package-lock.json или yarn.lock:
Автоматизация аудита:
npm audit --audit-level=high
Прерывание сборки при обнаружении критических уязвимостей.
Пример pipeline:
steps:
- run: npm install
- run: npm audit --audit-level=high
Отказ от сторонней криптографии Web Crypto API предоставляет безопасные реализации:
crypto.subtle.digest("SHA-256", data);
Использование сторонних библиотек для хеширования или шифрования должно быть обосновано.
Контроль обёрток над Web Crypto
Некоторые библиотеки упрощают работу с API, но:
Пример риска:
// небезопасная обёртка может использовать слабый IV
encrypt(data, "AES-CBC");
Проверка алгоритмов
Допустимые алгоритмы:
Недопустимые или устаревшие:
Инструменты:
Пример правила:
Тестирование поведения зависимостей:
Использование hash-сумм:
npm ci
Проверяет соответствие lock-файлу.
1. Использование private registry
Ограничение источников зависимостей.
2. Проверка подписи пакетов
Некоторые системы поддерживают цифровые подписи.
3. Изоляция среды сборки
Особое внимание:
crypto.subtleЧто проверяется:
crypto.getRandomValues)Использование устаревших библиотек
Доверие популярности
Игнорирование предупреждений
npm audit часто игнорируетсяСмешивание криптографических библиотек
Регулярные обновления
Тестирование после обновления
Контроль изменений
Рекомендуется фиксировать:
Источники:
Автоматическое отслеживание позволяет оперативно реагировать на новые угрозы.
Аудит зависимостей не является разовой задачей. В криптографических проектах он должен выполняться:
Постоянный контроль обеспечивает устойчивость системы к новым угрозам и снижает риск компрометации криптографических операций.