
Apache Tomcat 安全绕过漏洞 Poc

Kürzlich hat Apache ein Sicherheitsbulletin veröffentlicht, wonach mehrere Versionen von Apache Tomcat 7, 8 und 9 eine Sicherheitsumgehungs-Schwachstelle aufweisen. Angreifer können dieses Problem ausnutzen, um bestimmte Sicherheitsbeschränkungen zu umgehen und nicht autorisierte Aktionen durchzuführen, was zu weiteren Angriffen beitragen könnte.
Die über Servlets-Sicherheitsanmerkungen in Apache Tomcat definierten Sicherheitsbeschränkungen werden nur einmal nach dem Laden des Servlets angewendet. Da die auf diese Weise definierten Sicherheitsbeschränkungen auf URL-Muster und alle darunterliegenden URLs angewendet werden, hängt dies wahrscheinlich von der Reihenfolge des Ladens der Servlets ab, was dazu führen kann, dass Ressourcen für Benutzer, die keinen autorisierten Zugriff haben, offengelegt werden.
CVE-2018-1305
Apache Tomcat < 9.0.5
Apache Tomcat < 8.5.28
Apache Tomcat < 8.0.50
Apache Tomcat < 7.0.85
Mittel
Java EE bietet die ServletSecurity-Anmerkung, die ähnlich wie ACL-Berechtigungsprüfungen funktioniert und zum Schutz von Servlets verwendet werden kann. Wenn es zwei Servlets gibt, Servlet1 mit dem Zugriffspfad /servlet1/* und der ServletSecurity-Anmerkung, und Servlet2 mit dem Zugriffspfad /servlet1/servlet2/* ohne ServletSecurity-Anmerkung, wird beim ersten Zugriff auf servlet1/servlet2 die ServletSecurity-Anmerkung von Servlet1 nicht wirksam. Der Pfad /servlet1/servlet2 wird nicht geschützt, was zu einem nicht autorisierten Zugriff führen kann.
Wenn vor dem Zugriff auf /servlet1/servlet2 bereits auf /servlet1 zugegriffen wurde, lädt Tomcat die ACL und aktiviert den Schutz für /servlet1/servlet2, sodass die Schwachstelle nicht ausgelöst wird.

Fügen Sie vor Servlet1 die ServletSecurity-Anmerkung hinzu; Servlet2 hat diese Anmerkung nicht.

Ändern Sie in der web.xml-Datei das url-pattern des entsprechenden Servlets wie im folgenden Bild dargestellt.

Starten Sie das Projekt. Beim ersten Zugriff auf die URL von servlet2 wird festgestellt, dass ein nicht autorisierter Zugriff möglich ist und die ACL für servlet1 nicht wirksam wird.
http://localhost:8080/CVE-2018-1305/servlet1/servlet2/

Beim zweiten Zugriff auf die URL von servlet1 wird der Zugriff verweigert; zu diesem Zeitpunkt ist die ACL wirksam.
http://localhost:8080/CVE-2018-1305/servlet1/

Erneuter Zugriff auf die URL von servlet2 zeigt, dass der Zugriff verweigert wird. Damit die ACL für servlet2 wirksam wird, muss bereits auf servlet1 zugegriffen worden sein.
http://localhost:8080/CVE-2018-1305/servlet1/servlet2/


Die Nachstellung der Schwachstelle ist daher nur möglich, wenn nach dem Start von Tomcat zuerst auf die Seite /servlet1/servlet2/* zugegriffen wird, bevor auf /servlet1/* zugegriffen wurde. Wenn bereits jemand auf die Seite /servlet1/* zugegriffen hat, wird die Schwachstelle nicht ausgelöst. Die Gefährdung durch die Schwachstelle ist hoch, aber die Ausnutzungsbedingungen sind schwierig, sodass der Einflussbereich begrenzt ist.
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1305