
Herramienta de parcheo en caliente para CVE-2021-44228 (Log4Shell) que utiliza la API de Instrumentación de JVM para corregir JndiLookup::lookup() en procesos Java en ejecución sin necesidad de reiniciarlos. Compatible con JDK 6–11 y Windows.
https://github.com/qingtengyun/cve-2021-44228-qingteng-patch
Corrige el CVE-2021-44228 de log4j2, utilizando la API de Instrumentation proporcionada por la JVM para modificar el bytecode existente cargado en la JVM.
Sin reiniciar el proceso de Java, modifica el método lookup de la clase org.apache.logging.log4j.core.lookup.JndiLookup para que devuelva siempre
Patched JndiLookup::lookup().
Se ha realizado una modificación mejorada tomando como referencia https://github.com/corretto/hotpatch-for-apache-log4j2. Compatible con JDK 6, 7, 8, 9, 10, 11 y con Windows
jattach y jattach.exe provienen de https://github.com/apangin/jattach; se pueden comparar con los de GitHub.
Si no confías en la herramienta compilada que se descarga, puedes descargar el código y ejecutar build.sh para empaquetarla y reemplazarla.
El resultado del empaquetado de build.sh se encuentra en el directorio build/cve-2021-44228-qingteng-patch.
Linux:
./attach.sh $pid
./attach.sh
./attach.sh sin pid utilizará jps para enumerar todos los procesos Java de esta máquina; a continuación, introduce el número de línea para seleccionar el proceso e inyectar el parche. Si escribes all, se inyectará en todos los procesos Java listados. Se pueden introducir varios, separados por espacios.
Windows:
Haz doble clic en attach.bat e introduce el pid del proceso Java.
O pásalo desde la línea de comandos de cmd, por ejemplo
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
Al final devuelve
JVM response code = 0
0
lo que indica que la inyección se ha realizado correctamente. De lo contrario, ha fallado.
Could not start attach mechanism: No such file or directory
Las posibles causas son:
La VM se ejecuta con el parámetro -XX:+DisableAttachMechanism, lo que indica que Attach está deshabilitado.
El archivo socket /tmp/.java_pid$pid se ha creado y luego se ha eliminado, por lo que no es posible Attach y este método no puede utilizarse.
Debe ser el mismo usuario que ejecuta el proceso Java. Si el usuario de ejecución tiene el inicio de sesión deshabilitado, puedes usar root para ejecutar su; asegúrate de reemplazar pid_username y pid.
su -l -s /bin/bash -c "$(pwd)/attach.sh pid" pid_username