
Proof-of-Concept-Exploit für CVE-2021-21234, eine Verzeichnisdurchlauf-Schwachstelle in spring-boot-actuator-logview, die unberechtigtes Lesen von Dateien über den base-Parameter ermöglicht.
CVE-2021-21234 Spring Boot Verzeichnis-Traversal
spring-boot-actuator-logview fügt in einer Bibliothek einen einfachen Logdatei-Viewer als Spring Boot Actuator-Endpunkt hinzu. Es handelt sich um das Maven-Paket eu.hinsch:spring-boot-actuator-logview. In spring-boot-actuator-logview vor Version 0.2.13 existiert eine Schwachstelle für Verzeichnis-Traversal. Die Bibliothek stellt im Wesentlichen das Logdatei-Verzeichnis über den Admin (Spring Boot Actuator) HTTP-Endpunkt bereit. Der anzuzeigende Dateiname und der Basisordner (relativ zum Logdatei-Wurzelverzeichnis) können beide über Anfrageparameter angegeben werden. Obwohl der Dateinamenparameter auf Verzeichnis-Traversal-Angriffe überprüft wird (sodass filename=../somefile nicht funktioniert), wird der Basisordnerparameter nicht ausreichend geprüft, sodass mit filename=somefile&base=../ auf Dateien außerhalb des Logaufzeichnungsbasisverzeichnisses zugegriffen werden kann. Diese Schwachstelle wurde in Version 0.2.13 behoben. Jeder Benutzer von 0.2.12 sollte problemlos aktualisieren können, da in dieser Version keine weiteren Änderungen enthalten sind. Außer dem Aktualisieren oder Entfernen der Abhängigkeit gibt es keinen Workaround für diese Schwachstelle. Das Entfernen von Leseberechtigungen für Verzeichnisse, die der Benutzer, der die Anwendung ausführt, nicht für den Betrieb benötigt, kann jedoch die Auswirkungen begrenzen. Darüber hinaus kann der Zugriff auf den Logview-Endpunkt durch die Bereitstellung der Anwendung hinter einem Reverse-Proxy eingeschränkt werden.
eu.hinsch.spring.boot.actuator.logview.LogViewEndpoint#view
Die view-Funktion validiert den filename-Parameter, aber nicht den base-Parameter.
GET path:
- "{{BaseURL}}/manage/log/view?filename=/windows/win.ini&base=../../../../../../../../../../" # Windows
- "{{BaseURL}}/log/view?filename=/windows/win.ini&base=../../../../../../../../../../" # Windows
- "{{BaseURL}}/manage/log/view?filename=/etc/passwd&base=../../../../../../../../../../" # Linux
- "{{BaseURL}}/log/view?filename=/etc/passwd&base=../../../../../../../../../../" # Linux