
Exploit de preuve de concept pour CVE-2021-21234, une vulnérabilité de traversée de répertoire dans spring-boot-actuator-logview permettant une lecture non autorisée de fichiers via le paramètre base.
CVE-2021-21234 Spring Boot Répertoire traversé
spring-boot-actuator-logview ajoute un simple visualiseur de fichiers journaux en tant que point de terminaison d'actuateur Spring Boot. Il s'agit du package Maven « eu.hinsch:spring-boot-actuator-logview ». Dans les versions antérieures à 0.2.13 de spring-boot-actuator-logview, il existe une vulnérabilité de traversée de répertoire. La nature de la bibliothèque est d'exposer le répertoire des fichiers journaux via le point de terminaison HTTP admin (actuateur Spring Boot). Le nom du fichier à visualiser et le dossier de base (relatif à la racine du dossier de journaux) peuvent tous deux être spécifiés via des paramètres de requête. Bien que le paramètre de nom de fichier soit vérifié pour empêcher les attaques de traversée de répertoire (donc filename=../somefile ne fonctionnera pas), le paramètre de dossier de base n'est pas suffisamment vérifié, de sorte que filename=somefile&base=../ peut permettre d'accéder à des fichiers en dehors du répertoire de base des journaux. Ce correctif a été appliqué dans la version 0.2.13. Tout utilisateur de la version 0.2.12 devrait pouvoir mettre à jour sans problème, car il n'y a aucun autre changement dans cette version. Il n'existe pas de solution de contournement à cette vulnérabilité autre que la mise à jour ou la suppression de la dépendance. Cependant, la suppression des droits de lecture sur tout répertoire dont l'utilisateur exécutant l'application n'a pas besoin peut limiter l'impact. De plus, l'accès au point de terminaison logview peut être restreint en déployant l'application derrière un proxy inverse.
eu.hinsch.spring.boot.actuator.logview.LogViewEndpoint#view
La fonction view vérifie la validité du paramètre filename, mais ne vérifie pas la validité du paramètre base.
Chemin GET :
- "{{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