
Hotpatch-Tool für CVE-2021-44228 (Log4Shell), das die JVM-Instrumentierungs-API verwendet, um JndiLookup::lookup() in laufenden Java-Prozessen ohne Neustart zu beheben. Unterstützt JDK 6–11 und Windows.
https://github.com/qingtengyun/cve-2021-44228-qingteng-patch
Behebt CVE-2021-44228 von log4j2, nutzt die von der JVM bereitgestellte Instrumentation-API, um den in die JVM geladenen vorhandenen Bytecode zu ändern.
Ohne Neustart des Java-Prozesses wird die lookup-Methode der Klasse org.apache.logging.log4j.core.lookup.JndiLookup modifiziert, um fest
'Patched JndiLookup::lookup()' zurückzugeben.
Einfach angelehnt an https://github.com/corretto/hotpatch-for-apache-log4j2 modifiziert und erweitert, unterstützt JDK-Versionen 6, 7, 8, 9, 10, 11, unterstützt Windows
jattach und jattach.exe stammen von https://github.com/apangin/jattach, können mit GitHub verglichen werden.
Falls Sie Bedenken bezüglich des heruntergeladenen, vorgebauten Tools haben, können Sie den Code herunterladen und selbst build.sh ausführen, um ein Paket zu erstellen und zu ersetzen.
Das Ergebnis von build.sh befindet sich im Verzeichnis build/cve-2021-44228-qingteng-patch
Linux:
./attach.sh $pid
./attach.sh
./attach.sh ohne pid verwendet jps, um alle Java-Prozesse auf dieser Maschine aufzulisten. Dann geben Sie die Zeilennummer ein, um den Prozess für die Injektionsreparatur auszuwählen. Die Eingabe von all injiziert alle aufgelisteten Java-Prozesse.
Es können mehrere, durch Leerzeichen getrennt, eingegeben werden.
Windows:
Doppelklicken Sie auf attach.bat, geben Sie dann die pid des Java-Prozesses ein
Oder übergeben Sie die pid in der cmd-Befehlszeile, z.B. 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
Am Ende wird
JVM response code = 0
0
zurückgegeben, was eine erfolgreiche Injektion anzeigt. Andernfalls ist es fehlgeschlagen.
Could not start attach mechanism: No such file or directory
Mögliche Gründe sind:
Die VM wird mit dem Parameter -XX:+DisableAttachMechanism ausgeführt, was bedeutet, dass Attach deaktiviert ist.
Die Socket-Datei /tmp/.java_pid$pid wurde erstellt und dann gelöscht, sodass Attach nicht möglich ist. Diese Methode kann nicht verwendet werden.
Es muss derselbe Benutzer wie der Benutzer des Java-Prozesses sein. Wenn der ausführende Benutzer die Anmeldung verbietet, kann mit root su ausgeführt werden, achten Sie darauf, pid_username und pid zu ersetzen:
su -l -s /bin/bash -c "$(pwd)/attach.sh pid" pid_username