
Detecciones para CVE-2021-44228 dentro de binarios anidados
Este repositorio contiene un conjunto de reglas YARA para detectar versiones de log4j que son vulnerables a CVE-2021-44228, CVE-2021-45046 y/o CVE-2021-45105, mediante la búsqueda de una serie de características que aparecen en las versiones afectadas.
Esta herramienta funciona de forma recursiva sobre archivos binarios como imágenes Docker, paquetes del sistema, imágenes de sistemas de archivos e incluso medios de instalación. Consulte la sección "¿Cómo funciona?" para obtener una lista completa de los formatos de archivo compatibles.
JndiManager (< 2.15.0).Interpolator que no importen JndiManager (< 2.16.0).AbstractConfiguration que no importen ConfigurationStrSubstitutor (< 2.17.0).Aunque existe una serie de recursos disponibles para detectar el uso inseguro de log4j mediante CodeQL o Semgrep, aún no se han puesto a disposición recursos para la detección de versiones potencialmente vulnerables de log4j dentro de artefactos binarios.
Esto supone un desafío para las organizaciones que ejecutan aplicaciones empresariales que no fueron desarrolladas internamente, o donde el código fuente no está disponible de inmediato para los equipos que realizan el triaje inicial.
Dado que es probable que esta vulnerabilidad aparezca en varios lugares "inesperados", esta herramienta pretende ayudar a detectar versiones vulnerables de log4j dentro de artefactos compilados, que luego pueden ser revisados manualmente para determinar su explotabilidad.
El código ofuscado dará lugar a falsos negativos, donde un componente potencialmente vulnerable no puede ser detectado debido al uso de ofuscación.
Para ejecutar esta herramienta, clone este repositorio y siga los siguientes pasos. Se asume que Docker y jq están instalados.
artifacts/./quickstart.sh)Alternativamente, la ejecución se puede personalizar usando el siguiente comando:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/vulnerability.json" \
"/mnt/stacs/input"
Si solo desea buscar CVE-2021-44228, puede usar el siguiente comando:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-44228.json" \
"/mnt/stacs/input"
Si solo desea buscar CVE-2021-45046, puede usar el siguiente comando:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45046.json" \
"/mnt/stacs/input"
Si solo desea buscar CVE-2021-45105, puede usar el siguiente comando:
docker run \
--rm \
--mount type=bind,source=$(pwd)/artifacts,target=/mnt/stacs/input \
--mount type=bind,source=$(pwd)/rules,target=/mnt/stacs/rules \
stacscan/stacs:latest \
--rule-pack "/mnt/stacs/rules/CVE-2021-45105.json" \
"/mnt/stacs/input"
Esta herramienta también se puede ejecutar sin Docker. Consulte las instrucciones de instalación de STACS para saber cómo instalar STACS sin Docker.
Para escanear una imagen Docker, primero debe exportarse al directorio de artefactos para su escaneo. Esto se puede hacer usando el siguiente comando:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
Alternativamente, un contenedor en ejecución se puede exportar usando simplemente:
# Reemplace CONTAINER_ID con el identificador correcto del contenedor.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
Deberá investigar el uso de log4j en la aplicación para comprender si el producto es vulnerable. Si esto no es posible, debido a la falta de acceso al código fuente u otra razón, debe verificar si el proveedor ha publicado algún aviso al respecto.
¡No hay garantía de que la inclusión de una versión vulnerable de log4j signifique que el producto es vulnerable!
Si no encuentra ningún aviso, debe contactar al proveedor para preguntarles sobre el impacto de esta vulnerabilidad en el producto.
Consulte también las mitigaciones publicadas por el proyecto log4j. Alternativamente, y preferiblemente, actualice a una versión no afectada de log4j.
Aunque no está diseñada para este propósito, esta herramienta utiliza el motor STACS para la descomposición y análisis masivo de binarios.
STACS es un escáner de credenciales estáticas impulsado por YARA que admite formatos de archivos binarios, análisis de archivos anidados, conjuntos de reglas y listas de ignorados componibles, e informes SARIF.
Como ejemplo, esta herramienta puede analizar un tarball que contiene una imagen Docker exportada, que contiene un JAR en algún lugar del sistema de archivos afectado por esta vulnerabilidad.
También puede analizar archivos anidados tar, jar, war, ear, zip, apk, bz2, tgz, xz, rpm, iso, etc.
Por favor, abra un issue en Github describiendo el problema y enlazando el artefacto binario afectado, si es posible.
¡Las Pull requests para ajustar los conjuntos de reglas también serán muy apreciadas!
Consulte el directorio validation/ para ver un conjunto de archivos de registro de la validación de este conjunto de reglas.