
Strumento di hotpatch per CVE-2021-44228 (Log4Shell) che utilizza l'API di Instrumentazione JVM per correggere JndiLookup::lookup() nei processi Java in esecuzione senza riavvio. Supporta JDK 6–11 e Windows.
https://github.com/qingtengyun/cve-2021-44228-qingteng-patch
Corregge la CVE-2021-44228 di log4j2 utilizzando l'API Instrumentation fornita dalla JVM per modificare il bytecode esistente caricato nella JVM.
Modifica il metodo lookup della classe org.apache.logging.log4j.core.lookup.JndiLookup senza riavviare il processo Java, facendolo restituire una stringa fissa: "Patched JndiLookup::lookup()".
Basato in parte su https://github.com/corretto/hotpatch-for-apache-log4j2 con modifiche migliorative, supporta JDK versioni 6, 7, 8, 9, 10, 11 e Windows
jattach e jattach.exe provengono da https://github.com/apangin/jattach; puoi confrontarli con il repository GitHub.
Se non ti fidi dello strumento già compilato, puoi scaricare il codice ed eseguire build.sh per ricreare il pacchetto.
Il risultato di build.sh si trova nella directory
build/cve-2021-44228-qingteng-patchLinux:
./attach.sh $pid
./attach.sh
Se ./attach.sh viene eseguito senza il PID, utilizza jps per elencare tutti i processi Java sulla macchina; poi inserisci il numero di riga per selezionare il processo da patchare. Se inserisci all, verranno patchati tutti i processi Java elencati.
È possibile inserire più PID separati da spazio.
Windows:
Fai doppio clic su attach.bat e inserisci il PID del processo Java.
Oppure passalo tramite riga di comando, ad esempio attach.bat pid
$ ./attach.sh 438625
/data/qingteng/cve-2021-44228-qingteng-patch
will patch pid: 438625
/data/qingteng/cve-2021-44228-qingteng-patch/jattach 438625 load instrument false /data/qingteng/cve-2021-44228-qingteng-patch/qt-log4j-agent.jar=/data/qingteng/cve-2021-44228-qingteng-patch/qt-log4j-patch.jar
Connected to remote JVM
JVM response code = 0
0
La risposta finale
JVM response code = 0
0
indica successo. Altrimenti, fallimento.
Could not start attach mechanism: No such file or directory
Le possibili cause sono:
La JVM è stata avviata con l'opzione -XX:+DisableAttachMechanism, che disabilita l'attach.
Il file socket /tmp/.java_pid$pid è stato creato ma poi cancellato. In questo caso l'attach non è possibile e questo metodo non può essere utilizzato.
È necessario essere lo stesso utente del processo Java. Se l'utente che esegue il processo Java non può effettuare il login, puoi eseguire su come root, sostituendo pid_username e pid:
su -l -s /bin/bash -c "$(pwd)/attach.sh pid" pid_username