Selon Endor Labs, une vulnérabilité critique d’injection SQL, CVE-2025-64459 (CVSS v3.1: 9.1), affecte le framework web Python Django. Sont concernés Django 6.0 (beta), 5.2, 5.1 et 4.2 (et potentiellement des versions plus anciennes). Des correctifs sont disponibles dans Django 5.2.8, 5.1.14 et 4.2.26. 🚨

Le problème survient lorsque des applications passent des entrées utilisateur directement à des méthodes QuerySet (filter(), exclude(), get()) via l’expansion de dictionnaire. Des attaquants peuvent injecter les paramètres internes de Django — _connector (AND/OR/XOR) et _negated (inversion booléenne) — pour manipuler la logique SQL, entraînant accès non autorisé, contournement d’authentification et élévation de privilèges, parfois sans authentification préalable.

Exemples d’exploitation (fourni par Endor Labs) :

  • Contournement d’authentification : ajout de _connector=OR&is_superuser=True pour obtenir l’accès admin sans identifiants valides.
  • Exfiltration de données : ajout de _connector=OR&confidential=True pour accéder à des documents confidentiels indépendamment du propriétaire.
  • Élévation de privilèges : ajout de _negated=True pour inverser la logique de contrôle d’accès.

Correctif dans Django (double validation) :

  • Validation au niveau QuerySet (django/db/models/query.py) : rejet explicite des kwargs internes interdits ("_connector", "_negated") avec levée d’exception.
  • Validation au niveau des objets Q (django/db/models/query_utils.py) : contrôle de la valeur _connector (doit être parmi AND/OR/XOR ou None) et gestion de _negated.

Mesures et détection proposées par l’article :

  • Mise à jour immédiate vers 5.2.8, 5.1.14 ou 4.2.26 et déploiement en production.
  • Revue de code des motifs vulnérables (expansion de request.GET/POST vers QuerySet).
  • Bonnes pratiques : validation via Django Forms, liste blanche de paramètres, mappage explicite des champs.
  • Détection : recherche de _connector et _negated dans les journaux, revue des événements d’authentification et des accès inhabituels; tests automatisés rejetant ces paramètres; usage d’outils (ex. Endor Labs) et CI/CD avec surveillance continue.

IOCs et TTPs

  • IOCs: présence de paramètres HTTP "_connector" et "_negated" dans les requêtes et journaux (ex. logs d’accès web).
  • TTPs: injection SQL via manipulation d’arguments internes de l’ORM Django; expansion de dictionnaire d’entrées utilisateur vers filter()/exclude()/get(); contournement par OR logique et inversion via _negated.

Références et contexte adjacent: l’article pointe les commits officiels de correction et rappelle des vulnérabilités Django liées (CVE-2025-59681, CVE-2024-42005, CVE-2022-28346). Article d’analyse technique et d’alerte de sécurité visant à expliquer la faille, ses impacts et les correctifs publiés.


🔗 Source originale : https://www.endorlabs.com/learn/critical-sql-injection-vulnerability-in-django-cve-2025-64459