
DaemonSet Kubernetes che applica patch a caldo alle JVM per mitigare le vulnerabilità Log4j2 (CVE-2021-44228, CVE-2021-45046) disabilitando le ricerche JNDI, fornendo protezione temporanea fino all'aggiornamento delle dipendenze.
Questo progetto è in fase di deprecazione come descritto di seguito.
Il progetto smetterà di accettare segnalazioni e non sarà aggiornato a partire dal 2023-01-01. Dopo questa data, questo progetto non sarà supportato e non verranno generati nuovi rilasci o artefatti associati ad esso.
Il repository del progetto sarà permanentemente archiviato (reso di sola lettura) a partire dal 2023-04-01.
Come indicato nella documentazione originale del progetto, questo è sempre stato inteso come una misura temporanea per aiutare gli utenti di Kubernetes, e ha fornito solo una mitigazione parziale dell'esposizione di sicurezza da Log4j2 CVE-2021-44228 e CVE-2021-45046. Si raccomanda vivamente a tutti gli utenti di Log4j di aggiornare a una versione corretta del progetto per mitigare completamente qualsiasi rischio associato a queste CVE.
Gli artefatti di rilascio associati all'ultima versione rimarranno permanentemente disponibili per i consumatori di questo progetto che continuano a distribuirlo nei loro ambienti Kubernetes. In particolare, il manifesto DaemonSet e l'immagine container di ECR Public rimarranno disponibili dopo la deprecazione, ma non saranno più supportati o aggiornati.
AWS ha sviluppato un RPM che esegue una hot-patch a livello JVM che disabilita le ricerche JNDI dalla libreria Log4j2, mitigando Log4j2 CVE-2021-44228 e CVE-2021-45046.
L'agente per nodo Apache Log4j2 CVE-2021-44228 è un progetto open source creato dal team Kubernetes di AWS. È progettato per funzionare come DaemonSet e mitigare l'impatto di Log4j2 CVE-2021-44228, che riguarda le applicazioni che eseguono versioni di Apache Log4j2 < 2.15.0 quando elaborano input da fonti non attendibili. Eseguendo questo DaemonSet verranno corretti a caldo (hot-patched) i JVM in esecuzione nei container così come nell'host.
Cosa fa: Verrà installata una voce cron su ogni nodo worker che esegue un processo che cerca JVM in esecuzione e inietta un agente che mitiga la CVE Log4J2. Tutti i JVM, inclusi quelli in esecuzione nei container, verranno corretti a caldo in questo modo. Attualmente, il processo di hot-patch è configurato per essere eseguito ogni 30 minuti con un jitter di 15 minuti. La finestra effettiva può variare da 15 a 45 minuti tra le esecuzioni.
Nota: Puoi trovare informazioni aggiuntive sulla vulnerabilità Log4j2 e la risposta di AWS nel AWS Security Bulletin.
Nota: Il 20/04/22, l'immagine (v0.0.16) è stata aggiornata con la patch più recente per Amazon Linux 1 e 2. Se hai installato una versione precedente di questo DaemonSet ed è ancora in esecuzione, dovresti riapplicare il file daemonset.yaml per installare l'ultimo RPM. Se non hai più bisogno della patch per log4j, dovresti eliminare il DaemonSet e disinstallare l'RPM poiché le versioni precedenti dell'RPM (< 1.1-16) avevano una vulnerabilità che poteva consentire a un attaccante di uscire da un container e ottenere accesso all'host sottostante.
Nota: la versione 1.3-5 affronta ALAS2-2022-1806 e ALAS-2022-1601. Vedi Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root per ulteriori informazioni.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
Controllo a campione di un singolo pod:
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <pod-name> -c node-patch-installer -n node-configuration-daemonset
oppure ottenere conferma per ogni nodo:
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
Se l'installazione ha avuto successo, l'ultima riga nel file di log riporterà installed and verified altrimenti verrà registrato un errore.
daemonset.yaml per riflettere il nuovo URI:tag dell'immagine, quindi applica il manifesto al tuo cluster.Le funzionalità JNDI di Apache Log4j2 < 2.15.0 utilizzate nella configurazione, nei messaggi di log e nei parametri non proteggono da LDAP controllato dall'attaccante e altri endpoint correlati a JNDI. Un attaccante che può controllare i messaggi di log o i parametri dei messaggi può eseguire codice arbitrario caricato da server LDAP quando la sostituzione dei messaggi è abilitata. Dalle versioni di Log4j2 < 2.15.0, questo comportamento è stato disabilitato per impostazione predefinita. I dettagli completi si trovano nel bollettino CVE.
Puoi trovare informazioni aggiuntive sulla vulnerabilità Log4j2 nel AWS Security Bulletin.
AWS ha sviluppato un RPM che esegue una hotpatch a livello JVM disabilitando le ricerche JNDI dalla libreria Log4j2, mitigando il problema Log4j2 che si applica ai JVM sull'host così come ai JVM in esecuzione nei container. Questo progetto impacchetta l'RPM come DaemonSet Kubernetes.
Una volta installato, un processo verrà eseguito su ogni nodo worker che cerca JVM in esecuzione e inietta un agente nel JVM per mitigare la vulnerabilità Log4j2. L'agente tenta di patchare il metodo lookup() di tutte le istanze caricate di org.apache.logging.log4j.core.lookup.JndiLookup per restituire incondizionatamente la stringa Patched JndiLookup::lookup(). Questo è progettato per affrontare la vulnerabilità di esecuzione remota di codice CVE-2021-44228 in Log4j2 senza riavviare il processo Java.
Questo processo per impostazione predefinita è configurato per essere eseguito ogni 30 minuti e aggiungerà un livello di protezione nei cluster in cui le applicazioni non sono ancora state patchate con una dipendenza Log4j2 aggiornata.
Puoi trovare maggiori dettagli sulla hotpatch nel blog AWS open source.
L'immagine container è ospitata nel repository pubblico ECR di aws-containers.