
Rilevamenti per CVE-2021-44228 all'interno di binari annidati
Questo repository contiene una serie di regole YARA per rilevare versioni di log4j vulnerabili a CVE-2021-44228, CVE-2021-45046 e/o CVE-2021-45105, cercando una serie di caratteristiche presenti nelle versioni affette.
Questo strumento opera in modo ricorsivo su file binari come immagini Docker, pacchetti di sistema, immagini del filesystem e persino supporti di installazione. Vedi la sezione "Come funziona?" per un elenco completo dei formati di file supportati.
JndiManager (< 2.15.0).Interpolator che non importano JndiManager (< 2.16.0).AbstractConfiguration che non importano ConfigurationStrSubstitutor (< 2.17.0).Sebbene siano disponibili numerose risorse per rilevare l'uso non sicuro di log4j tramite CodeQL o Semgrep, non sono ancora state rese disponibili risorse per il rilevamento di versioni di log4j potenzialmente vulnerabili all'interno di artefatti binari.
Ciò rappresenta una sfida per le organizzazioni che eseguono applicazioni enterprise non sviluppate internamente, o per le quali il codice sorgente non è immediatamente disponibile ai team che effettuano il triage iniziale.
Poiché è probabile che questa vulnerabilità compaia in vari luoghi "inaspettati", questo strumento intende aiutare a rilevare versioni vulnerabili di log4j all'interno di artefatti compilati, che possono poi essere esaminati manualmente per determinarne lo sfruttamento.
Il codice offuscato comporterà falsi negativi, in cui un componente potenzialmente vulnerabile non può essere rilevato a causa dell'uso dell'offuscamento.
Per eseguire questo strumento, clona questo repository e segui i seguenti passaggi. Si presuppone che Docker e jq siano installati.
artifacts/./quickstart.sh)In alternativa, l'esecuzione può essere personalizzata utilizzando il seguente 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"
Se desideri cercare solo CVE-2021-44228, puoi utilizzare il seguente 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"
Se desideri cercare solo CVE-2021-45046, puoi utilizzare il seguente 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"
Se desideri cercare solo CVE-2021-45105, puoi utilizzare il seguente 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"
Questo strumento può essere eseguito anche senza Docker. Consulta le istruzioni di installazione di STACS per installare STACS senza Docker.
Per scansionare un'immagine Docker, è necessario prima esportarla nella directory artifacts per la scansione. Questa operazione può essere eseguita utilizzando il seguente comando:
IMAGE="alpine:latest"
NAME="alpine_latest"
docker export $(docker create ${IMAGE}) -o artifacts/${NAME}.tar
In alternativa, un container in esecuzione può essere esportato semplicemente utilizzando:
# Replace CONTAINER_ID with the correct container identifier.
CONTAINER_ID="c29209118f9a"
NAME="widget_example"
docker export ${CONTAINER_ID} -o artifacts/${NAME}.tar
Dovrai indagare sull'uso di log4j nell'applicazione per capire se il prodotto è
vulnerabile. Se ciò non è possibile, per mancanza di accesso al codice sorgente o per
altri motivi, dovresti verificare se il fornitore ha pubblicato eventuali advisory in
merito.
Non vi è alcuna garanzia che la presenza di una versione vulnerabile di log4j significhi che il prodotto è vulnerabile!
Se non riesci a trovare alcun advisory, dovresti contattare il fornitore per chiedere informazioni sull'impatto di questa vulnerabilità sul prodotto.
Consulta anche le mitigazioni pubblicate dal progetto log4j. In alternativa, e preferibilmente, esegui l'upgrade a una versione non affetta di log4j.
Sebbene non sia stato progettato per questo scopo, questo strumento utilizza il motore STACS per la decomposizione e l'analisi binaria di massa.
STACS è uno scanner statico di credenziali basato su YARA che supporta formati di file binari, l'analisi di archivi annidati, set di regole componibili e liste di esclusione, e reportistica SARIF.
Ad esempio, questo strumento può analizzare un tarball che contiene un'immagine Docker esportata, la quale contiene un JAR da qualche parte nel filesystem affetto da questa vulnerabilità.
Può anche analizzare archivi annidati tar, jar, war, ear, zip, apk, bz2,
tgz, xz, rpm, iso, ecc.
Apri una issue su GitHub descrivendo il problema e collegando l'artefatto binario interessato, ove possibile.
Anche le pull request per adattare i ruleset sarebbero molto apprezzate!
Consulta la directory validation/ per un set di file di log derivanti dalla
validazione di questo ruleset.