
Prova de conceito de exploit para CVE-2021-21234, uma vulnerabilidade de travessia de diretório no spring-boot-actuator-logview que permite leitura não autorizada de arquivos por meio do parâmetro base.
CVE-2021-21234 Spring Boot Directory Traversal
spring-boot-actuator-logview adiciona um visualizador simples de arquivos de log como um endpoint do actuator do Spring Boot em uma biblioteca. É o pacote maven "eu.hinsch:spring-boot-actuator-logview". Existe uma vulnerabilidade de directory traversal no spring-boot-actuator-logview anterior à versão 0.2.13. A essência da biblioteca é expor o diretório de arquivos de log por meio de um endpoint HTTP admin (actuator do Spring Boot). Tanto o nome do arquivo a ser visualizado quanto a pasta base (relativa à raiz da pasta de logs) podem ser especificados por parâmetros de requisição. Embora o parâmetro filename seja verificado para evitar ataques de directory traversal (portanto, filename=../somefile não funcionará), o parâmetro da pasta base não é verificado adequadamente, portanto filename=somefile&base=../ pode acessar arquivos fora do diretório base de logs). A vulnerabilidade foi corrigida na versão 0.2.13. Qualquer usuário do 0.2.12 deve conseguir atualizar sem problemas, pois não há outras alterações nessa versão. Não há outra solução para essa vulnerabilidade além de atualizar ou remover a dependência. No entanto, remover a permissão de leitura do usuário que executa o aplicativo para quaisquer diretórios não necessários para a execução do aplicativo pode limitar o impacto. Além disso, o acesso ao endpoint logview pode ser restrito ao implantar o aplicativo atrás de um proxy reverso.
eu.hinsch.spring.boot.actuator.logview.LogViewEndpoint#view
A função view valida o parâmetro filename, mas não valida o parâmetro 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