
用于检查服务器和Docker镜像对CVE-2024-3094漏洞的易受攻击性的单行脚本,包括版本检测和xz引用的仓库扫描。
Этот репозиторий содержит простые, но мощные однострочные скрипты, предназначенные для быстрого определения уязвимости вашего сервера к CVE-2024-3094 — критической уязвимости безопасности, обнаруженной в определенных версиях утилиты xz. Кроме того, мы предлагаем удобный способ сканирования ваших репозиториев кода на наличие ссылок на библиотеку xz, что может указывать на потенциальные косвенные уязвимости.
Чтобы определить, подвержен ли ваш сервер уязвимости CVE-2024-3094, выполните следующую команду в терминале:
(type dpkg &>/dev/null && dpkg -l xz 2>/dev/null | awk '/^ii/{print $3}' | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed") || (type rpm &>/dev/null && rpm -q --qf "%{VERSION}\n" xz 2>/dev/null | grep -qE '^(5.6.0|5.6.1)$' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or xz not installed")
Приведенная выше команда проверит наличие пакетов в дистрибутиве Linux.
Или попробуйте этот другой вариант, где будет выполнена команда xz, обычно это не рекомендуется:
command -v xz &>/dev/null && { xz_version=$(xz --version | head -n 1 | awk '{print $4}'); [[ $xz_version == "5.6.0" || $xz_version == "5.6.1" ]] && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable: CVE-2024-3094"; } || echo "xz not installed"
Этот скрипт выполняет следующие действия:
xz.xz.Для команд, использующих Docker и обеспокоенных уязвимостями в своих контейнерных образах, мы предлагаем сложный пример с использованием Trivy, сканера уязвимостей с открытым исходным кодом от Aqua Security. Этот метод сканирует Docker-образы на наличие уязвимостей, включая CVE-2024-3094, и предоставляет четкий вывод о состоянии безопасности образа.
Следующая команда использует Trivy для сканирования Docker-образа (debian:experimental-20240311) на наличие уязвимостей и фильтрует результаты по CVE-2024-3094, связанной с liblzma5:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
Как это работает:
Команда Docker Run: Запускает контейнер Trivy, монтируя текущую директорию как том в контейнер. Эта настройка позволяет Trivy выводить результаты сканирования непосредственно в файл (result.json) в текущей директории хоста.
Сканирование Trivy: Сканирует указанный Docker-образ на наличие уязвимостей, выводя результаты в формате CycloneDX (стандартизированный формат для спецификации программного обеспечения).
Обработка с помощью jq: Фильтрует результаты сканирования для выявления пакета liblzma5 и проверяет наличие версий "5.6.0" или "5.6.1".
Проверка уязвимости: Использует grep для поиска уязвимых версий liblzma5. Выводит "Vulnerable: CVE-2024-3094", если найдено; в противном случае выводит "Not vulnerable or liblzma5 not found".
Этот метод очень эффективен для автоматизированных конвейеров и может быть адаптирован для проверки различных уязвимостей в разных Docker-образах, обеспечивая безопасность ваших развертываний.
Чтобы использовать предоставленную команду для сканирования ваших собственных Docker-образов, выполните следующие шаги для настройки команды в соответствии с вашими потребностями:
Замените Docker-образ: Измените debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 на образ, который вы хотите сканировать. Вы можете указать образ по имени и тегу (например, yourimage:yourtag) или по его дайджесту.
Настройте проверку уязвимости: Если вы сканируете на наличие уязвимостей, отличных от CVE-2024-3094, измените выражения jq и grep, чтобы они нацеливались на конкретные пакеты и версии, соответствующие интересующим вас уязвимостям.
Например, для сканирования вашего образа с именем yourimage:yourtag:
docker run --rm -v $('pwd'):/project -w /project aquasec/trivy:latest image --format cyclonedx --scanners vuln --output /project/result.json yourimage:yourtag && jq -r '.components[] | .properties[] | select(.name == "aquasecurity:trivy:PkgID" and (.value | tostring | test("liblzma5@(5\\.6\\.0|5\\.6\\.1)"))) | .value' result.json | grep -qE '5\.6\.0|5\.6\.1' && echo "Vulnerable: CVE-2024-3094" || echo "Not vulnerable or liblzma5 not found"
Советы по настройке:
Для других уязвимостей: Замените "liblzma5@(5\\.6\\.0|5\\.6\\.1)" в команде jq на пакет и версии, которые вас интересуют. Например, для проверки версии openssl "1.1.1" можно использовать openssl@(1\\.1\\.1).
Для разных свойств: В зависимости от уязвимости или пакета может потребоваться изменить .name == "aquasecurity:trivy:PkgID" для нацеливания на другие свойства в выводе CycloneDX.
Регулярные обновления: Убедитесь, что ваш экземпляр Trivy регулярно обновляется для получения последних определений уязвимостей. Обычно это достигается путем загрузки последнего образа aquasec/trivy перед запуском сканирования.
Понимание вывода: Ознакомьтесь с форматом вывода Trivy и обработкой jq, чтобы точно интерпретировать результаты и понимать последствия для ваших Docker-образов.
xzЕсли вы поддерживаете код, который потенциально взаимодействует с библиотекой xz или зависит от нее, крайне важно выявить любые явные ссылки на уязвимые версии библиотеки. Используйте следующие команды для сканирования ваших репозиториев:
Проект tukaani является домом для утилиты xz. Чтобы найти упоминания в вашем коде:
grep -rnH "tukaani" .
Для Java-проектов, использующих Maven, вы можете указать xz как зависимость в вашем pom.xml. Чтобы найти эти ссылки:
grep -rnH "org.tukaani:xz:" .
Эти команды будут рекурсивно искать указанные шаблоны в текущей директории (и поддиректориях), сообщая имя файла, номер строки и строку, содержащую совпадение.
Примечание: Убедитесь, что у вас есть необходимые разрешения для запуска этих скриптов на вашем сервере или для сканирования репозиториев. Всегда проверяйте и тестируйте скрипты в безопасной среде перед использованием в production-системах.
Не стесняйтесь вносить свой вклад или предлагать улучшения этого репозитория, отправляя pull request или открывая issue. Ваши отзывы и вклад высоко ценятся!