
Outil de hotpatch pour CVE-2021-44228 (Log4Shell) qui utilise l'API JVM Instrumentation pour corriger JndiLookup::lookup() dans les processus Java en cours d'exécution sans redémarrage. Prend en charge JDK 6–11 et Windows.
https://github.com/qingtengyun/cve-2021-44228-qingteng-patch
Corrige CVE-2021-44228 de log4j2, utilise l'API d'instrumentation de la JVM pour modifier le bytecode existant chargé dans la JVM.
Sans redémarrer le processus Java, modifie la méthode lookup de la classe org.apache.logging.log4j.core.lookup.JndiLookup pour retourner systématiquement
Patched JndiLookup::lookup().
S'inspire de https://github.com/corretto/hotpatch-for-apache-log4j2 avec des améliorations, prend en charge les versions JDK 6, 7, 8, 9, 10, 11, prend en charge Windows
jattach et jattach.exe proviennent de https://github.com/apangin/jattach, peuvent être comparés avec ceux de GitHub.
Si vous n'êtes pas sûr de l'outil pré-construit téléchargé, vous pouvez télécharger le code et exécuter build.sh pour le reconstruire et le remplacer.
Le résultat de build.sh se trouve dans le répertoire build/cve-2021-44228-qingteng-patch
Linux:
./attach.sh $pid
./attach.sh
./attach.sh sans pid utilisera jps pour lister tous les processus Java sur cette machine, puis vous entrerez le numéro de ligne pour sélectionner le processus à injecter et réparer. Saisir 'all' injectera tous les processus Java listés. Vous pouvez en saisir plusieurs, séparés par des espaces.
Windows:
Double-cliquez sur attach.bat, puis entrez le pid du processus Java
Ou passez le pid en ligne de commande cmd, par exemple 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
Retour en fin
JVM response code = 0
0
indique une injection réussie. Sinon, c'est un échec.
Could not start attach mechanism: No such file or directory
Les causes possibles sont :
La VM a été lancée avec le paramètre suivant -XX:+DisableAttachMechanism, ce qui signifie que Attach est désactivé.
Le fichier socket /tmp/.java_pid$pid a été créé puis supprimé, impossible d'effectuer Attach, cette méthode ne peut pas être utilisée.
Vous devez être le même utilisateur que celui qui exécute le processus Java. Si l'utilisateur d'exécution est interdit de connexion, vous pouvez utiliser root pour exécuter su, en veillant à remplacer pid_username et pid
su -l -s /bin/bash -c "$(pwd)/attach.sh pid" pid_username