
Détections pour CVE-2021-44228 dans des binaires imbriqués
Ce dépôt contient un ensemble de règles YARA pour détecter les versions de log4j vulnérables à CVE-2021-44228, CVE-2021-45046 et/ou CVE-2021-45105 en recherchant un certain nombre de fonctionnalités présentes dans les versions affectées.
Cet outil fonctionne de manière récursive sur les fichiers binaires tels que les images Docker, les paquets système, les images de système de fichiers et même les supports d'installation. Voir la section « Comment ça marche ? » pour une liste complète des formats de fichiers pris en charge.
JndiManager (< 2.15.0).Interpolator qui n'importent pas JndiManager (< 2.16.0).AbstractConfiguration qui n'importent pas ConfigurationStrSubstitutor (< 2.17.0).Bien qu'il existe un certain nombre de ressources pour détecter une utilisation non sécurisée de log4j avec CodeQL ou Semgrep, aucune ressource n'a encore été mise à disposition pour la détection de versions potentiellement vulnérables de log4j dans des artefacts binaires.
Cela représente un défi pour les organisations qui exécutent des applications d'entreprise qui n'ont pas été développées en interne, ou dont le code source n'est pas immédiatement disponible pour les équipes effectuant le tri initial.
Comme cette vulnérabilité est susceptible d'apparaître dans divers endroits « inattendus », cet outil vise à aider à détecter les versions vulnérables de log4j dans les artefacts compilés, qui peuvent ensuite être examinées manuellement pour déterminer leur exploitabilité.
Le code obscurci entraînera des faux négatifs, où un widget potentiellement vulnérable ne peut pas être détecté en raison de l'utilisation d'obscurcissement.
Pour exécuter cet outil, clonez ce dépôt et suivez les étapes suivantes. Cela suppose que Docker et jq sont installés.
artifacts/./quickstart.sh)Sinon, l'exécution peut être personnalisée avec la commande suivante :
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"
If you only wish to look for CVE-2021-44228, the following command can be used:
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"
If you only wish to look for CVE-2021-45046, the following command can be used:
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"
If you only wish to look for CVE-2021-45105, the following command can be used:
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"
Cet outil peut également être exécuté sans Docker. Veuillez consulter les instructions d'installation de STACS pour savoir comment installer STACS sans Docker.
Pour analyser une image Docker, elle doit d'abord être exportée vers le répertoire artifacts pour être scannée. Cela peut être fait avec la commande suivante :
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
Sinon, un conteneur en cours d'exécution peut être exporté en utilisant simplement :
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
Vous devrez enquêter sur l'utilisation de log4j dans l'application pour comprendre si le produit est vulnérable. Si cela n'est pas possible, en raison d'un manque d'accès au code source ou autre, vous devriez vérifier si le fournisseur a publié des avis à ce sujet.
Il n'y a aucune garantie que l'inclusion d'une version vulnérable de log4j signifie que le produit est vulnérable !
Si vous ne trouvez aucun avis, vous devriez contacter le fournisseur pour lui demander l'impact de cette vulnérabilité sur le produit.
Consultez également les atténuations publiées par le projet log4j. Sinon, et de préférence, mettez à niveau vers une version non affectée de log4j.
Bien qu'il n'ait pas été conçu à cet effet, cet outil utilise le moteur STACS pour la décomposition et l'analyse en masse de fichiers binaires.
STACS est un scanner statique de credentials alimenté par YARA qui prend en charge les formats de fichiers binaires, l'analyse d'archives imbriquées, des ensembles de règles et listes d'ignorance composables, et le rapport SARIF.
Par exemple, cet outil peut analyser une archive tar qui contient une image Docker exportée, qui contient un fichier JAR quelque part dans le système de fichiers qui est affecté par cette vulnérabilité.
Il peut également analyser des archives imbriquées tar, jar, war, ear, zip, apk, bz2, tgz, xz, rpm, iso, etc.
Veuillez ouvrir un ticket Github décrivant le problème et en liant l'artefact binaire affecté - si possible.
Les pull requests pour ajuster les ensembles de règles seraient également grandement appréciées !
Voir le répertoire validation/ pour un ensemble de fichiers journaux issus de la validation de cet ensemble de règles.