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-31891 — Injection SQL dans l'optimiseur d'agrégation MongoLite via toJsonExtractRaw() | Kitploit
Outils/GitHubGitHub/ffasterss/cve-2026-31891
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'IntrusionSécurité des Bases de Données
GitHubffasterss/cve-2026-31891

CVE-2026-31891

Injection SQL dans l'optimiseur d'agrégation MongoLite via toJsonExtractRaw()

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

Injection SQL dans l'optimiseur d'agrégation MongoLite via toJsonExtractRaw()

  • Classe de vulnérabilité : Injection SQL (CWE-89)
  • Produit : Cockpit CMS (édition Core)
  • Version affectée : 2.13.4 et probablement toutes les versions depuis l'introduction de l'optimiseur d'agrégation
  • Image Docker testée : cockpithq/cockpit:core-2.13.4
  • Commit source : 7fe563023b7fae854c857d2e2dc0878ef28fbb5f (tag 2.13.4)
  • GitHub : https://github.com/Cockpit-HQ/Cockpit
  • Date de découverte : 2026-02-28
  • Score CVSS : 7,7 (Élevé) — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

1. Résumé exécutif

Une vulnérabilité d'injection SQL a été identifiée dans Cockpit CMS (édition Core version 2.13.4). La vulnérabilité se situe dans l'optimiseur d'agrégation , plus précisément dans la méthode . Les noms de champs contrôlés par l'utilisateur sont concaténés directement dans les requêtes SQL sans assainissement approprié.

MongoLite
toJsonExtractRaw()

Un attaquant authentifié disposant d'un accès en lecture (via une clé API) à un modèle de contenu peut injecter des commandes SQL arbitraires dans le pipeline d'agrégation via le point de terminaison REST /api/content/aggregate/{model}.

Cette faille permet aux attaquants de :

  • Contourner le filtre de contenu publié prévu (_state=1) pour lire les brouillons non publiés.
  • Extraire le contenu complet des documents de toute collection dans la même base de données SQLite.
  • Énumérer le schéma interne de la base de données via sqlite_master.

2. Reproduction de l'exploit étape par étape

Les étapes suivantes démontrent comment un attaquant peut contourner le filtre d'autorisation _state=1.

Prérequis

  • Cockpit CMS 2.13.4 ou inférieur
  • Une clé API avec au moins un accès en lecture à un modèle de collection de contenu.

2.1 : Configurer le modèle de contenu

  1. Connectez-vous au tableau de bord d'administration de Cockpit CMS en tant qu'administrateur.
  2. Accédez à Contenu > Modèles et créez un nouveau modèle nommé testcol.
  3. Ajoutez deux champs Texte au modèle : title et body.

Capture d'écran : Configuration du modèle de contenu testcol Configuration du modèle de contenu testcol

2.2 : Configurer le rôle API et la clé

  1. Accédez à Paramètres > Rôles.
  2. Créez ou modifiez un rôle (par exemple, MasterRole) afin qu'il dispose de la permission LECTURE pour le modèle testcol.

Capture d'écran : Configuration des permissions du rôle pour la collection Configuration des permissions du rôle pour la collection

  1. Accédez à Paramètres > API & Sécurité (Clés API).
  2. Ajoutez une nouvelle clé API et attribuez-lui le rôle MasterRole que vous venez de configurer. Copiez la valeur de la clé (par exemple, API-b8e8...).

Capture d'écran : Configuration de la clé API avec le rôle d'accès en lecture Configuration de la clé API avec le rôle d'accès en lecture

2.3 : Créer du contenu d'exemple (y compris un brouillon secret)

  1. Accédez à Contenu > testcol.
  2. Créez un élément intitulé Public et définissez son état sur PUBLIÉ (icône verte).
  3. Créez un deuxième élément intitulé SECRET_DRAFT et définissez son état sur NON PUBLIÉ (icône rouge).

Capture d'écran : La liste des éléments montrant un élément publié et un élément non publié La liste des éléments montrant un élément publié et un élément non publié

2.4 : Exécuter l'exploit

Par défaut, les requêtes API standard ne renvoient que le contenu dont l'état est Publié. Cependant, en injectant du SQL dans le pipeline d'agrégation, le filtre de contenu publié peut être contourné.

  1. Construisez la charge utile suivante. La charge utile sort de la fonction SQL json_extract() et ajoute un commentaire SQL -- pour neutraliser le SQL de fin, ciblant spécifiquement la clause WHERE qui limite les résultats aux éléments publiés.

Champ injecté :

root@kitploit:~
$title') as _id FROM collections_testcol--

Pipeline JSON complet :

root@kitploit:~
[{"$group": {"_id": "$title') as _id FROM collections_testcol--", "c": {"$sum": 1}}}]
  1. Encodez le pipeline JSON dans l'URL et envoyez une requête GET via le navigateur (ou curl) au point de terminaison /api/content/aggregate/testcol. Assurez-vous de remplacer YOUR_API_KEY par la clé générée à l'étape 2.2 :
root@kitploit:~
curl "http://localhost:8080/api/content/aggregate/testcol?api_key=YOUR_API_KEY&pipeline=%5B%7B%22%24group%22%3A%20%7B%22_id%22%3A%20%22%24title%27%29%20as%20_id%20FROM%20collections_testcol--%22%2C%20%22c%22%3A%20%7B%22%24sum%22%3A%201%7D%7D%7D%5D"

2.5 : Vérification de l'exploit

Comme le montre la capture d'écran finale ci-dessous, la réponse API renvoie avec succès l'élément SECRET_DRAFT malgré son état explicitement NON PUBLIÉ. Cela confirme que l'injection SQL contourne le mécanisme d'autorisation central de l'application et permet l'extraction non autorisée de données via l'API.

Capture d'écran : Extraction réussie des données non publiées 'SECRET_DRAFT' Extraction réussie des données non publiées 'SECRET_DRAFT'

3. Impact — Conséquences

Dans un déploiement CMS headless classique, une clé API publique en lecture seule est souvent intégrée/codée en dur dans le JavaScript frontal. En exploitant cette vulnérabilité via le point de terminaison API public, un attaquant peut :

  • Contourner le filtre de contenu publié pour lire les brouillons non publiés, les éléments archivés et le contenu masqué.
  • Lire toutes les collections de contenu dans la même base de données content.sqlite, y compris les collections pour lesquelles la clé API n'est pas autorisée.
  • Énumérer le schéma de la base de données via sqlite_master pour découvrir tous les noms et structures de tables.

4. Chronologie de divulgation

DateAction
2026-02-28Vulnérabilité découverte lors d'une recherche de sécurité autorisée
2026-03-02Rapport soumis au fournisseur
2026-03-02Correctif du fournisseur -- https://github.com/Cockpit-HQ/Cockpit/commit/b6a0b45c5e8fe16f3027b889583cc3a9127ab4b0
2026-03-09Correctif publié v 2.13.5 -- https://getcockpit.com/releases

Annexe :

  • https://github.com/Cockpit-HQ/Cockpit/security/advisories/GHSA-7x5c-vfhj-9628
  • https://www.cve.org/CVERecord?id=CVE-2026-31891
Télécharger l’outil