
Este repositorio proporciona scripts de una línea simples pero potentes, diseñados para ayudarte a determinar rápidamente si tu servidor es vulnerable a CVE-2024-3094, una vulnerabilidad de seguridad crítica encontrada en ciertas versiones de la utilidad xz. Además, ofrecemos una forma conveniente de escanear tus repositorios de código en busca de referencias a la biblioteca xz, lo que podría ser indicativo de posibles vulnerabilidades indirectas.
Para determinar si tu servidor es susceptible a CVE-2024-3094, ejecuta el siguiente comando en tu terminal:
(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")
El comando anterior comprobará los paquetes en la distribución de Linux.
O prueba esta otra opción, en la que se ejecutará el comando xz; normalmente no se recomienda:
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"
Este script realiza las siguientes acciones:
xz está instalada.xz.Para equipos que usan Docker y están preocupados por las vulnerabilidades en sus imágenes de contenedor, ofrecemos un ejemplo sofisticado usando Trivy, un escáner de vulnerabilidades de código abierto de Aqua Security. Este método escanea imágenes Docker en busca de vulnerabilidades, incluyendo CVE-2024-3094, y proporciona una salida clara sobre el estado de seguridad de la imagen.
El siguiente comando utiliza Trivy para escanear una imagen Docker (debian:experimental-20240311) en busca de vulnerabilidades y filtra los resultados para CVE-2024-3094 relacionado con 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"
Cómo funciona:
Comando de ejecución de Docker: Inicia un contenedor de Trivy, montando el directorio actual como un volumen en el contenedor. Esta configuración permite que Trivy genere los resultados del escaneo directamente en un archivo (result.json) en el directorio actual del host.
Escaneo de Trivy: Escanea la imagen Docker especificada en busca de vulnerabilidades, generando los resultados en formato CycloneDX (un formato estandarizado para listas de materiales de software).
Procesamiento con jq: Filtra los resultados del escaneo para identificar el paquete liblzma5 y comprueba las versiones "5.6.0" o "5.6.1".
Comprobación de vulnerabilidad: Usa grep para buscar versiones vulnerables de liblzma5. Imprime "Vulnerable: CVE-2024-3094" si se encuentra; de lo contrario, muestra "Not vulnerable or liblzma5 not found".
Este método es muy eficaz para pipelines automatizados y puede adaptarse para comprobar diversas vulnerabilidades en distintas imágenes Docker, garantizando que tus despliegues sean seguros.
Para usar el comando proporcionado y escanear tus propias imágenes Docker, sigue estos pasos para personalizar el comando según tus necesidades:
Reemplaza la imagen Docker: Cambia debian:experimental-20240311@sha256:16cc2b09c44d991d36f63153f13a7c98fb7da6bd2ba9d7cc0f48baacb7484970 por la imagen que deseas escanear. Puedes especificar tu imagen por nombre y etiqueta (p. ej., yourimage:yourtag) o por su digest.
Ajusta la comprobación de vulnerabilidad: Si estás escaneando vulnerabilidades distintas de CVE-2024-3094, modifica las expresiones jq y grep para apuntar a los paquetes y versiones específicos relevantes para las vulnerabilidades de interés.
Por ejemplo, para escanear tu imagen llamada 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"
Consejos para la personalización:
Para diferentes vulnerabilidades: Reemplaza "liblzma5@(5\\.6\\.0|5\\.6\\.1)" en el comando jq por el paquete y las versiones que te interesen. Por ejemplo, para comprobar la versión "1.1.1" de openssl, podrías usar openssl@(1\\.1\\.1).
Para diferentes propiedades: Dependiendo de la vulnerabilidad o del paquete, es posible que necesites ajustar .name == "aquasecurity:trivy:PkgID" para apuntar a diferentes propiedades en la salida CycloneDX.
Actualizaciones periódicas: Asegúrate de actualizar regularmente tu instancia de Trivy para tener las definiciones de vulnerabilidades más recientes. Esto suele lograrse descargando la imagen aquasec/trivy más reciente antes de ejecutar los escaneos.
Comprender la salida: Familiarízate con el formato de salida de Trivy y el procesamiento con jq para interpretar con precisión los resultados y comprender las implicaciones para tus imágenes Docker.
xzSi mantienes código que potencialmente interactúa con la biblioteca xz o depende de ella, es crucial identificar cualquier referencia explícita a versiones vulnerables de la biblioteca. Usa los siguientes comandos para escanear tus repositorios:
El proyecto tukaani es el hogar de la utilidad xz. Para encontrar menciones dentro de tu código:
grep -rnH "tukaani" .
Para proyectos Java que usan Maven, podrías especificar xz como dependencia en tu pom.xml. Para localizar estas referencias:
grep -rnH "org.tukaani:xz:" .
Estos comandos buscarán recursivamente en el directorio actual (y subdirectorios) los patrones especificados, mostrando el nombre del archivo, el número de línea y la línea que contiene la coincidencia.
Nota: Asegúrate de tener los permisos necesarios para ejecutar estos scripts en tu servidor o para escanear repositorios. Verifica y prueba siempre los scripts en un entorno seguro antes de usarlos en sistemas de producción.
No dudes en contribuir o sugerir mejoras a este repositorio enviando un pull request o abriendo un issue. ¡Tus comentarios y contribuciones son muy apreciados!