CVE-2021-21234 Spring Boot Actuator Logview Directory Traversal
Abstract
Prior to spring-boot-actuator-logview 0.2.13, the securityCheck()
method exists in LogViewEndpoint
, but the securityCheck()
method only filter the ..
in fileName
, ignoring the security check of basePath
, so the attacker can construct payload with the evasion of check in basePath
.
Review
Start up tomcat server of SpringBoot project, if the page looks like this, it means SpringBoot Actutor Logview works well.
Set break piont at securityCheck()
meanwhile sending a HTTP request with the PoC http://localhost:8887/manage/log/view?filename=/etc/passwd&base=../../../../../
, then you will step into the screenshot as follow
Firstly step into lggingPath()
Then step into streamContent
,
here you can see spring.log/../../../../../
as folder, and /etc/passwd
is the file we want to read.
Next step into toFile()
method , the folder spring.log/../../../../../
and the file /etc/passwd
will be concated as the final path without secrity check any more.
Consequently you can retreive the content of file /etc/passwd
Proof of Concept
http://localhost:8887/manage/log/view?filename=/etc/passwd&base=../../../../../
Fix
From spring-boot-actuator-logview 0.2.13, basePath
has strict security check, the path traversal is not permitted any more.