Другое

Блокировка Javalin из-за CVE: решение проблем с зависимостями Maven

Решите проблему блокировки зависимостей Javalin в Maven из-за CVE. Узнайте, почему версии WebDriverManager помечаются как уязвимые, несмотря на исправления, и как настроить Maven для безопасной загрузки зависимостей.

Почему зависимость Javalin блокируется в репозитории Maven из-за CVE, несмотря на использование исправленной версии WebDriverManager?

Я пытаюсь использовать Javalin в новом проекте, но каждая версия Javalin содержит зависимость с CVE, что предотвращает загрузку JAR-файлов с mvnrepository.

Проблема, похоже, связана с зависимостью webdrivermanager. Согласно mvnrepository, эта уязвимость затрагивает:

  • Файл: src/main/java/io/github/bonigarcia/wdm/WebDriverManager.java
  • Версии: webdrivermanager от 1.0.0 до 6.0.2 (не включая)

Однако последняя версия POM Javalin показывает использование версии WebDriverManager 6.3.2:

xml
<webdrivermanager.version>6.3.2</webdrivermanager.version>

Поскольку CVE, как утверждается, была исправлена в версии WebDriverManager 6.0.2, почему JAR-файл Javalin все еще помечается как уязвимый и недоступный для загрузки? Как я могу решить эту проблему и успешно использовать Javalin в своем проекте?

Содержание


Понимание проблемы CVE в WebDriverManager

Зависимость WebDriverManager в Javalin была затронута несколькими уязвимостями, в основном связанными с проблемами десериализации и неправильными механизмами безопасности. Согласно исследованиям, критические CVE были исправлены в версии WebDriverManager 6.0.2 и более поздних.

Конкретные уязвимости, которые затрагивали более ранние версии, включали:

  • CVE-2022-42003: Десериализация ненадежных данных (высокая степень серьезности)
  • CVE-2022-42004: Десериализация ненадежных данных (высокая степень серьезности)
  • CVE-2021-46877: неконтролируемое потребление ресурсов (высокая степень серьезности)

Поскольку Javalin в настоящее время использует версию WebDriverManager 6.3.2, что значительно превышает пороговое значение исправления 6.0.2, прямая зависимость не должна содержать эти уязвимости.


Изменения в конфигурации безопасности Maven

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

“Было принято решение блокировать такие внешние HTTP-репозитории по умолчанию: это делается путем предоставления зеркала в conf/settings.xml, блокирующего небезопасные внешние URL-адреса.”

Это изменение было реализовано как часть исправления CVE-2021-26291, которая затронула более 100K библиотек. Исправление было выпущено в версии Maven 3.8.1 путем:

“добавления в конфигурацию зеркала по умолчанию для блокировки любых внешних URL-адресов, использующих HTTP”

Это означает, что даже если версии ваших зависимостей правильные, Maven может отказываться загружать из внешних репозиториев, которые не используют HTTPS.


Почему Javalin по-прежнему отмечается как уязвимый

Существует несколько причин, по которым Javalin может по-прежнему отмечаться как уязвимый, несмотря на использование обновленного WebDriverManager:

1. Транзитивные зависимости

Сканер уязвимостей может обнаруживать уязвимости в транзитивных зависимостях, а не в прямой зависимости WebDriverManager. Как отмечается в обсуждении на Stack Overflow, даже когда основная зависимость обновлена, транзитивные зависимости могут по-прежнему содержать более старые, уязвимые версии.

2. Кэширование сканера

Сканеры уязвимостей часто кэшируют свои результаты и могут не сразу распознать, что уязвимость была исправлена в более новых версиях. Это может вызывать ложные срабатывания для недавно обновленных зависимостей.

3. Ограничения безопасности Maven

Заблокированные загрузки в основном вызваны конфигурацией безопасности Maven, предотвращающей доступ к внешним репозиториям, а не самой уязвимостью. Это создает ситуацию, когда файлы JAR не могут быть загружены, что делает проект имеющим нерешенные зависимости.


Решения для устранения проблемы

Вот несколько эффективных решений для устранения проблемы блокировки зависимостей Javalin:

Решение 1: Обновление конфигурации Maven

Измените файл Maven settings.xml, чтобы разрешить внешние HTTPS-репозитории:

xml
<mirrors>
  <mirror>
    <id>central</id>
    <mirrorOf>external:http:*</mirrorOf>
    <url>https://repo.maven.apache.org/maven2</url>
  </mirror>
</mirrors>

Решение 2: Принудительное обновление зависимостей

Убедитесь, что все зависимости обновлены до последних безопасных версий. Для Javalin в частности, убедитесь, что вы используете последнюю версию:

xml
<dependency>
    <groupId>io.javalin</groupId>
    <artifactId>javalin</artifactId>
    <version>5.6.4</version> <!-- Используйте последнюю стабильную версию -->
</dependency>

Решение 3: Использование исключений зависимостей

Если проблема сохраняется с конкретными транзитивными зависимостями, исключите их и добавьте явные зависимости:

xml
<dependency>
    <groupId>io.javalin</groupId>
    <artifactId>javalin</artifactId>
    <version>5.6.4</version>
    <exclusions>
        <exclusion>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>6.3.2</version>
</dependency>

Решение 4: Настройка инструментов сборки для сканирования безопасности

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

“Плагины, такие как DependencyCheck, просто проверяют, есть ли какие-либо JAR-файлы в classpath, соответствующие любому шаблону CPE в любом известном CVE.”

Решение 5: Использование внутреннего менеджера репозиториев

Рассмотрите возможность использования внутреннего менеджера артефактов, такого как Nexus или Artifactory, который может кэшировать зависимости и обеспечивать лучшее сканирование безопасности:

“Примечание: это уязвимость в случае, если вы подключаетесь напрямую к удаленным репозиториям вместо использования менеджера артефактов.”


Предотвращение будущих проблем с уязвимостями

Чтобы предотвратить подобные проблемы в будущем, рассмотрите возможность внедрения следующих практик:

Регулярное обновление зависимостей

  • Регулярно проверяйте наличие обновлений для ваших зависимостей
  • Используйте инструменты, такие как mvn versions:display-dependency-updates, для определения доступных обновлений

Интеграция сканирования безопасности

  • Интегрируйте сканирование безопасности в ваш CI/CD конвейер
  • Используйте инструменты, такие как Snyk, OWASP Dependency-Check или GitHub Dependabot

Управление репозиториями

  • Используйте внутренние менеджеры репозиториев для лучшего контроля
  • Настраивайте правильные зеркала репозиториев и политики безопасности

Мониторинг и оповещения


Заключение

Проблема блокировки зависимостей Javalin возникает из-за усиленных политик безопасности Maven, которые предотвращают загрузки из внешних HTTP-репозиториев, в сочетании с тем, как сканеры уязвимостей обнаруживают транзитивные зависимости. Хотя версия WebDriverManager 6.3.2 действительно содержит необходимые исправления CVE, решение требует как настройки конфигурации безопасности Maven, так и правильного управления зависимостями.

Ключевые выводы:

  1. Обновите ваш Maven settings.xml, чтобы разрешить внешние HTTPS-репозитории
  2. Убедитесь, что вы используете последние стабильные версии Javalin и WebDriverManager
  3. Рассмотрите возможность исключения и явного управления проблемными транзитивными зависимостями
  4. Внедрите правильные практики сканирования безопасности и управления зависимостями

Следуя этим решениям, вы сможете успешно использовать Javalin в своем проекте, поддерживая соответствие стандартам безопасности и предотвращая будущие проблемы, связанные с зависимостями.

Источники

  1. Обсуждение обхода CVE в Javalin - Stack Overflow
  2. Отчеты о безопасности Maven - Официальная документация Maven
  3. Анализ уязвимости Maven CVE-2021-26291 - Mend.io
  4. Устранение уязвимостей в WebDriverManager - Stack Overflow
  5. Исправление уязвимостей в Maven проектах - Snyk
  6. Плагин Dependency Check Maven - Официальная документация
Авторы
Проверено модерацией
Модерация