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-2026-26198-analysis — Analyse approfondie d'une injection SQL critique dans l'ORM Ormar de Python — reproduction, correctif et tests | Kitploit
Outils/GitHubGitHub/sergicortesabadia/cve-2026-26198-analysis
Analyse des VulnérabilitésAnalyse de CodeSécurité WebArticles et RechercheApprentissage et Éducation
GitHubsergicortesabadia/cve-2026-26198-analysis

CVE-2026-26198-analysis

Analyse approfondie d'une injection SQL critique dans l'ORM Ormar de Python — reproduction, correctif et tests

Voir le dépôt
il y a 5 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

CVE-2026-26198 — Injection SQL dans l'ORM Ormar

Une analyse approfondie d'une vulnérabilité critique (CVSS 9.8) d'injection SQL dans un ORM asynchrone Python, avec reproduction, analyse et correctif.

La vulnérabilité

Ormar est un mini-ORM asynchrone populaire pour Python, couramment utilisé avec FastAPI et Starlette. Les versions 0.9.9 à 0.22.0 contiennent une vulnérabilité d'injection SQL dans les méthodes d'agrégation min() et max().

La cause racine est un bug de « mise en œuvre partielle » : alors que sum() et avg() valident que le paramètre de colonne fait référence à un champ numérique réel, min() et max() ignorent entièrement cette vérification et transmettent l'entrée utilisateur directement à sqlalchemy.text() — un puits SQL brut.

Un attaquant peut injecter une sous-requête comme paramètre « colonne » :

root@kitploit:~
# Utilisation attendue
await Item.objects.max("price")  # → SELECT max(price) FROM items

# Charge utile d'attaque
await Item.objects.max("(SELECT password FROM users LIMIT 1)")
# → SELECT max((SELECT password FROM users LIMIT 1)) FROM items
# Renvoie le mot de passe de l'administrateur !

Informations rapides

AttributValeur
ID CVECVE-2026-26198
Score CVSS9.8 (Critique)
CWECWE-89 : Injection SQL
Versions concernéesormar 0.9.9 – 0.22.0
Corrigé dansormar 0.23.0
Publié24 février 2026
Authentification requise ?Aucune — non authentifié

Structure du projet

root@kitploit:~
├── README.md               ← Vous êtes ici
├── vulnerable_app.py       ← Application FastAPI minimale avec le schéma vulnérable
├── exploit_demo.py         ← Preuve de concept sûre montrant l'injection en action
├── patched_app.py          ← La version corrigée avec validation des entrées
├── test_vulnerability.py   ← Tests prouvant que la vulnérabilité existe et que le correctif fonctionne
├── requirements.txt
└── analysis/
    └── root_cause.md       ← Analyse détaillée au niveau du code du bug

Exécution de la démonstration

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-26198-analysis.git
cd CVE-2026-26198-analysis
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Exécuter les tests (aucune base de données externe requise — utilise SQLite)
python -m pytest test_vulnerability.py -v

# Exécuter la démonstration interactive de l'exploit
python exploit_demo.py

Le correctif

Le correctif valide que le paramètre de colonne correspond à un champ réel du modèle avant qu'il n'atteigne sqlalchemy.text(). Cela est réalisé via une approche de liste blanche : seuls les noms de colonnes qui existent dans les définitions de champs du modèle sont autorisés.

Voir patched_app.py pour l'implémentation et analysis/root_cause.md pour l'analyse complète.

Points clés à retenir

  1. Les ORM ne sont pas une protection automatique contre l'injection SQL. Si une méthode d'ORM accepte une chaîne brute et la transmet à une clause textuelle, c'est tout aussi dangereux que d'écrire du SQL brut.
  2. Une validation partielle est pire qu'aucune validation. Le fait que sum()/avg() soient validées mais pas min()/max() a créé un faux sentiment de sécurité.
  3. Liste blanche, pas liste noire. Le correctif valide par rapport aux noms de colonnes connus et sûrs plutôt que d'essayer de filtrer les schémas malveillants.

Références

  • Avis GitHub (GHSA-xxh2-68g9-8jqr)
  • Entrée NVD
  • Dépôt Ormar

Licence

MIT

Télécharger l’outil