
Preuve de concept pour la vulnérabilité LFI/Path Traversal dans Aiohttp =< 3.9.1
Preuve de concept pour la vulnérabilité LFI/Path Traversal dans Aiohttp =< 3.9.1
[!IMPORTANT] Ce script est destiné uniquement à des fins éducatives.
Toute utilisation illégale est strictement interdite.
$ git clone https://github.com/wizarddos/CVE-2024-23334
$ cd CVE-2024-23334
$ python3 exploit.py -u [url] -f [file] -d [static directory]
[!Note] Souvenez-vous de faire correspondre les barres obliques dans l'URL et le répertoire statique – si vous tapez
http://127.0.0.1/, passez le répertoire sans barre oblique (commestatic) et inversement (URL sans barre oblique et répertoire avec).
La vulnérabilité elle-même réside dans la manière dont aiohttp gère les requêtes pour les ressources statiques.
Si nous écrivons un code comme celui-ci
app.router.add_routes([
web.static("/static", "static/", follow_symlinks=True)
])
follow_symlinks=True rend le système vulnérable au LFI.
Pour utiliser des ressources statiques, vous devez spécifier son répertoire racine.
L'option follow_symlinks dit à aiohttp de suivre les liens symboliques en dehors du répertoire racine, mais ne vérifie pas si le lien lui-même se trouve dans le répertoire racine.
Ainsi, même si ce « lien symbolique » n'est pas du tout un lien, aiohttp effectue la lecture du fichier et retourne sa valeur.