flawopen.com/AI Security/langroid-neo4j-cypher-injection-cve-2026-55615
Langroid CVE-2026-55615: Prompt-to-Cypher-Injection
Langroid leitete modellgeneriertes Cypher ungeprüft an Neo4j weiter. Aktualisieren Sie auf 0.65.5; Datenbankrechte bleiben die Sicherheitsgrenze.[1], [2], [4]
Eine Bibliothekarin nimmt eine Frage in Alltagssprache entgegen und gibt die daraus entstehenden Datenbankanweisungen direkt an einen mächtigen Mitarbeiter weiter. Verändert ein feindlicher Zettel die Frage, führt der Mitarbeiter die Anweisungen trotzdem aus. CVE-2026-55615 erlaubte nicht vertrauenswürdigen Inhalten, das von Langroid an Neo4j gesendete Cypher zu beeinflussen.[1]
Kernkonzepte & Begriffe
Cypher- Neo4js Abfragesprache zum Lesen und Ändern von Graphdaten. Weitere Prozeduren hängen von Serverkonfiguration und Kontorechten ab.[1]
Neo4jChatAgent- Langroid-Agent, der natürlichsprachliche Aufgaben in Cypher umwandelt und über Lese- oder Erstellungstools an Neo4j sendet.[1], [3]
Prompt injection- Nicht vertrauenswürdige Eingaben beeinflussen das Modell. Vom Modell erzeugte Abfragen sind als nicht vertrauenswürdige Eingabe zu behandeln.[1]
Framework-Zuordnungen
- CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-74
Schritt-für-Schritt Angriffsablauf
Ein anfälliger Graph-Agent akzeptiert Modellabfragen
Betroffen sind Langroid-Versionen bis 0.65.4. Der dokumentierte Pfad setzt voraus, dass Angreifer den Prompt direkt oder über abgerufene Inhalte beeinflussen und das Modell ein Neo4jChatAgent-Tool verwendet. Das Advisory nennt CWE-74 und CVSS 4.0 9,2 (kritisch).[1], [2]
Inhalte beeinflussen das weitergeleitete Cypher
Im anfälligen Pfad leitete cypher_retrieval_tool msg.cypher_query an read_query und cypher_creation_tool die Abfrage an write_query weiter. Das Advisory verfolgt diese Werte bis session.run(query, parameters) und tx.run(query, parameters), ohne vorherige Prüfung.[1], [3]
Datenbankrechte bestimmen die unmittelbare Auswirkung
Das Lesetool kann Daten offenlegen, die dem verbundenen Konto zugänglich sind; das Erstellungstool kann Daten im Rahmen dieser Rechte ändern oder löschen. Das Advisory nennt auch den Remote-Abruf über LOAD CSV. Host-Datei- oder Befehlszugriff hängt von aktivierten Prozeduren und gewährten Rechten ab.[1]
Version 0.65.5 ergänzt Prüfungen an den Tools
Laut Maintainer behebt Version 0.65.5 dies mit standardmäßig deaktiviertem allow_dangerous_operations, schränkt Leseabfragen ein und prüft ausgewählte Primitive in den Tools. Das ist zusätzliche Absicherung, keine Autorisierung. Die Maintainer-Lösung und Langroids SQL-Agent-Leitfaden verweisen auf Datenbankrollen mit minimalen Rechten als Sicherheitsgrenze.[1], [3], [4], [5]
Quellcode: Verwundbar vs. Sicher
Der anfällige Ausschnitt folgt dem Advisory; das korrigierte Beispiel stellt das Verhalten von 0.65.5 dar, nicht den wörtlichen Patch. Die Korrektur prüft an der Tool-Grenze, beschränkt Lesen und steuert gefährliche Aktionen. Behandeln Sie Abfrageprüfungen als zusätzliche Absicherung, nicht als Autorisierung. Maintainer-Lösung und Langroids SQL-Agent-Leitfaden verweisen auf Neo4j-Rollen mit minimalen Rechten als Sicherheitsgrenze; isolieren Sie außerdem den Agent-Prozess. Laut Langroid-Dokumentation sind diese Schlüsselwort- und Musterprüfungen umgehbar; die Neo4j-Rechte bleiben die maßgebliche Zugriffskontrolle.[1], [3], [4], [6]
# Verwundbarer Neo4jChatAgent-Pfad (Langroid <= 0.65.4).
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
query = msg.cypher_query
return self.read_query(query)
def read_query(self, query: str):
with self.driver.session() as session:
return session.run(query, parameters=None)
# Verhalten ab 0.65.5: an der LLM-seitigen Tool-Grenze validieren.
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
query = msg.cypher_query
rejection = validate_cypher_query(
query, is_write=False,
allow_dangerous=self.config.allow_dangerous_operations,
)
if rejection is not None:
return rejection
return self.read_query(query)
Checkliste für Engineering & Systemsicherheit
- ✓Ermitteln Sie Langroid-Installationen und Lockfiles; aktualisieren Sie betroffene Umgebungen auf 0.65.5 oder neuer und bauen Sie Images neu.[1], [4]
- ✓Lassen Sie
allow_dangerous_operations=False, außer eine geprüfte und dokumentierte Ausnahme ist nötig.[1], [4] - ✓Verwenden Sie pro Agent ein eigenes Neo4j-Konto mit nur benötigten Labels, Daten, Aktionen und Prozeduren.[1], [5]
- ✓Deaktivieren Sie unnötige APOC-, dbms.security-, LOAD-CSV-, Datei-, Netzwerk- und Betriebssystemfunktionen; prüfen Sie effektive Rechte.[1]
- ✓Halten Sie Lesetools schreibgeschützt und verlangen Sie für wichtige Änderungen eine separate Autorisierung.[1], [4]
- ✓Testen Sie normale Lesezugriffe und weisen Sie eine harmlose Richtlinien-Testabfrage vor dem Treiberaufruf zurück.[3], [4]
- ✓Beschränken Sie Datei-, Geheimnis- und Netzwerkzugriff des Agent-Hosts.[1]
- ✓Prüfen Sie Datenbanklogs und Agent-Traces für den betroffenen Zeitraum; erneuern Sie möglicherweise offengelegte Zugangsdaten.