CVE-2021-21234 Spring Boot Actuator Logview Directory Traversal

注意
本文最后更新于 2021-12-01,文中内容可能已过时。

漏洞概述

项目地址:https://github.com/lukashinsch/spring-boot-actuator-logview

在spring-boot-actuator-logview 0.2.13版本之前,对文件路径参数过滤不严导致可以目录穿越读取任意文件。

环境搭建

git clone https://github.com/cristianeph/vulnerability-actuator-log-viewer

idea打开运行即可

靶场使用的版本为spring-boot-actuator-logview 0.2.12

分析

在logview的spring.factories中存在spring的AutoConfiguration配置

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/1.png

当springboot初始化bean时,如果application.properties配置有logging.path属性时

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/2.png

返回一个LogViewEndpoint端点,该端点实现了MvcEndpoint接口,定义了以下几个路由

  1. list() -> / 列出日志文件
  2. view() -> /view 读日志文件
  3. search() -> /search 搜索日志文件

其中在view()中,存在任意文件读取。

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/3.png

用户可以提交filename和base参数,其中filename经过securityCheck()判断

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/4.png

限制了跨目录操作,但是this.loggingPath(base)并没有进行过滤

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/5.png

所以可以构造http://localhost:8887/manage/log/view?filename=src/main/resources/application.properties&base=../读取任意文件

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/6.png

修复

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/7.png

用了一个this.loggingPath,值为application.properties中写的logging.path=logs,然后取要读的文件绝对路径和logs目录的绝对路径进行匹配。

https://y4er.com/img/uploads/CVE-2021-21234-Spring-Boot-Actuator-Logview-directory-traversal/8.png

如果canonicalLoggingPath.startsWith(baseCanonicalPath)不为true直接抛出异常,完美堵死。

文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。